2017-02-18 13 views
0
 .MODEL medium 
     .STACK   ; Stack default size 1024 bytes 
     .DATA   ; Data segment (for variables) 

     .CODE   ; Run-able code goes in code segment 
     .STARTUP  ; Handover code from OS call to typer.exe 

nextc: mov ah,8  ; Call int21 with ah=8 returns with 
     int 021h  ; al equal to the ASCII character pressed 
     mov dl,al  ; dl is assigned value in al, dl=al 

     mov ah,02h  ; Call int21 with ah=2 prints ASCII 
     int 021h 


     cmp dl,'q'  ; compare dl with ASCII ‘q’= 
     jz qt   ; if key pressed was not a ‘q’ go back 

     cmp dl,'/' 
     jnc skp 

     cmp dl,'9'  ;;compair 9 to q. if there is a carry 9<q 
     jc skp 
skp:   
     jmp nextc 

qt: 
     .EXIT   ; Terminate and return control to OS 
     END    ; End of file (for compiler) 
+0

Я довольно уверен, что моя логика в порядке, и что проблема находится где-то в тха печати даного – Aaron

+0

Извините за плохое объяснение, но им пытаются получить он печатает числа 0-9 включительно и заканчивается на q. – Aaron

+0

Я нахожусь на своем телефоне, но ваша попытка как-то в правильном направлении. Вам нужно проверить, что было введено. Но вы не проверяете все, начиная с 0-9. –

ответ

0

Просто используйте jl (прыжок, если меньше) и jg (переход, если больше) инструкции.

cmp dl,'0'  ;compare to 0 
jl skp   ; if less then skip 

cmp dl,'9'  ;compare to 9 
jg skp   ;if greater than skip 

success:  ;yes we;ve found a digit. 
..... 
skp:   ;no digit.   
..... 

Вот список всех условных переходов доступны: http://x86.renejeschke.de/html/file_module_x86_id_146.html

+0

С 8-битными кодами ASCII я бы скорее использовал 'ja' /' jb' (беззнаковое сравнение). Это уровень сложности Java для проверки значений байтов как подписанных. (хотя в этом конкретном случае он будет работать нормально) – Ped7g