我做了一个多人游戏,并实现了自己的中断来处理多人输入,但有一个问题,每当我执行一个功能的睡眠或等待时间的程序崩溃,这是最后一个程序崩溃的程序
my_delay proc
push ax
; Input: CX = delay count
; Output: None
; Description: Pauses execution for approximately CX * 55 ms
mov cx,delay
mov al,0
mov ah, 86h ; INT 21h, Function 86h - "wait" or "sleep"
int 21h
pop ax
ret
my_delay endp
字符串
1条答案
按热度按时间ktecyv1j1#
字符串
直接从 delay 变量本身加载CX与关于CX是proc的参数的评论不太一致。
型
CX表示约65 ms的倍数。
型
这个函数不依赖于AL,但是DX,你应该已经初始化了。微秒的数量应该在组合CX:DX中。
型
该函数不属于DOS API。它是属于
int 15h
的sysyem BIOS函数。你在DOSBox中运行你的程序吗?如果你这样做了,那么你就知道DOSBox在这个特定的功能上是有缺陷的。
型
我在回答你之前的问题时修改了代码,在汇编x86中处理09,今天它工作得很好!在过去,这并不总是正确的。请参阅https://codereview.stackexchange.com/questions/101035/a-low-tech-approach-to-measuring-game-speed,它使用了一种替代方法来实现(非常)短的延迟。
另一个解决方法是 * 永远不要在CX非零的情况下调用此BIOS函数 *:
型