微机原理课程设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《微机原理与接口技术》课程
设计
院 系: 专 业: 年级班级: 学 号: 姓 名: 指导教师: 设计日期:
一.课程设计目的
1.理解并会用汇编语言实现特定功能的编程方式。
2.汇编语言是计算机能够提供给用户使用的最快而又最有效的语言,也是能够利用
计算机所有硬件特性并能直接控制硬件的唯一语言,所以要会运用所学的汇编语
言编写简单的程序。
3.通过本次课程设计加强对汇编语言的熟悉和掌握。
二.课程设计任务
设计并实现一个显示当前系统日期时间的程序。
要求:
1.运行可执行程序systime.exe。
2.该系统要实现与电脑中的日期和时间同步的效果。
3.在出现的提示信息中输入大写字母“D”或输入大写字母“T”可显示系统当前
日期或时间。
4.输入大写字母“Q”,可结束程序。
三.整体设计方案
本程序主要涉及一个主程序及四个子程序。主程序采用了顺序程序和分支程序编程的方式,分别调用显示日期和时间的子程序,在各自小的子程序中又调用了将日期或时间转换成ASC11码的子程序,完成了程序间的循环嵌套。各个子程序实现各自简单的功能,综合构成了本程序的内容,简单而有效的实现题目所要求完成的功能。
各个程序之间的关系框图描述如图3-1所示:
图3-1
四.程序设计流程图
图4-1 流程图
五.程序段功能汇总
1.MAIN程序
MAIN程序是总程序,包含了堆栈段、数据段以及代码段的相关定义及其说明,程序语言运用了数据传送指令、中断指令、常用DOS功能调用、比较指令、跳转指令、调用指令等。其主要的功能是等待用户按键并读取键值,并根据用户键入的字符选择执行相应的分支程序,是整个程序的首领。
2.DATE/TIME子程序
DATE和TIME是两个子程序,包含了读取当前系统日期和时间的功能语句,涉及有简单的循环语句,程序中运用了延时指令、数据传送指令、LOOP循环指令、中断指令、算术指令等多条80x86系统中的指令。其主要的功能是对当前系统的日期和时间进行读取,然后把它们保存在相应的物理地址中,以供显示程序调用。
3.BCDASC/BCDASC1子程序
BCDASC和BCDASC1是两个子程序中又一次调用的子程序,属于程序调用的嵌套,包含了堆栈段相关程序语句,并且多次被DATA和TIME调用,程序中运用了堆栈数据传输指令、算术指令、码间转换等多条指令。其主要功能是完成日期和时间到ASC11的转换,并返回到调用程序中。
4.子程序的设计
子程序的调用与返回功能分别由CALL和RET指令来完成,同时还应该注意子程序运行期间的堆栈状态。由于执行了CALL指令时已返回地址入栈,所以执行RET 指令时应该使返回地址出栈,如果子程序中不能正确使用堆栈而造成执行RET前SP 并未指向进入子程序的返回地址,则必然导致运行出错。
在编制子程序时,特别是在编制嵌套或递归子程序时,堆栈的使用十分频繁,应注意堆栈的上溢或下溢。在考虑到保护时,还要注意应考虑寄存器是否必须保存,一般情况,子程序中用到的寄存器是应该保存的。
六.程序清单
STACK SEGMENT STACK ;堆栈段定义
DW 200 DUP (?)
STACK ENDS
DATA SEGMENT ;数据段定义
SPACE DB 1000 DUP (' ')
PATTERN DB 6 DUP (' '),0C9H,26 DUP (0CDH),0BBH,6 DUP (' ')
DB 6 DUP (' '),0BAH,26 DUP (20H),0BAH,6 DUP (' ')
DB 6 DUP (' '),0C8H,26 DUP (0CDH),0BCH,6 DUP (' ')
DBUFFER DB 8 DUP (':'),12 DUP (' ')
DBUFFER1 DB 20 DUP (' ') ;定义变量,保存转换成ASCII码
的日期
STR DB 0DH,0AH, 'PLEASE INPUT DATE(D) OR TIME(T) OR QUIT(Q): $'
DATA ENDS
CODE SEGMENT ;代码段定义
ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK
START: MOV AX,0001H ;设置显示方式为40*25彩色文本方式
INT 10H ;引用10H号中断
MOV AX,DATA
MOV DS,AX ;对数据段的装填
MOV ES,AX
MOV BP,OFFSET SPACE
MOV DX,0B00H
MOV CX,1000
MOV BX,0040H
MOV AX,1300H
INT 10H
MOV BP,OFFSET PATTERN ;显示矩形条
MOV DX,0B00H
MOV CX,120
MOV BX,004EH
MOV AX,1301H
INT 10H
LEA DX,STR ;显示提示信息
MOV AH,9
INT 21H ;返回DOS状态
MOV AH,1 ;从键盘输入单个字符
INT 21H
CMP AL,44H ;AL='D'?
JNE A
CALL DATE ;显示系统日期
A: CMP AL,54H ;AL='T'?
JNE B
CALL TIME ;显示系统时间
B: CMP AL,51H ;AL='Q'?
JNE START
MOV AH,4CH ;返回dos状态
INT 21H
DATE PROC NEAR ;显示日期子程序
DISPLAY:MOV AH,2AH ;取日期
INT 21H
MOV SI,0
MOV AX,CX ;年份值CX→AX
MOV BX,100
DIV BL ;年份值处以100
MOV BL,AH ;取年份值BL→AL
CALL BCDASC1 ;日期数值转换成相应的ASCII码字符
MOV AL,BL
CALL BCDASC1
INC SI ;SI增1,指向下一个字符
MOV AL,DH ;月份值DH→AL
CALL BCDASC1 ;调用程序
INC SI
MOV AL,DL ;日值DL→AL
CALL BCDASC1
MOV BP,OFFSET DBUFFER1 ;字符串首地址指向BP
MOV DX,0C0DH
MOV CX,20 ;字符串长度→CX
MOV BX,004EH