Из больших букв в маленькие - Assembler
Формулировка задачи:
Вот есть программа которая делает из маленьких большие:
Нужно переделать программу на оборот из больших в маленькие, мой вариант:
Оно вроде большие буквы меняет на маленькие, но маленькие меняет на какие-то каракули.
model tiny .code .startup mov dx, offset Sos ; устанавливаем указатель на строку mov ah,0Ah int 21h ; введение строки mov cx,[bx + 1] ; указываем счетчик lst: ; початок циклу mov di,cx cmp Sos[di+1],60h ; проверка или буква маленькая jl next ; если буква большая - идем дальше sub Sos[di+1],20h ; если маленькая - меняем ее next: loop lst ; переход на начало цикла mov dx, offset Sos + 2 ; конец цикла, установить указатель на строку mov ah,9 int 21h ; вывод сроки ret Sos db 20 dup($) ; переменная-строка end
model tiny .code .startup mov dx, offset Sos mov ah,0Ah int 21h mov ah,0 mov bx,dx mov cx,[bx + 1] lst: mov di,cx сmp Sos[di+1],41h jl next add Sos[di+1],20h next: loop lst mov dx, offset Sos + 2 mov ah,09h int 21h ret Sos db 20 dup("$") ; end
Решение задачи: «Из больших букв в маленькие»
textual
Листинг программы
.model tiny .code .startup mov dx, offset Sos ; устанавливаем указатель на строку mov ah,0Ah int 21h ; введение строки mov cx,[bx + 1] ; указываем счетчик lst: ; початок циклу mov di,cx cmp Sos[di+1], 'A' jl next cmp Sos[di+1], 'Z' ; проверка или буква маленькая ja next ; если буква большая - идем дальше add Sos[di+1],20h ; если маленькая - меняем ее next: loop lst ; переход на начало цикла mov dx, offset Sos + 2 ; конец цикла, установить указатель на строку mov ah,9 int 21h ; вывод сроки ret Sos db 20 dup('$') ; переменная-строка end
Объяснение кода листинга программы
- Устанавливаем указатель на строку, используя регистр dx, и выбираем регистр ah равным 0Ah. Делаем ввод строки с помощью команды int 21h.
- Устанавливаем счетчик cx, используя [bx + 1].
- Начало цикла: a. Устанавливаем указатель на счетчик cx, используя регистр di. b. Проверяем, является ли текущий символ в строке Sos большим. Если это так, переходим к следующему символу. c. Если текущий символ меньше или равен 'A', то это маленькая буква. Добавляем 20 к текущему символу. d. Возвращаемся в начало цикла, используя команду loop.
- Конец цикла: a. Устанавливаем указатель на строку Sos, смещаясь на 2 байта вперед, используя регистры dx и bx. b. Выводим строку Sos, используя команду int 21h с регистром ah равным 9.
- Завершаем программу, используя команду ret.
- Переменная-строка Sos содержит 20 символов '$'.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д