Строка: Осуществить замену строчных букв на заглавные и заглавных на строчные - Assembler
Формулировка задачи:
вот мае задание, помогите пожалуйста ......
Ввести текст в байтовый массив. Осуществить замену маленьких букв на БОЛЬШИЕ, БОЛЬШИЕ на маленькие и вывести весь текст.
Текст вывести как в файл так и на экран. Имя файла берется из командной строки, если он задан, если нет, то запросить ввести имя файла.
Решение задачи: «Строка: Осуществить замену строчных букв на заглавные и заглавных на строчные»
textual
Листинг программы
org 100h jmp start mess0 db 10,'File name....: $' mess1 db 10,'Type string..: $' mess2 db 10,10,'Create file..: Okey!' db 10,'File contants: $' buff db 128 dup('$') ; буфер для строки, fName db 013 dup(0) ; ..и для имени файла handl dw 0 ; дескриптор файла fSize dw 0 ; ..и его размер start: ;============= Проверяем ком.строку на имя файла ===================// cmp byte[80h],0 ; jz begin ; jump если нет параметра mov ah,9 ; иначе: сохраняем имя файла mov dx,mess0 ; int 21h ; mov si,82h ; начало ком.строки в PSP (без пробела) mov di,fName ; сохранять строку по адресу DI @@: ; lodsb ; читаем строку.. cmp al,0dh ; jump если конец ком.строки je begin ; int 29h ; выводим имя на экран, stosb ; ..и записываем в буфер jmp @b ; ;============= Запрос на ввод текста ===============================// begin: ; mov ah,9 ; mov dx,mess1 ; int 21h ; mov di,buff ; сохранять по-адресу DI call saveString ; mov [fSize],cx ; запомним длину введённой строки! ;============= Обработка текста (меняем регистр букв) ==============// mov si,buff ; mov di,si ; адрес источника (он-же приёмник) replace: ; lodsb ; читаем символ в AL cmp al,40h ; цифры/знаки не трогаем jb fuck ; xor al,20h ; инверсия регистра букв! fuck: ; stosb ; пере/записываем буфер loop replace ; мотаем цикл СХ-раз... ;============= Определяемся с именем файла =========================// cmp [fName],0 ; переход, если имя файла jnz createFile ; ..указано в ком.строке mov ah,9 ; иначе: вводим/сохраняем файл-нэйм mov dx,mess0 ; int 21h ; mov di,fName ; call saveString ; ;============= Файловые операции.. =================================// createFile: ; mov ah,3ch ; mov dx,fName ; mov cx,20h ; нормальный атрибут int 21h ; jc error ; ошибка? writeFile: ; mov bx,ax ; ВХ = дескриптор созданного файла mov ah,40h ; mov dx,buff ; mov cx,[fSize] ; сколько байт записать int 21h ; jc error ; closeFile: ; mov ah,3eh ; int 21h ; ;============= Выводим на экран изменённую строку ==================// mov ah,9 ; mov dx,mess2 ; int 21h ; mov dx,buff ; int 21h ; jmp exit ; на выход! ;============= Обработчик ошибки.. =================================// error: ; call @f ; db 7,10,'<--File operations Error!$' @@: ; pop dx ; mov ah,9 ; int 21h ; ;============= Выход из приложения =================================// exit: xor ax,ax ; int 16h ; int 20h ; ;ннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн saveString: ; xor cx,cx ; здесь будет длина строки mov ah,1 ; dos 01h @@: ; int 21h ; cmp al,13 ; Enter заканчивает ввод je next ; stosb ; сохраняем символ в буфере inc cx ; длина строки +1 jmp @b ; сл.символ.. next: ; ret
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д