Консультация № 190017
13.11.2016, 14:26
0.00 руб.
0 1 1
Здравствуйте! Прошу помощи в следующем вопросе: Изучаю assembler в колледже. Пришел новый преподаватель. Азов не дал. Объяснил какие есть команды, а как применять не сказал.
Задал вот такое задание. Если человек вводит число от 0 до 9, то если больше, равно и меньше 5, выдавалось сообщение.
Сказала, что нет команд меньше, равно. И все нужно делать через команду cmp
У меня была идея. Я программе сказала, если меньше 5, то сообщение такое.
Вот к примеру :
sgt segment
org 100h
begin:
mov ah, 1h
int 21h
cmp al, 5
cmp 0,5
jz OK_1

_________
OK_1:
mov ah, 9h
mov bx, offset mes1
mes1 db 'Menshe'
jmp segment

И так со всеми числами от 0 до 9 .
Я правильно все сделала?
Подскажите, как правильней написать?


Приложение:
sgt segment
org 100h
begin:
mov ah, 1h
int 21h
cmp al, 5
cmp 0,5
jz OK_1

_________
OK_1:
mov ah, 9h
mov bx, offset mes1
mes1 db 'Menshe'
jmp segment

Обсуждение

давно
Посетитель
7438
7205
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]
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Форма ответа