文档介绍:目录
1 设计的目的要求 1
设计目的 1
设计任务 2
具体要求 2
2任务原理分析 2
2
3
子程序1 3
子程序2 4
子程序3 7
拓展设计及功能说明 9
程序设计的主流程图 9
3 方案比较 10
方案1 10
原理说明 10
相关理论知识 11
方案1的流程图 12
方案2 13
原理说明 13
4 程序的调试过程 14
5 调试过程中的问题 16
6 心得体会 17
参考文献 18
附录 19
显示系统时间的程序
1 设计的目的要求
设计目的
1. 掌握中断的使用方法。
2. 掌握BIOS系统功能调用。
3. 掌握基本的显存读写技术。
4. 学会用汇编语言编写一个较完整的实用程序, 培养自己的动手操作能力。
5 . 学习程序设计的基本思路和方法,编程、调试、撰写报告等。
设计任务
采用汇编语言设计一个显示系统时间程序,在屏幕上以“时:分:秒”的形式显示本机系统的时间。按Q退出程序。
具体要求
设计任务及要求分析
方案比较及认证说明
系统原理阐述
软件设计课题需要说明:软件思想,流程图,源程序及程序注释
调试记录及结果分析
总结
参考资料
附录:芯片资料或程序清单,软件演示屏幕拷贝图或硬件实物图
2任务原理分析
本课设的设计任务要求在运行时,在屏幕上以“时:分:秒”的形式显示本机系统的时间,并且按Q退出程序。由此可知,首先定义光标显示界面,然后调用BIOS中断,读取系统时间,并将调用的用二进制表示的时间数转换成ASCII码,并将时间数存入显存区,最后将存在系统内存区的时间用字符串的形式显示出来。由于获取了的系统时间不会自动刷新,所以我们要设计成循环的方式来不断获取系统的时间,这样就形成了会跳动的电子钟了。程序一旦进入运行,就将不间断地在显示屏显示时间,要想程序停止运行,可输入“Q”即可退出。如果用图形方式显示效果会更好,而且需注意设置显示时候的背景颜色。在本课程设计中,主要需要三个子程序来完成。
子程序1的功能就是设置光标位置。
其基本原理是:在子程序1中,我用到了显示器驱动程序(INT 10H)中AH=2的功能。AH=2的功能是设置光标位置,入口参数:(DH,DL)=行、列;BH=页号(图形模式为0)。
为了使显示的时间在DOS屏幕中的中间显示,DX设置为0A24H,即DH=0AH,DL=24H,就是在0AH行,24H列。如果想改变时间显示的位置,只要改变DX的数值就可以达到目的。由于在第零页中定位,可用SUB BH,BH来完成此操作。
子程序1的源程序如下:
MOV BX,005EH
MOV AX,1301H
INT 10H ;设置光标位置
MOV AH,02H
MOV DH,0AH
MOV DL,24H ;dh显示行(x坐标);dl显示列(y坐标)
MOV BH,0 ;页码为0
INT 10H
子程序1的流程图如图1所示。
图1 子程序1的流程图
子程序2
子程序2的功能是把二进制数转换为十进制ASCII码输出。
其基本原理是:首先要完成二进制到十进制数的转换,一般采用“除10取余”法来完成,其大致过程如下:将待转换的数(在AX中)除以10,得到第一个商和余数,此第一个余数就是所求的十进制数的个位;再用第一个商除以10,得到第二个商和余数,此第二个余数就是所求十进制数的十位;……;重复这一过程直至商为0,此时的余数就是所求十进制数的最高位。
在内存中分配一缓冲区,用来存放以上分离出来的十进制数的每一位,然后再逐个转换成ASCII码,转换成ASCII码的过程很简单,就是给每个十进制位加上30H即可;最后送显示器输出。从转换的过程可以看出,先分离出来的是十进制数的低位,要后显示;后分离出来的是十进制数的高位,应该先显示。因此在编程时,我们可以利用堆栈操作中“先进后出、后进先出”的特性,当分离出各十进制位时依次入栈,要逐个转换成ASCII码送显示时依次出栈。
子程序2的流程图如下:
BIN10OUT PROC ;二进制转十进制ASCUII码输出子程序
PUSH DI
PUSH DX
PUSH CX
PUSH AX
MOV CX,0
LEA DI,TBUF ;去缓冲区首地址
BIN1: PUSH CX
MOV AX,DX
MOV DX,0
MOV CX,10
DIV