《汇编语言》课程设计报告显示系统时间Word格式.docx
《《汇编语言》课程设计报告显示系统时间Word格式.docx》由会员分享,可在线阅读,更多相关《《汇编语言》课程设计报告显示系统时间Word格式.docx(13页珍藏版)》请在冰豆网上搜索。
用“时:
分:
秒”(均为两位)的形式连续显示系统时间。
利用BIOS的INT1AH的2号系统功能调用,将计算机系统的时间参数(BCD码)送入寄存器,将用BCD码表示的时、分、秒转换成ASCII码并进行显示。
2设计方案
(1)在DOS环境下完成,先利用BIOS功能调用中显示器驱动程序的00H类型调用,设置显示器的显示模式为80*25彩色。
(2)在屏幕中央显示提示信息(提示用户输入“D”或“T”或“Q”)。
(3)然后对用户输入的字母进行判断,利用分支程序分别调用不同的子程序。
两个子程序的功能分别是显示当前日期(用2AH的DOS功能调用来取日期),显示当前时间(用2CH的DOS功能调用来取时间)。
必须用到的DOS功能调用:
取当前系统日期:
功能号为2AH,返回值送入CX,DX寄存器中。
取当前系统时间:
功能号为2CH,返回值送入CX,DX寄存器中。
例如:
2009年5月31日运行的程序中,
使用2AH的DOS功能调用后,得到CX=07D9H,DX=051FH
其中,CX中的数据为2009D,即年份。
DX中的数据中可分析得:
DH=05H=05D,即月份。
DL=1FH=31D,即日期号。
最后应将数据转换为其字符对应的ASCII码,
即32H,30H,30H,39H,2DH,30H,35H,2DH,33H,31H再显示在屏幕上。
即显示出:
2009-5-31
3主程序设计
其中主要对主程序和宏清屏命令进行了设计和编码,下面将分别对它们进行简要说明。
主程序:
CODESEGMENT;
代码段
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
MAINPROCFAR
BEGIN:
MOVAH,0;
设置40*25图形显示
MOVAL,3
INT10H
CLEAR_SCREEN00H,00H,19H,50H
MOVAX,DATA
MOVDS,AX
MOVAX,STACK
MOVSS,AX
;
*******************显示宏定义*************************
SHOWMACROb
LEADX,b
MOVAH,9
INT21H
ENDM
SHOWWELCOME;
显示数据段的内容
SHOWINF01
SHOWINF02
SHOWINF03
SHOWINF04
SHOWINF05
SHOWINF06
INPUT:
MOVAH,01;
键盘输入并回写
INT21H
CMPAL,44H;
与D比较
JNEL1;
不相等转L1
CALLDATEDISPLAY;
相等调用DATADISPLAY
JMPEXIT1
L1:
CMPAL,54H;
与T比较
JNEL2;
不相等转L2
CALLTIMEDISPLAY;
相等调用TIMEDISPLAY
JMPEXIT1
L2:
CMPAL,51H;
与Q比较
JEEXIT;
相等转EXIT
SHOWINPUTER;
显示输入错误
SHOWINF05;
显示输入提示
JMPINPUT
EXIT1:
SHOWINF06;
JMPINPUT;
EXIT:
MOVAH,4CH;
结束
MAINENDP
主程序主要实现与用户的交互,首先程序会提示用户想要进行什么操作。
是显示DATE,TIME还是退出。
这里对应的给用户提供的选项是“D”、“T”和“Q”。
当用户输入他们的选项之后,主程序要判断用户的输入调用相应的功能模块来满足用户的要求。
我们假设用户输入字符为X,那么首先我们将X与“D”比较。
如果相同则程序调用DATE_DISPLAY模块为用户显示日期。
若不为“D”则要继续与“T”想比较。
相等则调用TIME_DISPLAY模块,不等则继续与“Q”相比较。
相等则正常退出,不等则说明用户输入非法字符主程序返回到选择界面用户可以继续选择。
特别说明:
汇编语言的选择结构不同于C语言的选择结构,程序设计过程中要特别小心。
避免将造成潜在的BUG.
3.1主程序流程图
4子程序设计
4.1DATE子程序流程图
4.2TIME子程序流程图
5调试
(1)、运行环境(软、硬件环境):
硬件:
8086以上CPU,内存256M以上。
软件:
WINDOWS操作系统,MASM,LINK汇编编译链接软件。
(2)、程序界面:
1.提示界面如图6-1
图6-1
2.显示日期如图6-2
图6-2
3.显示时间如图6-3
图6-3
4.错误输入如图6-4
图6-4
1)编译源文件,命名为jie3.ASM;
2)采用命令格式。
MASMjie3.ASM将生成一个OBJ文件,检查源程序中的错误,并改正。
3)键入连接命令:
LINKjie3.OBJ,再次键入jie3回车,即可显示结果。
4)时间在运行中出现了不准确性,对程序的循环次调整后,时间能正常运行。
6设计总结
通过对这一闹钟程序的制作,使我对汇编语言的基本知识的使用更加熟练,同时也增加了我对汇编语言的一些认识,在作业完成过程中通过和同学的交流,也增加了合作的技巧。
通过查阅以下资料也学到了一些课本上没有的东西,拓宽了自己的知识面,增加了学好汇编语言的信心。
这不是第一次用汇编语言来设计一个小程序,平时做了很多实验,写了很多小程序。
但这次是一个综合的程序,平时的很多程序都用到了,例如在程序中用到了不少的子程序,宏,这些子程序的设计是固定的,因此可以直接从指导资料中调用,大多只需要修改几个参数就可以,这大大方便了我们的设计,为我们节省了很多的时间。
在这次课程设计中,我真正体会到了合作的重要性,遇到很多问题时,当我看书查资料不能解决时,这是去找同学讨论一下,收获很大,可以使很多问题迎刃而解,直到问题最终解决。
从资料中,我们可以看出这个时钟程序的基本流程,修改一些程序就可以实现这个时钟的基本功能,添加一些程序就可以实现这个时钟的附加功能。
不可否认,本程序存在不少缺点和不足,但通过这次作业的却找出了自己在学习上的不足,对以后的工作也有指导作用。
我相信在以后的学习中会克服这些不足,达到熟练掌握汇编语言的目的!
7程序清单
程序代码:
;
************************清屏宏定义**********************
CLEAR_SCREENMACROOP1,OP2,OP3,OP4;
1
MOVAH,06H;
2
MOVAL,00H;
3
MOVBH,79H;
4
MOVCH,OP1;
5
MOVCL,OP2;
6
MOVDH,OP3;
7
MOVDL,OP4;
8
INT10H;
9
MOVAH,02H;
10
MOVBH,00H;
11
MOVDH,00H;
12
MOVDL,00H;
13
INT10H;
14
ENDM;
15
STACKSEGMENTSTACK;
16定义堆栈段
DB200DUP(0);
17
STACKENDS;
18
DATASEGMENT;
19定义数据段
WELCOMEDB'
WELCOMEYOUTOCOMEHERE!
$'
;
20提示界面
INF01DB0DH,0AH,'
THISISADISPLAYPROGAME!
21
INF02DB0DH,0AH,'
PLEASEINPUT"
D"
"
T"
OR"
Q"
TOSHOWDATATIMEOREXIT!
INF03DB0DH,0AH,'
D:
DISPLAYSYSTEMDATE;
22
INF04DB0DH,0AH,'
T:
DISPLAYSYSTEMTIME;
23
INF05DB0DH,0AH,'
Q:
QUIT.$'
24
INF06DB0DH,0AH,'
PLEASEINPUTTHECHAR:
25
INPUTERDB0DH,0AH,'
INPUTERROR!
26
DATEDISDB'
00-00-0000'
0AH,'
;
27显示DATE
TIMEDISDB'
00'
3AH,'
28显示TIME
DATAENDS;
29
CODESEGMENT;
30代码段
STACK;
31
****************************主程序**************************
MAINPROCFAR;
32
;
33
34设置40*25图形显示
MOVAL,3;
35
INT10H;
36
CLEAR_SCREEN00H,00H,19H,50H;
37
MOVAX,DATA;
38
MOVDS,AX;
39
MOVAX,STACK;
40
MOVSS,AX;
41
************************显示宏定义*************************
SHOWMACROb;
42
LEADX,b;
43
MOVAH,9;
44
INT21H;
45