Вывести сообщение в зависимости от длины строки - Assembler
Формулировка задачи:
Доброго времени суток! Начал недавно изучать ассемблер, но всё еще не могу понять его. Помогите, пожалуйста, вот с такой задачей: "Необходимо ввести с клавиатуры строку, а программу должна вывести следующие слова :длинное, если кол-во символов>10, короткое, если <10 и ноль, если ничего не введено".
Решение задачи: «Вывести сообщение в зависимости от длины строки»
textual
Листинг программы
.data buf db 255,?,dup 255(?) ;сообщения для вывода .code Start: mov ax,@data mov ds,ax lea dx,buf mov ah,0Ah int 21h mov ah,9 cmp buff[1],0 je outzero ;если длина 0 cmp buf[1],10 jb outshort ;если длина < 10 lea dx,msglong ;в иных случаях длинная jmp output outshort: lea dx,msgshort jmp output lea dx,msgzero output: int 21h exit: mov ax,4c00h int 21h end start
Объяснение кода листинга программы
В этом коде выполняется следующая последовательность действий:
- Переменная
buf
инициализируется значением 255, следующим за ним неизвестным значением (предположительно это длина строки), и далее 255(предположительно это сама строка). - Код переходит к метке
Start
. - Переменная
ax
получает значение 255 (предположительно это сегмент данных). - Переменная
ds
получает значениеax
, т.е. сегмент данных. - Код переходит к метке
outzero
. - Если значение первого байта строки (представленное в регистре
al
) равно 0, то код переходит к меткеoutzero
. - Если значение первого байта строки (представленное в регистре
al
) меньше или равно 10, то код переходит к меткеoutshort
. - В противном случае, когда значение первого байта строки больше 10, код переходит к метке
outlong
. - Если значение первого байта строки равно 0, то выводится сообщение
Сообщение для случая, когда длина строки равна 0
. - Если значение первого байта строки меньше или равно 10, то выводится сообщение
Сообщение для случая, когда длина строки меньше или равна 10
. - В противном случае, когда значение первого байта строки больше 10, выводится сообщение
Сообщение для случая, когда длина строки больше 10
. - Код переходит к метке
exit
. - Переменная
ax
получает значение 4C00h (предположительно это код завершения работы программы). - Код вызывает функцию окончания работы программы с помощью команды
int 21h
. - Код завершается.