Вывод введенного числа в TASM - Assembler

Формулировка задачи:

Здравстуйте, никак не могу разобраться с ассемблером на примере кода. Нужно вывести введенное число с текстом "Вы ввели" И нужно сделать проверку это то число или нет, если то - то пусть выводится "нажмите любую клавишу" если нет "то введите число еще раз" . Пожалуйста, очень срочно
data segment para public "data" ;начало сегмента данных
message db 'Enter: $'  ;наша строка (приглашение для ввода двух символов с клавы) 
data ends   ;конец сегмента данных
 
stk segment stack ;начало сегмента стека
db 256 dup ("?")  ;выделение памяти под стек 
stk ends          ;конец сегмента стека
 
code segment para public "code" ;начало сегмента кода
main proc   ;начало процедуры
assume cs:code,ds:data,ss:stk ;сопоставление сегментных регистров и сегментов 
mov ax,data  
mov ds,ax   ;инициализация сегмента данных через промежуточный регистр ax
mov ah,9    ;функция вывода сообщения на экран
mov dx,offset message   ;адрес начала сообщения
int 21h     ;прерывание, чтобы функция выполнилась
xor ax,ax   ;обнуление регистра ax (здесь это не обязательно, можно удалить эту строку)
mov ah,1h   ;функция ввода с клавиатуры символа с эхом 
int 21h     ;прерывание, чтобы функция выполнилась 
            ;ASCII-код введенного символа помещается в регистр al
mov dl,al   ;помещаем ASCII-код введенного символа в регистр dl
sub dl,30h  ;предполагаем, что была нажата цифра. преобразовываем ASCII-код цифры в символ 
cmp dl,9h   ;проверяем, действительно ли была нажата цифра
jle M1      ;если была нажата цифра, то прыгаем на метку M1   
sub dl,7h   ;если была нажата буква, то дополнительно преобразовываем ASCII-код буквы в символ
M1:         ;метка M1
mov cl,4h   ;один шестнадцатеричный символ занимает 4 бита (полубайт)  
shl dl,cl   ;сдвигаем символ из младшего полубайта в старший   
int 21h     ;вводим второй символ. прерывание, чтобы функция ввода выполнилась
sub al,30h  ;предполагаем, что была нажата цифра. преобразовываем ASCII-код цифры в символ 
cmp al, 9h  ;проверяем, действительно ли была нажата цифра 
jle M2      ;если была нажата цифра, то прыгаем на метку M2
sub al,7h   ;если была нажата буква, то дополнительно преобразовываем ASCII-код буквы в символ
M2:         ;метка M2
add dl,al   ;помещаем символ в младший полубайт
mov ax,4c00h;функция выхода из программы. код возврата - ноль   
int 21h     ;прерывание, чтобы функция выполнилась 
main endp   ;конец процедуры
code ends   ;конец сегмента кода
end main    ;указывается метка (процедура), с которой должна начаться выполняться программа

Код к задаче: «Вывод введенного числа в TASM - Assembler»

textual
org 100h
jmp start
 
mes0  db  13,10,'Введите число:  $'
mes1  db  13,10,'Вы ввели.....:  $'
mes2  db  13,10,'------------------------'
      db  13,10,'Нажмите любую клавишу...$'
 
start: mov   ah,9           ; мессага
       mov   dx,mes0        ;
       int   21h            ;
       mov   ah,1           ; вводим символ
       int   21h            ;
       cmp   al,'0'         ;
       jb    start          ; переход, если мень нуля
       cmp   al,'9'         ;
       ja    start          ; переход, если больше 9
       push  ax             ; значит цифра - запомним её
       mov   ah,9           ;
       mov   dx,mes1        ; мессага
       int   21h            ;
       pop   ax             ; восстанавливаем цифру
       int   29h            ; выводим её на экран
       mov   ah,9           ;
       mov   dx,mes2        ; мессага
       int   21h            ;
 
exit:  xor   ax,ax          ; пауза..
       int   16h            ;
       mov   ax,4C00h       ; выход!
       int   21h            ;

11   голосов, оценка 3.909 из 5


СОХРАНИТЬ ССЫЛКУ