加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

Windows – 如何在16位MASM程序集x86中创建一个睡眠功能?

发布时间:2020-12-14 04:34:43 所属栏目:Windows 来源:网络整理
导读:我正在尝试在16位MASM程序集x86中创建一个睡眠/延迟程序,例如,每500ms屏幕上打印一个字符. 从我所做的研究,似乎有三种方法来实现这一点 – 我想使用那个使用CPU时钟滴答的方法. 请注意,我在Mac OS X Snow Leopard上通过VMWare Fusion运行Windows XP – 我不
我正在尝试在16位MASM程序集x86中创建一个睡眠/延迟程序,例如,每500ms屏幕上打印一个字符.
从我所做的研究,似乎有三种方法来实现这一点 – 我想使用那个使用CPU时钟滴答的方法.

请注意,我在Mac OS X Snow Leopard上通过VMWare Fusion运行Windows XP – 我不知道是否影响任何事情.

有人可以指出我正确的方向,还是提供一个可以调整的代码的工作?谢谢!

我发现的代码应该是每秒在屏幕上打印“A”,但不起作用(我想使用毫秒).

TOP:
MOV AH,2C
INT 21
MOV BH,DH  ; DH has current second
GETSEC:      ; Loops until the current second is not equal to the last,in BH
MOV AH,2C
INT 21
CMP BH,DH  ; Here is the comparison to exit the loop and print 'A'
JNE PRINTA
JMP GETSEC
PRINTA:
MOV AH,02
MOV DL,41
INT 21
JMP TOP

编辑:遵循GJ的建议,这是一个工作程序.只是叫它

DELAY PROC
 TIMER:
 MOV     AH,00H
 INT     1AH
 CMP     DX,WAIT_TIME
 JB      TIMER
 ADD     DX,3         ;1-18,where smaller is faster and 18 is close to 1 second
 MOV     WAIT_TIME,DX
 RET
DELAY ENDP
其实可以使用ROM BIOS中断1Ah功能00h,“读取当前时钟计数”.或者您可以在地址$40:$6C上阅读双字,但您必须确保原子阅读.它以约18.2 Hz的速度增加MS-DOS.

欲了解更多信息,请参阅:The DOS Clock

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读