int 16h / ah = 1甚至在用户按下另一个键后也反复给出相同的键按下

问题描述 投票:0回答:1

我正在用汇编语言编写游戏代码,其中恐龙的运动取决于用户按下的键。我以某种方式实现了我的代码,即如果用户按下空格键,则程序应终止,并且恐龙在按下“ a”时应向正确的方向移动。但是我面临的一个问题是,在第一次按下任何键之后,程序将不查找其他任何被按下的键,这表明它一次又一次地按下了第一次按下的键。如何解决?

我正在使用mov ah,01h和int 16h的功能,该功能返回al寄存器中按下键的ascii。之后,我将其与所需的ascii键进行了比较,但是只有在第一次按下任何键时,这16h的表现才不错。

label2: 
        mov ah, 1h
    int 16h
    mov keyboardkey, al        ;keyboardkey is variable for storing ascii of key pressed

    .IF( keyboardkey == 32 )
        ret
    .ENDIF

    .IF( keyboardkey == 97 )
            mov bx, startingXaxis
            add bx, 10
            mov startingXaxis, bx
            call drawdinosaour
    .ENDIF

    .IF (keyboardkey == 98 )
        mov bx, startingXaxis
        sub bx, 10
        mov startingXaxis, bx
        call drawdinosaur
    .ENDIF  

        call delay              ;this function passes the program for 1/4 second
        jmp label2

我原以为,每当我按下空格键时,该程序都会终止,但它只会选择第一次按下的键,此后它将继续根据该第一个键进行操作,而不会寻找此后按下的任何键。 >

我正在用汇编语言编写游戏代码,其中恐龙的运动取决于用户按下的键。我已经以某种方式实现了我的代码,如果用户按下空格键,则...

assembly x86 bios keyboard-input
1个回答
0
投票

int 0x16, ah =0x01不会从缓冲区中删除键,并且(如果未按任何键,则不会等到用户按下一个键。

© www.soinside.com 2019 - 2024. All rights reserved.