2025年4月3日 星期四 乙巳(蛇)年 正月初四 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > 汇编

汇编语言实例:显示系统时间

时间:03-05来源:作者:点击数:67

MS-Windows 提供了设置屏幕光标位置和获取系统时间的控制台函数。要使用这些函数,先为两个预先定义的结构 COORD 和 SYSTEMTIME 创建实例:

  • COORD STRUCT
  • X WORD ?
  • Y WORD ?
  • COORD ENDS
  • SYSTEMTIME STRUCT
  • wYear WORD ?
  • wMonth WORD ?
  • wDayOfWeek WORD ?
  • wDay WORD ?
  • wHour WORD ?
  • wMinute WORD ?
  • wSecond WORD ?
  • wMilliseconds WORD ?
  • SYSTEMTIME ENDS

这两个结构都在 SmallWin.inc 中进行了定义,这个文件位于汇编器的 INCLUDE 目录下,并且由 Irvine32.inc 引用。首先获取系统时间(调整本地时间),调用 MS-Windows 的 GetLocalTime 函数,并向其传递 SYSTEMTIME 结构的地址:

.data
sysTime SYSTEMTIME <>
.code
INVOKE GetLocalTime, ADDR sysTime

接着,从 SYSTEMTIME 结构检索相应的数值:

movzx eax,sysTime.wYear
call WriteDec

当 Win32 程序产生屏幕输出时,它要调用 MS-Windows GetStdHandle 函数来检索标准控制台输出句柄(一个整数):

.data
consoleHandle DWORD ?
.code
INVOKE GetStdHandle, STD_OUTPUT_HANDLE
mov consoleHandle,eax

设置光标位置要调用 MS-Windows SetConsoleCursorPosition 函数,并向其传递控制台输岀句柄,以及包含 X、Y 字符坐标的 COORD 结构变量:

.data
XYPos COORD <10,5>
.code
INVOKE SetConsoleCursorPosition, consoleHandle, XYPos

程序清单

下面的程序检索系统时间,并将其显示在指定的屏幕位置。该程序只在保护模式下运行:

  • ; 结构 (ShowTime.asm)
  • INCLUDE Irvine32.inc
  • .data
  • sysTime SYSTEMTIME <>
  • XYPos COORD <10,5>
  • consoleHandle DWORD ?
  • colonStr BYTE ":",0
  • .code
  • main PROC
  • ; 获取 Win32 控制台的标准输出句柄
  • INVOKE GetStdHandle, STD_OUTPUT_HANDLE
  • mov consoleHandle,eax
  • ; 设置光标位置并获取系统时间
  • INVOKE SetConsoleCursorPosition, consoleHandle, XYPos
  • INVOKE GetLocalTime,ADDR sysTime
  • ; 显示系统时间 (hh:mm:ss).
  • movzx eax,sysTime.wHour ; 小时
  • call WriteDec
  • mov edx,offset colonStr ; ":"
  • call WriteString
  • movzx eax,sysTime.wMinute ; 分钟
  • call WriteDec
  • call WriteString ; ":"
  • movzx eax,sysTime.wSecond ; 秒
  • call WriteDec
  • call Crlf
  • exit
  • main ENDP
  • END main

SmallWin.inc(自动包含在 Irvine32.inc 中)中的上述程序采用如下定义:

STD_OUTPUT_HANDLE EQU -11
SYSTEMTIME STRUCT ...
COORD STRUCT ...
GetStdHandle PROTO,
    nStdHandle:DWORD
GetLocalTime PROTO,
    lpSystemTime:PTR SYSTEMTIME
SetConsoleCursorPosition PROTO,
    nStdHandle:DWORD,
    coords:COORD

下面是示例程序输出,执行时间为下午 12:16:

12:16:35
Press any key to continue...
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门