基于80x86汇编实现的显示系统日期和时间

学习是我快乐

发布日期: 2020-06-04 21:33:30 浏览量: 132
评分:
star star star star star star star star star star
*转载请注明来自write-bug.com

一、任务内容

  • 题目:显示系统日期和时间

  • 要求

    • 在屏幕特定位置显示当前系统日期和时间
    • 显示的日期和时间要求即时更新,即设计为跳动的时钟
    • 可自定义电子钟的显示区域、显示位置、背景和前景色或以图形化方式显示
    • 当按下某个键,如“Q”时,程序返回DOS,数字钟消失。完成该任务
  • 提高:再设计一款倒计时,倒计时时间由用户设定(如30分钟),时间到有提示(如时间背景、前景色变化或文本提示等)

二、设计思路

  • 时钟显示思路分析:
    取中断向量 mov al,1ch; mov ah,35h; int 21h; 获取 1ch 中断向量到 es:bx; 利用 mov al,1ch; mov ah,25h; int 21h; 设置中断向量 ds:dx 将中断向量地址存入堆栈中,设置中断向量的地址入口改为 intpro 后利用 in al,21h 读中断屏蔽寄存器;通过 dos 的中断 (mov ah, 2ah; int 21h) 获取系统时间。

  • Q退出思路分析:
    通过在 delay 中利用 BIOS 中断向量的 16 号中断,该中断通过获取键盘输入的将扫描码存入 ah 中得到,通过 CMP 比较是否为 10h (Q的扫描码),是则退出。

  • 在屏幕中间显示时间并改变颜色思路分析
    通过 BIOS 的 int 10 号中断的 ah 2 设置光标位置,ah 9 光标位置显示字符及属性 BH=显示页、AL=字符、 BL=属性、CX=字符重复次数、改变颜色;

  • 倒计时显示思路分析:
    利用 int 21h; ah 01 输入时间(通过循环输入), 取中断向量 mov al, 1ch; mov ah, 35h; int 21h; 获取1ch中断向量到 es:bx; 利用 mov al,1ch; mov ah,25h; int 21h; 设置中断向量 ds:dx 将中断向量地址存入堆栈中,设置中断向量的地址入口改为 intpro 后利用 in al,21h 读中断屏蔽寄存器;利用 and al, 11111110b 开定时器中断,每执行18次(一秒)将输入的时间减1秒完成倒计时系统;

显示系统时间流程图

倒计时流程图

三、调试结果及分析

3.1 调试结果

显示系统时间

倒计时

3.2 分析

3.2.1 系统时间分析

通过在理解的基础上,通读显示系统时间代码,在循环delay中不理解等待中断含义,然后不理解mov count,18的含义;但随着课程的进行,自己翻阅资料理解其含义。循环delay等待系统中断即叫INT 16H 中断设置在其中,可以实现按Q触发中断完成退出;count的含义为中断定时器设置循环的次数,中断定时器每秒执行182次而mov count,18刚好可以将程序每秒刷新一次。

3.2.2 倒计时分析

通过对系统时间任务的完成,结合自己对其的理解,思考得到首先输入一个时间,可以利用定时器的作用,每隔一秒将输入的字符以减一,然后对其显示输入,完成简单的倒计时功能,由于代码类似,仅完成对分钟、秒钟的倒计时。

四、总结或感悟

通过本次课程设计对底层汇编语言有了更深的理解,如果说数据结构是为了培养对降低程序的时间复杂度的能力,那么汇编语言在一定范围内培养对降低程序的空间复杂度的能力;汇编语言并不像高级语言随意设置变量,而是在有限的资源下完成对于程序的设计,更加考验的耐心。

因为曾经听过年长的人对于汇编语言的见解,学习汇编并非无用,它可以培养一种编程的思维,而且对于我比较感兴趣的反汇编有一定的关联,所以在课下有去练习相关的汇编程序练习、结合课程的进行和老师的讲解,对于本次课程设计的完成思路比较明确,难点在于没有规范的编程习惯,比如:在任务一调用汇编函数时并没有保护现场,导致输出栈顶编译器的信息;不了解BIOS各个中断。

尝试编写INT 9H 完成对于Q的退出,虽然有完成任务,但是学而不精,在执行一段时间后程序将自动退出,所以弃用了这种方法;后经过老师的指导了解到INT 16H 的功能,通过获取扫描码实现按Q退出。

在本次课程设计中,在接连不断的错误中,一次次的改正,不断学习,不断的改正,一次次的思考,一遍遍的检查,最终完成调试的检测,可谓结果来自不易,最后的结果也完成了任务,也是对自己的这几天花费的交代。

上传的附件 cloud_download 系统时间与倒计时.rar ( 237.46kb, 9次下载 )

发送私信

43
文章数
9
评论数
最近文章
eject