微机万年历Word文档下载推荐.docx
- 文档编号:4617906
- 上传时间:2023-05-03
- 格式:DOCX
- 页数:26
- 大小:193.91KB
微机万年历Word文档下载推荐.docx
《微机万年历Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《微机万年历Word文档下载推荐.docx(26页珍藏版)》请在冰点文库上搜索。
2设计方案论述 1
2.1.设计方案概括 1
2.2.设计方案具体说明 1
3软件设计说明 2
3.1.理论知识介绍 2
3.2.设计思路介绍 5
3.3.设计流程 5
3.4.程序设计说明 8
4,调试结果及分析 13
4.1程序运行的结果 13
4.2结果分析 14
5收获与体会 15
参考文献 16
附录:
设计源程序 17
摘要
汇编语言属于低级语言,尽管其可读性低,但因其执行效率高,仍然被不少开发和所使用,本课程设计是基于汇编语言的电子万年历的制作,通过调用系统INT一系列的中断服务,来达到调用系统时间的目的,同时对当年的年份进行是否是闰年的判断,并将判断结果显示在界面上。
同时本设计为了增加界面的人性化,增加了画边框、日期用黄颜色突出显示,并且能够通过键盘上的按键关闭程序窗口的效果。
关键字:
汇编语言程序设计,电子日历,微机原理,课程设计
武汉理工大学《微机原理与接口技术》课程设计说明书
电子日历
1设计任务及要求
1.1.设计题目
掌握8086汇编语言程序设计方法,设计一个电子日历。
1.2.设计要求
2.可显示是否闰年
3.日期显示格式"
1.3.设计目的
a)掌握8086CPU微机系统的存储子系统设计
b)掌握8086CPU微机系统的中断控制子系统的设计
c)掌握8086CPU微机系统初始化汇编编程和具体项目功能的软件汇编语言代码编写
d)培养学生理论与实践相结合以及实践创新的能力。
2设计方案论述
2.1.设计方案概括
根据此次课程设计的要求为电子时钟的设计与制作,通过8086汇编语言程序设计方法,设计一个电子日历,实现显示日期及判断闰年功能。
在此要求的基础上为体现出创新性,特加入与电子日历相关的附加功能。
在此次电子时钟的设计中,主要功能是显示系统时间,通过DOS中断调用进行系统时间的提取,然后进行输出至屏幕。
同时要求整个界面看起来人性化,美观,并且能通过键盘按键退出系统。
2.2.设计方案具体说明
日期显示的重点分为三部分,第一部分是如何调用系统日期,此次电子日历的设计通过AH=2AH;
INT21H的DOS中断调用进行系统日期的提取。
提取的日期为二进制的存储模式,而系统的输出需要的是ASCII码,因而第二部分的重点为将二进制数转换成为ASCII码。
第三部分即为将转换的日期的ASCII码输出至屏幕,调用AH=09H;
INT21H中断,将存储的日期作为字符输出。
3软件设计说明
3.1.理论知识介绍
3.1.1.DOS中断与BIOS中断的功能及调用
a)DOS中断类型如下:
20
程序终止
27
结束并驻留内存
21
功能调用
28
键盘忙循环
22
终止地址
29
快速写字符
23
Ctrl_C中断向量
2A
网络接口
24
严重错误向量
2E
执行命令
25
绝对磁盘读
2F
多路转接接口
26
绝对磁盘写
30-3F
保留给DOS
b)BIOS中断类型如下:
10
显示器I/O
16
键盘I/O
11
取设备信息
17
打印机I/O
12
取内存容量
18
ROMBASIC
13
磁盘I/O
19
引导装入程序
14
RS-232串行口I/O
1A
时钟
15
磁带I/O
40
软盘BIOS
DOS功能与BIOS功能都通过软件中断调用。
在中断调用前需要把功能号装入AH寄存器,把子功能号装入AL寄存器,除此而外,通常还需在CPU寄存器中提供专门的调用参数。
一般地说,调用DOS或BIOS功能时,有以下几个基本步骤:
a)将调用参数装入指定的寄存器中;
b)如需功能号,把它装入AH;
c)如需子功能号,把它装入AL;
d)按中断号调用DOS或BIOS中断;
e)检查返回参数是否正确。
本例中需要的BIOS中断如下:
INT
AH
功能
入口参数
出口参数
10
09H
表示在当前的光标处按指令属性显示字符
AH=09H
AL=字符
BH=显示页码
BL=属性
CX=重复输出字符的次数
无
02H
用文本坐标下设置光标位置
AH=02H
DH=行(Y坐标)
DL=列(X坐标)
21
01H
从键盘输入一个字符
无
AL=ASCII
在屏幕上显示一个字符
DL=ASCII
16
读取键盘状态,即读入输入字符
AH=01H—检查普通键盘
ZF=1——无字符输入,否则,AH=键盘的扫描码,AL=按键的ASCII码(字符键)或者0(其他键)
16
00H
从键盘读入字符
AH=00H—强制读普通键盘
AH=键盘的扫描码
AL=按键的ASCII码(字符键)或者0(其他键)
08H
读光标处的字符及其属性
AH=08H
BH=显示页码
AH=属性
AL=字符
06H
1号2号功能的组合
DL=0FFH时为1号功能;
DL寄存器放入字符的ASCII值时就是2号功能
无或AL=ASCII
1A
02H
读取时间
AH=02H
CH=BCD码格式的小时;
CL=BCD码格式的分钟;
DH=BCD码格式的秒;
DL=00H——标准时间,否则,夏令时;
CF=0——时钟在走,否则,时钟停止
3.1.2.子程序的设计
子程序又称为过程,它相当于高级语言中的过程和函数。
在一个程序的不同部分,往往要用到类似的程序段,这些程序段的功能和结构形式都相同,只是某些变量的赋值不同,此时就可以把这些程序段写成子程序形式,以便需要时可以调用它。
过程定义伪操作用在过程(子程序)的前后,使整个过程形成清晰的、具有特定功能的代码块。
其格式为:
procedurenamePROCAttribute
…
procedurenameENDP
当前程序的正常执行,转去执行请求事件的处理工作,CPU在事件处理结束后又继续原来的程序,这个过程称作中断。
中断程序的入口地址称作中断向量。
8086中断系统最多可以支持256个中断源,系统将这些中断向量按照中断类型码的顺序依次存放在内存RAM的最低地址区的1024个内存单元中,这就构成了中断向量表。
中断向量表的逻辑地址范围为0000H:
0000H-0000H:
03FF。
另外,中断向量在中断向量表中的位置就是中断向量地址,它与中断类型码之间的关系可以表示如下:
中断向量地址=0000H:
中断类型码*4
CPU在响应中断后,根据中断源提供的中断类型码,首先计算出中断向量地址,然后根据中断向量地址在表中查找到相应的中断服务程序的入口地址。
本例中即利用了键盘中断来实现相应的功能。
3.2.设计思路介绍
首先在数据段开辟一显示缓冲区,用来存储系统日期。
调用DOS中断,返回系统日期,并将来返回的二进制时间转换成ASCII码,方便日期显示时的调用。
分别将日期的每一位存入显示缓冲区,并最终存入一结束字符号’$’。
调用DOS字符串显示功能将时间显示出来。
并调用屏幕I/O中断,定位光标的开始位置,结合着将时间显示在我们预先定义好的位置上。
由于获取了的系统时间不会自动刷新,所以我们要设计成刷新的方式来不断获取系统的时间。
时间显示的刷新要配合延时程序进行,为了得到良好的显示效果,延时程序要尽量接近1秒,但又不能超过一秒,所以本程序调用了一段较精确的时间延迟程序,屏幕显示延迟一段时间后再提取系统时间,然后显示,由此循环下去。
程序的最后还设计一了个按“Q”键就退出的功能。
所有的按键都采取了判断键值ASCII码确定输入字符的方法确定按键值。
为了显示的美观,还设计一个字符图界面,通过显示字符串的方法显示出来。
3.3.设计流程
在此次的设计中根据设想功能的实现,在主流程下,共有三个分支功能,故其流程图为一个主流程图,三个附加功能的子流程图。
3.3.1.主流程图及说明
在主流程图中可以了解到,进入程序后首先清屏,设置屏幕的显示,使得界面整体布局安排以及功能的提示信息出现在屏幕上。
然后调用系统时间,将时间显示到设定好的位置上。
接着是进行键盘状态的读取,判断有无按键按下,如果没有,重新调用系统时间并显示,如果有按键按下,判断按键字符,若为“D”,执行读取日期子程序;
若为“W”,执行整点报时子程序;
若为“H”,执行计时器子程序;
若为“Q”,则退出程序;
如果均不为上述字符,则返回调用系统时间并显示输出,重复上述过程。
同时三个子程序执行完毕后也会重新返回调用系统时间并显示输出,开始新一轮的循环。
主程序流程图如下图所示:
否
是
结束
判断按键是否为Q
设置屏幕显示
调用系统日期
输出至屏幕显示
读取按键字符
判断是否有键盘按键输入
开始
图3.1主程序流程图
3.3.2.显示日期子流程图及说明
提取系统日期
将年份数转为ASCII码并存入DATEDIS中
将日期数转为ASCII码并存入DATEDIS中
将分月份转为ASCII码并存入DATEDIS中
显示系统日期
返回
图3.2日期显示子程序流程图
流程图如右下所示:
根据右图所示的子流程图可以分到系统日期显示的整体过程。
在经过功能选择进入日期显示后,首先提取电脑内部的系统日期,提取到的系统日期为二进制码,首先将年份的二进制码转换为ASCII码,存入数据段的缓冲区,然后将月份的二进制码转换为ASCII码,存入数据段的缓冲区,接着是将日期的二进制码转换为ASCII码,存入数据段的缓冲区,于是缓冲区中就包含了系统日期的ASCII码,调用输出函数,将系统日期输出到系统的指定位置。
3.4.程序设计说明
3.4.1.清屏程序介绍
CLEAR_SCREENMACROOP1,OP2,OP3,OP4;
清屏
PUSHAX;
入栈保护现场
PUSHBX
PUSHCX
PUSHDX
MOVAH,06H;
向上滚屏
MOVAL,00H;
全屏幕为空白
MOVBH,79H;
空白区域缺省属性
MOVCH,OP1;
左上角行号
MOVCL,OP2;
左上角列号
MOVDH,OP3;
右下角行号
MOVDL,OP4;
右下角列号
INT10H;
BIOS对屏幕及显示器中断调用
POPDX;
出栈显示数据
POPCX
POPBX
POPAX
ENDM
此为宏定义写出的清屏指令,首先将寄存器的数据压入堆栈进行保护,然后调用INT10中断设定屏幕显示。
其中AH设置滚屏方式06为向上滚屏,AL=0为设置窗口的清屏,而CH、CL、DH、DL为设置窗口的大小,根据设定的窗口大小确定清屏的范围。
清屏结束后,将压入堆栈的寄存器的数据弹出,使清屏命令不会影响寄存器的数值。
3.4.2.光标定位程序介绍
CURSOR_POSITIONMACROROW,CLM;
设置光标位置宏定义
PUSHAX;
PUSHBX
PUSHCX
PUSHDX
MOVAH,2
MOVBH,0;
光标页号
MOVDH,ROW;
光标行号
MOVDL,CLM;
光标列号
INT10H;
BIOS对屏幕及显示器中断调用
MOVAH,1;
置光标类型,不显示光标
MOVCH,20H
INT10H
POPDX;
POPCX
POPBX
POPAX
ENDM
此宏定义为光标位置的设定,首先是寄存器数据压入堆栈保护。
光标设定需要调用INT10H,给AH赋值02H,执行设置光标位置命令,然后由DH、DL的数值确定光标的行号和列号。
由于根据设计需求,在此还需设置光标属性为隐藏,此功能同样为调用INT10H,使得AH赋值为01H,根据CH的值确定光标的属性。
最后为寄存器数据出栈。
3.4.3.多字符显示程序介绍
SHOWMACROB ;
宏定义显示寄存器中内容
LEADX,B ;
将b的首地址给DX
MOVAH,9 ;
显示器I/O,多字符输出
INT21H ;
DOS中断调用
此处宏定义为多字符的屏幕显示,首先是将需要显示的字符的存储区的便宜地址给DX,然后通过功能调用AH=09H;
INT21H,便可将多个字符输出至屏幕。
3.4.4.读取键盘状态程序介绍
SCANKEYMACRO
PUSHAX
MOVAH,01H
INT16H
POPAX
此处宏定义为读取键盘状态,通过功能调用AH=01H;
INT21H即可实现,如有按键按下,则ZF=1,若无,则ZF=0。
3.4.5.读取键盘值程序介绍
INPKEYMACRO
MOVAH,00H
MOVBL,AL
ENDM
此处宏定义为读取键盘函数值,通过功能调用AH=00H;
INT21H实现,此命令会将键盘按键的ASCII码值输入至AL寄存器中。
3.4.6调用系统日期显示程序介绍
DATEDISPLAYPROCNEAR;
定义日期显示子程序
MOVAH,2AH;
取当前系统日期
INT21H;
MOVAX,CX;
送年份入AX(二进制数)
MOVBX,10;
(BX)=10
LEASI,DATEDIS+14;
使SI指向年的最后一位
MOVCX,4;
(CX)=4
PUSHDX;
保存月日
TAB:
XORDX,DX;
DX清零
DIVBX;
(DX,AX)/BX,商送AX,余数送DX()
ADDDL,30H;
余数与30H相加变为字符的ASCII码
MOV[SI],DL;
余数送入SI所指向的字节区
DECSI;
SI减一
LOOPTAB ;
循环(将4个8字节的年份存入SI)
POPDX;
DX还原
MOVAL,DL;
日送AL
XORAH,AH;
AH清零
DIVBL;
AX/BL,商送AH,余数送AL
ADDAX,3030H;
转变为数字字符的ASCII码
SUBSI,4;
使SI指向日的第一位
MOV[SI],AX;
(AX)送SI所指向的字节区(将4位表示变为8位表示)
MOVAL,DH;
月送AL
AX/BL,商送AH,余数送AL
SUBSI,5;
使SI指向月的第一位
(AX)送SI所指向的字节区
CURSOR_POSITION10H,28H
SHOWDATEDIS;
显示日期
CURSOR_POSITION10H,10H
SHOWmess3
RET;
调用后返回
DATEDISPLAYENDP
此处子程序为调用系统日期,然后到屏幕输出,系统时间的调用采用DOS功能调用,AH=2AH;
INT21H,调用后的系统日期,将年份的二进制码保存在CX寄存器中,月份的二进制码存入DH寄存器中,日的二进制码存入DL寄存器中。
其流程跟时间显示基本一致,将提取的二进制码转换为ASCII码,存入缓冲区,定义输出位置输出。
3.4.7将二进制数转换为ASCII码程序介绍
CHANGEPROCNEAR
MOVCX,10D;
显示十位
CALLDECDIV
MOVCX,1;
显示个位
RET
CHANGEENDP
DECDIVPROCNEAR;
转化成字符显示
MOVDX,0
DIVCX
MOVBX,0
ADDAL,30H;
转换成ASCII
MOVAH,0EH
INT10H;
显示一个字符
MOVAX,DX
DECDIVENDP
以上程序完成的为进制转换,首先将二进制数除以10将商和余数分别保存,转换为BCD码,分十位、个位分别操作,分别加上30H调整为ASCII码。
3.4.8判断是否为闰年程序介绍
pushbx
pushcx
pushdx
movax,w
movcx,ax
movdx,0
movbx,4
divbx;
将年份与4相除
cmpdx,0
jnzlab1;
不能被4整除则转移(ZF=0)
movax,cx
movbx,100;
将年份与100相除
divbx
cmpdx,0
jnz
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 万年历
![提示](https://static.bingdoc.com/images/bang_tan.gif)