【问题标题】:How to end a loop using ALT key in 8086如何在 8086 中使用 ALT 键结束循环
【发布时间】:2013-12-06 09:31:02
【问题描述】:

我的老师要求我编写一个程序,该程序最多可容纳 100 个数字,并在用户按下 ALT 键时停止。
并且每当用户按下 ENTER 键时也会转到下一个数字。
但我知道怎么做,因为 ALT 键没有 ASCII 码,我必须使用 INT 16H 的服务之一。
但是我该如何使用呢?
我写了一个我认为可能是正确的代码,但响应是用户应该按两次键。
请帮助如何解决它?

这是我的代码:

.....
下一个数字:

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                                       *
;***************************************************
....

【问题讨论】:

    标签: assembly decimal cpu-registers x86-16


    【解决方案1】:

    这是一个完整的程序(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
    

    【讨论】:

    • 但还有一个问题:我们如何知道用户是否按下数字“8”,似乎程序将 ALt 和 8 定义为相等!
    • 8 和 '8' 不一样。要检查是否按下了 8 键,您可以执行 cmp al,'8' / je eight_pressed 之类的操作,其中“回显到屏幕”代码当前所在的位置。
    • 抱歉打扰了,我一直在整理这段代码,如何编写一个程序来获取最多 6 位数字并找到平均值?
    • 这是一个不同的问题,应该作为一个新问题发布。但是你应该先尝试自己解决它。想想你会如何用另一种语言做到这一点,然后将其翻译成 x86 程序集。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-25
    • 2021-07-30
    • 2012-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多