gpt4 book ai didi

assembly - 如何在不等待的情况下读取 key ,汇编 8086

转载 作者:行者123 更新时间:2023-12-04 04:14:41 25 4
gpt4 key购买 nike

我正在组装 8086 中制作太空入侵者,用于测试我正在使用 DOSBox。让我向您展示我的代码:

;--------------------
;Update hero
;--------------------
update:
call vsync
call update_hero ; method to read keyboard
call set_video
call clear_screen
call draw_hero
jmp update

现在过程 update_hero 是:
update_hero proc
mov ah, 01h
int 16h
cmp al, 97
je left_pressed
cmp al, 100
jne none_pressed
inc hero_x
left_pressed:
dec hero_x
none_pressed:
ret
update_hero endp

如您所见,我正在尝试读取运动的“a”或“d”,但是,它不起作用,您能帮我找出原因吗?

我想要做的是从键盘读取而不等待它,这就是我使用子功能 ah, 01h 的原因。 .

干杯。

编辑

我检查了中断 here ,修改了代码,现在可以正常工作了:
update_hero proc
mov ah, 01h ; checks if a key is pressed
int 16h
jz end_pressed ; zero = no pressed

mov ah, 00h ; get the keystroke
int 16h

begin_pressed:
cmp al, 65
je left_pressed
cmp al, 97
je left_pressed
cmp al, 68
je right_pressed
cmp al, 100
je right_pressed
cmp al, 81
je quit_pressed
cmp al, 113
je quit_pressed
jmp end_pressed
left_pressed:
sub hero_x, 2
jmp end_pressed
right_pressed:
add hero_x, 2
jmp end_pressed
quit_pressed:
jmp exit
end_pressed:

ret
update_hero endp

最佳答案

您只是在检查是否有可用的字符,但实际上并未从缓冲区读取字符。所以下次你检查时,它仍然存在。

从这个关于 BIOS 功能的页面 http://webpages.charter.net/danrollins/techhelp/0230.HTM

INT 16H,AH=1

Info: Checks to see if a key is available in the keyboard buffer, and
if so, returns its keycode in AX. It DOES NOT remove the
keystroke from the buffer.

关于assembly - 如何在不等待的情况下读取 key ,汇编 8086,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13143774/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com