我正在尝试在我正在创建的游戏中延迟我的移动。我的问题是,每次我使用 int 1Ah 时,运动都会突然变得“生锈”(不是以恒定的直线运动),而我使用“nop”的延迟程序会产生稳固的运动而不是生锈。我的老师说我不能使用带有“nop”的循环,我不知道如何使用 1Ah 进行延迟并且看起来不错(不生锈)我正在使用图形模式和程序集 x86 谢谢。它工作得很好,但我的老师可能出于某种原因不喜欢它。
我的延迟过程:
proc delay
delRep:
push cx
mov cx, 0FFFFH
delDec:
dec cx
jnz delDec
pop cx
dec cx
jnz delRep
ret
endp delay
Run Code Online (Sandbox Code Playgroud)
这是使用int 15hwith的另一个“延迟” ah=86h,请在您的游戏中测试它:
;DELAY 500000 (7A120h).\ndelay proc \n mov cx, 7 ;HIGH WORD.\n mov dx, 0A120h ;LOW WORD.\n mov ah, 86h ;WAIT.\n int 15h\n ret\ndelay endp \nRun Code Online (Sandbox Code Playgroud)\n\n使用系统时间的另一个“延迟”,它应该每秒重复大约 5 次:
\n\ndelay proc \nsystem_time: \n;GET SYSTEM TIME.\n mov ah, 2ch\n int 21h ;RETURN HUNDREDTHS IN DL.\n;CHECK IF 20 HUNDREDTHS HAVE PASSED. \n xor dh, dh ;MOVE HUNDREDTHS...\n mov ax, dx ;...TO AX REGISTER.\n mov bl, 20\n div bl ;HUNDREDTHS / 20.\n cmp ah, 0 ;REMAINDER.\n jnz system_time\n ret\ndelay endp \nRun Code Online (Sandbox Code Playgroud)\n\n接下来是第三个延迟(以秒为单位) ,它需要一个变量:
\n\nseconds db 0 ;\xe2\x97\x84\xe2\x96\xa0\xe2\x96\xa0 VARIABLE IN DATA SEGMENT.\n\ndelay proc \ndelaying: \n;GET SYSTEM TIME.\n mov ah, 2ch\n int 21h ;\xe2\x97\x84\xe2\x96\xa0\xe2\x96\xa0 RETURN SECONDS IN DH.\n;CHECK IF ONE SECOND HAS PASSED. \n cmp dh, seconds ;\xe2\x97\x84\xe2\x96\xa0\xe2\x96\xa0 IF SECONDS ARE THE SAME...\n je delaying ; ...WE ARE STILL IN THE SAME SECONDS.\n mov seconds, dh ;\xe2\x97\x84\xe2\x96\xa0\xe2\x96\xa0 SECONDS CHANGED. PRESERVE NEW SECONDS.\n ret\ndelay endp \nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
8267 次 |
| 最近记录: |