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