Замените входящие в массив заглавные латинские буквы на строчные - 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.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д