首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 汇编语言 >

,怎么用汇编语言写一段延时代码

2012-02-16 
求助,如何用汇编语言写一段延时代码想用汇编语言实现程序的5分钟的延时,要怎么写代码,有哪位大虾指点一下

求助,如何用汇编语言写一段延时代码
想用汇编语言实现程序的5分钟的延时,要怎么写代码,有哪位大虾指点一下小弟吗,谢谢!

[解决办法]
在什么环境中?Dos?WinXP?Linux?用什么编译器?
如果可能,取BIOS时钟,判断是否到了5分钟!
如果是Win系统则可以申请计时器!
[解决办法]
dos中的延时可以用TSR时钟中断或者用loop模拟

NT下的延时可以用系统自带的API来完成
[解决办法]
6.3 取Windows时间


很多读者看到“定时器”这个词的时候往往就联想到时钟,笔者也曾是如此,但是经过6.2节的介绍后就可以发现,定时器是不能用来构造时钟的,定时器用于时钟程序中只能是用在定时刷新屏幕这个功能上,要得到系统的时间还是要靠别的方法。
在Win32编程中,和获取系统时间相关的函数有3个:
invokeGetLocalTime,lpSystemTime
invokeGetSystemTime,lpSystemTime
invokeGetTickCount
它们之间的区别是:
GetTickcount返回的是本次Windows启动以来的ms数,得到的时间数值直接在eax中返回,由于这是一个32位的整数,可以表示的范围是1~ffffffffh ms,所以当Windows连续运行49.7天以后,计数器会清零并重新开始。
GetLocalTime返回当前的时间,GetSystemTime返回当前的格林威治标准时间,这两个函数返回的时间数据包括年、月、日、时、分、秒、毫秒以及星期,数据比较多,所以无法放在eax中返回,应用程序需要预先设置一个SYSTEMTIME结构的缓冲区,并将缓冲区地址lpSystemTime当参数传递给函数,函数会把时间数据返回到这个缓冲区中。
SYSTEMTIME结构的定义如下:
SYSTEMTIME STRUCT
wYear WORD ?;年
wMonth WORD ?;月
wDayOfWeek WORD ?;星期,0=星期日,1=星期一,……
wDay WORD ?;日
wHour WORD ?;时
wMinute WORD ?;分
wSecond WORD ?;秒
wMilliseconds WORD ?;毫秒
SYSTEMTIME ENDS
需要注意的是,结构中的字段全部是word类型的,而Win32程序中用的往往是dword型变量,所以在使用这些数据之前往往要先把它们转换为dword类型,用movzx指令就可以很方便地完成这个工作,如movzx eax,stSystemTime.wYear将wYear字段扩展到32位后放到eax中。
和获取系统时间的函数相对应,可以用下面的两个函数设置系统时间:
invokeSetLocalTime,lpSystemTime
invokeSetSystemTime,lpSystemTime
同样,SetLocalTime中的参数代表本地时间,SetSysTime中的参数代表格林威治标准时间,在调用函数之前,要把需要设置的时间放到一个SYSTEMTIME结构中并把结构地址当做参数传递给Windows。

热点排行