【发布时间】:2020-02-03 02:13:42
【问题描述】:
我正在编写一个汇编程序,根据按下的键在屏幕上移动一个像素。
根据here修改重复延迟的方式是使用
mov ah, 03h
mov al, 05h ;set typematic rate/delay
mov bh, 00h ;repeat delay: 250ms <-- this has to be 0
mov bl, 00h ;typematic rate: 30
int 16h
这是完整的代码
cmp [keypress], 'a'
je left
cmp [keypress], 'A'
je left
cmp [keypress], 'd'
je right
cmp [keypress], 'D'
je right
jmp endMove
left:
dec xpos
jmp endMove
right:
inc xpos
jmp endMove
endMove:
call drawPixel
input:
mov keypress, 0
mov ah, 01h
int 16h
jnz animLoop
mov ah, 00h
int 16h
mov keypress, al
jmp animLoop
它工作正常,除了键盘重复延迟使像素移动一次,然后停止 250 毫秒,然后重新开始连续移动而没有问题。 如何消除重复延迟?
【问题讨论】:
-
这是您可以设置的最短时间。我猜你可能需要实现自己的键盘处理而不是使用 BIOS。
-
@EuroMicelli:这个问题是关于初始延迟,而不是重复周期。 (通常这是根据每秒的速率定义的,而不是周期 = 反速率)。延迟 = 0 / 速率 = 50 意味着 1 秒的按键恰好给出 50 个字符,而不是 1 + 0.75 * 50 = ~38(在最初的 250 毫秒内只有 1 个字符,然后是 50Hz)。对于使用重复键而不是本身向上/向下跟踪键的游戏,延迟 = 0 将是您想要的。
-
@PeterCordes 你是对的。删除。谢谢
标签: assembly input keyboard dos x86-16