Замените входящие в массив заглавные латинские буквы на строчные - Assembler
Формулировка задачи:
Помогите решить задачу Введите массив ASCII – кодов. Замените входящие в массив заглавные латинские буквы на строчные
i8086
Решение задачи: «Замените входящие в массив заглавные латинские буквы на строчные»
textual
Листинг программы
.model small
.data
arr db 16,0,17 dup('$')
.stack 100h
.code
start:
mov ax,@data
mov ds,ax
mov ah,0Ah
lea dx,arr
int 21h
lea si,arr+2
xor ch,ch
mov cl,byte ptr [arr+1]
change:
mov al,byte ptr [si]
sub al,41h
cmp al,19h
ja skip
or byte ptr [si],20h
skip:
inc si
loop change
mov ah,02h
mov dl,0Ah
int 21h
mov ah,02h
mov dl,0Dh
int 21h
mov ah,09h
lea dx,arr+2
int 21h
mov ah,4Ch
mov al,00h
int 21h
end start
Объяснение кода листинга программы
- Создается маленькая модель памяти:
.model small - Объявляется массив данных
arrдлиной 16 элементов. По умолчанию все элементы массива установлены в$. - Выделяется стек размером 100h.
- Начало исполнения программы
start:. - Помещается адрес сегмента данных в регистр
ax, после чего он загружается в регистр данныхds. - Инициализируется регистр
ahзначением 0Ah, а в регистрdxзагружается адрес массиваarr. Затем вызывается прерывание 21h для чтения строки. - Загружается адрес в регистр
si, смещенный на 2 байта от начала массиваarr. Обнуляется регистрch, а в регистрclзагружается значение, находящееся во втором байте массиваarr, то есть количество введенных символов. - Запускается цикл
change, который выполняется столько раз, сколько было введено символов. При этом для каждого символа выполняются следующие действия:- Загружается значение байта из памяти, расположенное по адресу
si, в регистрal. - Из регистра
alвычитается значение 41h для преобразования заглавной латинской буквы в строчную. - Проверяется, если значение в регистре
alбольше 19h (значение 'Z' в ASCII), то пропускается. - В остальных случаях к значению из
siдобавляется 20h для преобразования заглавной буквы в строчную. - Инкрементируется регистр
si. - Выполняется цикл
loop changeдля продолжения обработки следующего символа.
- Загружается значение байта из памяти, расположенное по адресу
- Выводится 0Ah (для переноса строки).
- Выводится 0Dh (для возврата каретки).
- Выводится содержимое массива
arrпосле преобразования заглавных букв в строчные. - Программа завершает свою работу, вызывается прерывание 4Ch с параметром 00h.