`
qdujunjie
  • 浏览: 108706 次
  • 性别: Icon_minigender_1
  • 来自: Mars
社区版块
存档分类
最新评论

汇编语言计时器代码分析(19)

阅读更多

 

 

来自于《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

 

 

 代码完。

0
0
分享到:
评论

相关推荐

    汇编语言学习资料(代码)

    《汇编语言课程设计案例精编》源代码,案例1判断闰年程序、案例2产生随机数并运算的程序、案例3计算平台长度程序、案例4加减乘除四则运算 、案例4加减乘除四则运算 、案例4加减乘除四则运算 、案例7代码转换程序...

    基于AT89S52 单片的频率计

    会到keil c51 生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑, 容易理解。在开发大型软件时更能体现高级语言的优势。 Keil C51 可以完成编辑、编译、连接、调试、仿真等整个开发流程。开发人 员可用IDE...

    51单片机基础应用设计C语言实例(400例)合集.zip

    51单片机基础应用设计C语言实例(400例)合集: 10-LED循环左移 100-24c02记忆开机次数 101-24c02存储上次使用中状态 102-DS1302 时钟原理 103-DS1302可调时钟 ...214-红外遥控键值解码12864液晶显示(汇编语言)

    c语言编写单片机技巧

    1. C语言和汇编语言在开发单片机时各有哪些优缺点? 答:汇编语言是一种用文字助记符来表示机器指令的符号语言,是最接近机器码的一种语言。其主要优点是占用资源少、程序执行效率高。但是不同的CPU,其汇编语言...

    51单片机C语言编程基础及实例

    接上电复位电路,以及手动复位电路,分析复位工作原理 接配置:EA(PIN31)。说明原因。 发光二极的控制:单片机 I/O 输出 将一发光二极管 LED 的正极(阳极)接 P1.1,LED 的负极(阴极)接地 GND。只要 P1.1 输出...

    模拟汽车尾灯动作-单片机系统课程设计报告+51软件程序设计源码.zip

    如果用汇编语言编程就用.ASM后缀,因为课设要求用C语言编程所以后缀选择led.c。 保存好文件后点击ADD将led.c文件添加进Test工程中。如此便可开始编程了。如需生产HEX文件,则右键点击Target 1,选择options for ...

    基于89C51单片机程序实例

    主要学习51定时器汇编语言编写中断功能,和如何编写中断服务程序。P8纵向连接上面2个。 10-music2 -- 用C语言中断演奏。主要学习在C语言中定义51内部定时器中断服务程序。P8纵向连接上面2个。 11-disp1234 -- 采用...

    基于单片机的多功能秒表系统课程设计.doc

    我们使用汇编语言来 编写程序,采用模块化程序设计方法,主程序有多个子程序构成,这些子程序可以单独 的设计,调试和管理,其中包括加1子程序、减1子程序、延时子程序、快加子程序,复 位子程序和显示子程序等。...

    嵌入式系统设计实战.王宜怀(带详细书签).pdf

    3.6 第一个汇编语言工程:控制小灯闪烁 117 3.6.1 汇编工程文件的组织 118 3.6.2 Light构件汇编程序 122 3.6.3 Light测试工程主程序 124 3.6.4 理解第一个汇编工程的执行过程 126 第4章 基于硬件构件的嵌入式...

    delphi 开发经验技巧宝典源码

    0003 如何定制代码编辑器 3 0004 保存自定义开发环境桌面 4 1.2 组件安装 4 0005 安装ActiveX组件 4 0006 安装不同类型的第三方组件 5 0007 在Delphi中加载QReport报表组件 7 1.3 创建DLL文件 8 0008...

    delphi 开发经验技巧宝典源码06

    0003 如何定制代码编辑器 3 0004 保存自定义开发环境桌面 4 1.2 组件安装 4 0005 安装ActiveX组件 4 0006 安装不同类型的第三方组件 5 0007 在Delphi中加载QReport报表组件 7 1.3 创建DLL文件 8 0008...

    Solaris 动态跟踪指南

    提供器和探测器 ................................................................................................................................. 27 编译和检测过程 ........................................

Global site tag (gtag.js) - Google Analytics