汇编语言计时器代码分析(19)
来源:互联网 发布:毒蛇队与马刺比赛数据 编辑:程序博客网 时间:2024/05/09 20:28
来自于《Intel汇编语言程序设计》(第四版)第11章----------32位windows编程。
程序内容为,每经过100毫秒就在屏幕上显示一个点,当大于5000毫秒时退出。
代码如下:
TITLE Calculate Elapsed Time ( TimingLoop.asm )
; This program uses GetTickCount to calculate the number
; of milliseconds that have elapsed since the program
; started.
INCLUDE Irvine32.inc
TIME_LIMIT = 5000
.data
startTime DWORD ?
dot BYTE ".",0
.code
main PROC
INVOKE GetTickCount ; get milliseconds
mov startTime , eax
L1: mov edx , OFFSET dot ; display a dot
call WriteString
INVOKE Sleep , 100 ; sleep for 100ms
INVOKE GetTickCount
sub eax , startTime ; check the elapsed time
cmp eax , TIME_LIMIT
jb L1
L2: exit
main ENDP
END main
程序里用到了两个新函数:GetTickCount 和 Sleep。
GetTickCount 函数原型如下:
GetTickCount PROTO ; 返回值在EAX中
GetTickCount 用来返回系统启动以来所经过的毫秒数,因为计数值是一个双字,所以系统连续运行49.7天之后,计数值将归0.
Sleep 函数原型如下:
Sleep PROTO,
dwMilliseconds : DWORD
用来暂停参数指定的毫秒数。
注释一下程序:
TITLE Calculate Elapsed Time ( TimingLoop.asm )
; This program uses GetTickCount to calculate the number
; of milliseconds that have elapsed since the program
; started.
INCLUDE Irvine32.inc
TIME_LIMIT = 5000 ; 设定了截止时间5000毫秒
.data
startTime DWORD ?
dot BYTE ".",0
.code
main PROC
INVOKE GetTickCount ; 调用GetTickCount 得到程序开始的时间(系统启动以来的时间),保存在eax中
mov startTime , eax ; 将现在的时间保存在变量中
L1: mov edx , OFFSET dot ; display a dot
call WriteString
INVOKE Sleep , 100 ; 间隔100毫秒
INVOKE GetTickCount ; 再次得到现在的时间
sub eax , startTime ; 减去程序开始时的时间
cmp eax , TIME_LIMIT ; 看是否大于截止时间
jb L1 ; 如果小于则继续执行
L2: exit
main ENDP
END main
代码完。
- 汇编语言计时器代码分析(19)
- 汇编语言数组求和代码分析
- 汇编语言GetDateTime代码分析(20)
- 计时器汇编语言程序设计
- 汇编语言数组求和代码分析(1)
- 汇编语言字符串加密代码分析(2)
- 汇编语言数组乘法代码分析(9)
- 汇编语言求字符串长度代码分析(10)
- 汇编语言裁剪字符串代码分析(11)?
- 汇编语言冒泡排序算法代码分析(12)
- 汇编语言二分查找排序代码分析(13)
- 汇编语言醉汉走路代码分析(15)
- 汇编语言显示系统时间代码分析(14)
- 汇编语言数组中查找正数代码分析(3)
- 汇编语言表格驱动分支选择代码分析(4)
- 汇编语言AAA指令多字节加法代码分析(5)
- 汇编语言值传递和引用传递代码分析(6)
- 汇编语言16位随机整数填充数组代码分析(7)
- 汇编语言循环遍历链表代码分析(16)
- 汇编语言32位控制台读取用户输入字符程序代码分析(17)
- 汇编语言写文件读文件代码分析(18)
- 连哭都是我的错
- 如何远程登录计算机
- 汇编语言计时器代码分析(19)
- 汇编语言GetDateTime代码分析(20)
- java对世界各个时区(TimeZone)的通用转换处理方法
- 汇编语言秒表程序代码分析(21)
- 一生的五句话
- QTP9.2安装问题汇总(转载)
- SetMode、SetProcPrimissions函数运用(full kernel mode)
- html head 参数详解
- mysql表的复制