微机原理课程设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档