14.11.2016, 11:46
общий
это ответ
Здравствуйте, Nika.kondr!
Примерно так. Комментарии в тексте.
Обратите внимание, не проводится проверка на коды 0 - 9
Добавлена проверка на ESC для выхода из программы
[code lang=asm h=200]
sgt segment
;Если используются явные сегменты, то для компилятора необходимо указать,
;с какими сегментными регистрами они связаны. (assume)
assume cs:sgt, ds:sgt
org 100h ;необходимо для COM-программы
begin: ;точка входа
mov ah, 1h
int 21h ;читаем код ASCII с клавиатуры с выводом на экран
cmp al, 27 ;проверим на код клавиши ESC для выхода из программы
jne continue ;что-то другое - продолжаем
mov ax, 4c00h ;иначе завершаем программу
int 21h
continue:
;для функции 9 адрес выводимой строки должен быть в регистре DX
mov dx, offset mes1 ;загрузим предварительно адрес первого сообщения
cmp al, '5' ;с клавиатуры получаем не число, например, 5, а ASCII-код символа '5' = 35h!!!
jl mess ;после сравнения сморим результат: если меньше - идем на вывод сообщения
mov dx, offset mes2 ;для >= загружаем предварительно следующее сообщение
jg mess ;и проверяем на больше, если справедливо, то идем на вывод
;ravno
mov dx, offset mes3 ;если не меньше и не больше, остается равно
mess: ;выводим сообщение
mov ah, 9h ;функция вывода строки DS:DX (у нас формат COM, поэтому все в одном сегменте!)
int 21h
jmp begin ;и на повтор ввода
;выводимые сообщения
mes1 db ' - Menshe',0dh,0ah,'$' ;отделим минусом с пробелами, перейдем на новую строку.
mes2 db ' - Bolshe',0dh,0ah,'$' ;в конце обязательно символ '$'. Это требует функция 9
mes3 db ' - Ravno',0dh,0ah,'$'
sgt ends ;обязательно закрываем сегмент
end begin ;и программу с указанием точки входа
[/code]
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен