TASM Assembly 8086 Pong 游戏中按键释放后左侧玩家的球拍继续移动

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

我正在开发一个汇编语言乒乓球游戏,即使在释放按键后,左侧玩家的球拍也会继续移动。右侧玩家的拨片工作正常,未按下琴键时会停止。这是我的代码的相关部分:

; Left Player's Paddle Movement
proc keys_p2
pusha
    mov [x_surface_p2],40

    mov ah,1h
    int 16h
    
    cmp al,27 ; ESC
    je endGame 

    cmp al,77h; Up
    jne skip3_p2
        sub [y0_p2],2
        call the_cleaner_buffer
        jmp skip4_p2
        
skip3_p2:
    cmp al,73h ; Down
    jne skip4_p2
        add [y0_p2],2
        call the_cleaner_buffer
        jmp skip4_p2
        
skip4_p2:
    ;call the_cleaner_buffer
    push [y0_p2]
    pop  [y_surface_p2] 

    CALL printPakman_p2

    popa
    ret
endp keys_p2

我的尝试和期望

我预计当没有按键时桨会停止移动。然而,它会无限期地继续移动。我尝试调试按键处理逻辑,但没有找到问题的原因。

debugging assembly tasm pong
1个回答
0
投票

KeyboardBIOS 函数 01h 返回 BIOS 键盘缓冲区的状态。状态通过零标志返回。如果 ZF 清晰,则某个键可用,并且您还可以预览该键在 AL 中的 ASCII 代码和在 AH 中的扫描代码。但如果设置了 ZF,则没有可用的键 并且您不应该像您正在做的那样解释 AL 寄存器

mov ah, 01h  ; BIOS.TestKeystroke
int 16h      ; -> AX ZF
jz  noKey
mov al, 00h  ; BIOS.GetKeystroke
int 16h      ; -> AX

右侧玩家的拨片工作正常,未按下键时停止。

看看工作桨如何发挥作用是最有趣的。
和其他的桨有什么不同吗?

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