如何在8086中使用ALT键结束循环

时间:2013-12-06 09:31:02

标签: assembly decimal cpu-registers x86-16

我的老师让我写了一个程序,该程序最多可以取100个数字并在用户按下ALT键时停止。
当用户按下ENTER键时,也会转到下一个数字。
但我可以弄清楚如何做到这一点,因为ALT键没有ASCII码,我必须使用 INT 16H 的其中一种服务。
但我怎么能用呢? 我写了一个我认为可能正确的代码,但回答是用户应该按两次键 请帮忙怎么解决?

这是我的代码:

  

.....
  next_digit:

mov AH,07H
int 21H
CMP AL,0DH                     ; check if the user pressed ENTER !
JNE check_digit                ; goes to calculate the number !
CMP BH,6                       ;if nothing entered !
JE next_digit
;***************************************************
;*    I think here is the place to put this code : *
;*                                                 *
;*    mov AH,02H                                   *
;*    int 16H                                      *
;*    CMP AL,00001000B                             *
;*    JE END                                       *
;***************************************************
....

1 个答案:

答案 0 :(得分:2)

这是一个完整的程序(在NASM语法中),它读取键击,将它们回显到控制台,并在按下Alt后立即退出:

org 0x100

main:
    mov ah,1
    int 16h     ; CHECK FOR KEYSTROKE
    jnz got_keystroke

    mov ah,2
    int 16h     ; GET SHIFT FLAGS
    test al,8   ; Alt
    jnz done
    jmp main

got_keystroke:
    mov ah,0    ; GET KEYSTROKE (to remove it from the buffer)
    int 16h

    ; Echo to screen
    mov dl,al
    mov ah,2
    int 21h
    jmp main

done:    
int 20h   ; Exit to DOS