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

汇编语言显示系统时间代码分析(14)

阅读更多

 

代码来自于《Intel汇编语言程序设计》(第四版)第10章----结构和宏。

 

如果要显示系统时间,MS-Windows为我们提供了两个函数,用来设置光标位置的控制台函数和现实系统时间的函数。使用这两个函数之前,需要首先定义两个预定义的结构:

 

 

COORD STRUCT

           X WORD ?

           Y WORD ?

COORD ENDS

 

SYSTEMTIME STRUCT

       wYear WORD ?

       wMonth WORD ?

       wDayOfWeek WORD ?

       wDay WORD ?

       wHour WORD ?

       wMinute WORD ?

       wSecond WORD ?

       wMillisecond WORD ?

SYSTEMTIME ENDS

 

在原书中这两个结构体在SmallWin.inc文件中定义,而SmallWin.inc文件位于编译器的INCLUDE目录中,Irvine32.inc引用了SmallWin.inc文件。

 

我们来看看一下返回当前系统时间并在指定的屏幕位置显示的程序清单:

 

TITLE Structures                                (ShowTime.asm)

INCLUDE Irvine32.inc

.data

sysTime SYSTEMTIME <>

XYPos COORD <10,5>

consoleHandle DWORD ?

colonStr BYTE ":",0

 

.code

main PROC

; Get the standard output handle for the Win32 Console.

        INVOKE GetStdHandle , STD_OUTPUT_HANDLE

        mov consoleHandle, eax

; Set the cursor position and get the system time.

        INVOKE SetConsoleCursorPosition , consoleHandle , XYPos

        INVOKE GetLocalTime , ADDR sysTime

; Display the system time ( hh : mm : ss).

        movzx eax,sysTime.wHour                     ; hours

        call WriteDec

        mov edx,offset colonStr                          ; ":"

        call WriteString

        movzx eax,sysTime.wMinute                   ; Minutes

        call WriteDec

        mov edx,offset colonStr                          ; ":"

        call WriteString

        movzx eax,sysTime.wSecond                  ; Seconds

        call WriteDec

 

        call Crlf

        call Crlf

        call WaitMsg                                            ; "Press Enter..."

        exit

main ENDP

END main

 

 

程序中使用的定义来自于SmallWin.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

 

 

 

首先,要想获取系统时间,可以调用MS-Windows的GetLocalTime函数并向他传递SYSTEMTIME结构的地址:

 

.data

sysTime SYSTEMTIME <>

.code

INVOKE GetLocalTime , ADDR sysTime

 

此时,函数GetLocalTime 将把系统时间返回保存至sysTime中。

 

然后,就可以返回某一时间值,例如:

 

movzx eax,sysTime .wYear

call WriteDec

 

便返回了年的时间,并且打印出来。

 

 

当Win32程序想要产生屏幕输出时,需要调用GetStdHandle函数返回标准的控制台输出句柄(一个整数):

 

.data

consoleHandle DWORD ?

.code

INVOKE GetStdHandle , STD_OUTPUT_HANDLE

mov consoleHandle,eax

 

此时,调用GetStdHandle 函数,并传递STD_OUTPUT_HANDLE常量,将返回标准控制台的句柄到eax中。

 

得到标准输出句柄之后,接着要设置屏幕光标位置,可以调用MS-Windows的SetConsoleCursorPosition函数,这个函数需要一个控制台句柄和一个COORD结构变量作为参数:

 

.data

XYPos COORD <10,5>

.code

INVOKE SetConsoleCursorPosition,consoleHandle,XYPos

 

 

 在代码中使用的指令MOVZX (move with zero-extend)指令用于将源操作数的内容拷贝到目的操作数中,并将该值零扩展至16位或32位。该指令仅适用于无符号整数,例如:

 

mov        bx,0A69Bh

movzx    eax,bx          ; EAX = 0000A69Bh

movzx    edx,bl           ; EDX = 0000009Bh

movzx    cx,bl              ; CX = 009Bh

 

 

 

分享到:
评论

相关推荐

    汇编语言关于系统时间显示的程序

    本程序聚焦于利用汇编语言动态显示系统时间,这是一个涉及操作系统接口、中断处理和时间管理的实践应用。 系统时间通常由计算机的实时时钟(RTC,Real-Time Clock)芯片维护,即使在计算机关闭后也能保持准确。在...

    显示系统时钟(汇编)

    ### 汇编语言实现系统时钟显示 #### 概述 本文介绍了一个使用汇编语言编写的简单程序,该程序能够从操作系统获取当前时间,并将其显示在屏幕上。程序主要分为几个部分:数据段定义、堆栈段定义、代码段定义以及一...

    用汇编语言显示系统日期时间

    本部分详细介绍了如何使用汇编语言编写一个程序来显示系统当前的时间与日期。具体需求如下: - 用户界面上应提示用户输入 `"Please input DATE (D) OR TIME (T) OR QUIT (Q):"`。 - 当用户输入 `D` 或 `d` 时,程序...

    汇编显示系统时间原代码

    在本汇编语言课程设计项目中,我们主要探讨了如何使用汇编语言来实现一系列与系统时间相关的功能,包括实时显示系统时间、设置定时闹钟、编辑音乐以及通过键盘交互来控制显示位置和改变背景颜色。这个项目对于理解和...

    不错的汇编语言学习源代码

    10. **案例18系统时间显示**:可能涉及到访问系统时钟寄存器,展示如何获取和显示系统时间。 这些案例覆盖了汇编语言的多个重要领域,包括输入/输出、内存管理、图形处理、文件操作和通信协议。通过分析和实践这些...

    汇编语言编写程序获取系统时间

    通过以上分析可以看出,本程序通过汇编语言实现了在PC机上实时显示系统时间的功能。它不仅展示了汇编语言的强大能力,还介绍了如何通过操作系统提供的API(如DOS中断)来完成实际任务。此外,通过对程序结构的深入...

    汇编语言程序设计实例程序代码

    汇编语言程序设计实例程序代码是学习和掌握汇编语言的关键途径,通过实际编写和分析代码,可以深入理解计算机底层工作原理,提高程序优化能力。 汇编语言的实例通常包括各种类型的任务,例如码字转换和动画效果设计...

    汇编显示系统时间

    通过阅读和分析这些源代码,不仅可以学习到显示系统时间的技术,还能加深对汇编语言和系统底层工作原理的理解。 总的来说,用汇编语言实现显示系统时间是一项涉及硬件交互、中断处理、数据转换和屏幕输出的综合任务...

    动态显示 程序代码 汇编语言

    在计算机科学领域,动态显示程序代码与汇编语言是两个重要的概念,它们在软件开发、系统编程以及教学中都有广泛的应用。动态显示程序代码是指在程序运行过程中,根据需要实时生成和执行代码的一种技术,这通常涉及到...

    STM32 汇编语言,按键控制数码管显示实验,完整源代码

    本实验涉及STM32使用汇编语言编程,实现按键控制数码管显示的功能,这对于理解和掌握微控制器底层操作以及硬件交互非常有帮助。下面将详细介绍这个实验中的关键知识点。 1. **STM32汇编语言**: - STM32的汇编语言...

    汇编语言课程设计——调用系统时间

    5. 结果分析:总结项目成果,可能包括最终程序的时间显示效果,以及对汇编语言调用系统时间的理解。 通过这样的课程设计,学生不仅可以掌握汇编语言的基本语法,还能深入理解计算机硬件与软件的交互,提升底层编程...

    汇编语言小汽车移动代码含执行文件

    本项目“汇编语言小汽车移动代码含执行文件”提供了一个实例,展示了如何使用汇编语言来控制屏幕上的小汽车进行移动,这对于理解计算机底层工作原理和游戏开发的底层逻辑具有重要意义。 汇编语言通常由一系列助记符...

    计算机系统1-汇编语言实验.docx

    本文档是关于计算机系统的汇编语言实验报告,旨在通过 LC-3 汇编语言设计实现相关程序,熟悉和理解 LC-3 的汇编语言指令格式,并掌握在 LC-3 仿真平台下汇编语言代码的设计输入和调试过程。 知识点1:汇编语言基础 ...

    单片机数字钟源代码(汇编语言)

    在本资源中,我们关注的是基于汇编语言编写的单片机数字钟源代码。汇编语言是一种低级编程语言,与机器语言紧密相关,它允许程序员直接控制硬件操作,具有较高的执行效率。 首先,我们要理解单片机的基本工作原理。...

    汇编输入日期显示星期

    在汇编语言编程中,实现“输入日期显示星期”的功能是一项基础且实用的任务。这个程序设计旨在让学习者掌握汇编语言的基本语法和控制结构,同时理解日期处理和错误检查的逻辑。以下是对该程序设计的详细解释: 1. *...

    显示系统时间的汇编程序源代码资料

    在“显示系统时间的汇编程序源代码资料”中,我们将会探讨如何使用汇编语言来获取和显示系统的当前时间。这个主题涵盖了多个重要的知识点: 1. **汇编语言基础**:首先,我们需要理解汇编语言的基本概念,包括指令...

    单片机指令系统分析与汇编语言

    在实际开发中,单片机的指令系统分析有助于优化程序,比如通过合理安排指令顺序减少执行时间,或者利用特定指令的特性来提高代码的运行效率。同时,汇编语言编程也能帮助开发者更好地理解高级语言编译后的机器代码,...

    汇编语言精选案例

    每个案例都包含了源代码,学习者可以通过阅读和分析这些代码,深入理解汇编语言的工作原理和编程技巧。在实践中,可以尝试修改这些代码,增加新的功能或者优化性能,以提升自己的汇编编程技能。同时,这些案例也适用...

    电子时钟源代码汇编语言

    根据提供的文件信息,我们可以深入分析该段代码及相关的知识点,主要围绕“电子时钟源代码汇编语言”这一主题展开。 ### 概述 这段代码是基于51单片机的电子时钟程序的一部分,使用了汇编语言进行编写。程序能够...

    汇编语言课程设计源代码

    通过这些汇编语言课程设计源代码的学习,学生不仅可以掌握汇编语言编程技巧,还能深入理解计算机硬件和操作系统接口,为将来进行系统级编程、嵌入式开发、性能优化等工作打下坚实基础。此外,分析和调试这些代码也能...

Global site tag (gtag.js) - Google Analytics