《微机原理课程设计-显示时间日期.docx》由会员分享,可在线阅读,更多相关《微机原理课程设计-显示时间日期.docx(13页珍藏版)》请在三一办公上搜索。
1、微机原理与接口技术课程设计万方科技学院微机原理与接口技术课程设计院 系:专 业:年级班级:学 号:姓 名:指导教师:设计日期: 万 方 科 技 学 院 通信工程 07通信2班 目录一、 课程设计目标2二、 课程设计任务2三、 总体设计方案2四、部分程序设计及功能解说24.1扫描键盘输入24.2. BCD码转换34-3显示部分3五、程序设计流程图4六.程序段功能汇总56.1、MAIN程序56.2、DSPBCD PROC子程序66.3、DSPD PROC子程序66.4、DSPT PROC子程序6七、程序设计流程图6八、课程设计总结和体会7九、参考文献8十、附录9- 12 -一课程设计目的用汇编语言
2、独立完成一个程序题,以达到熟练运用汇编语言编程实现有比较完整功能的程序的目的。(1)学习分支、中断、和逻辑表达。(2)熟悉汇编语言程序的编译、链接过程。二课程设计任务设计一个显示日期或时间的汇编程序间且满足以下要求:基本功能:运行可执行程序systime.exe,在出现的提示信息中输入大写字母“D”,可显示系统当前日期;输入大写字母“T”,可显示系统当前时间;输入大写字母“Q”,可结束程序。三、总体设计方案通过调用bios 16H 中断的1号功能,读取键盘的状态扫描键盘输入,根据键盘输入的相关内容,如:若输入D,则设计程序代码依次读取系统日期年、月、日,并转换成BCD码调用号中断予以显示;若在
3、键盘输入T,则设计程序代码依次读取系统时间时、分、秒,并转换成码并调用号中断予以显示;若输入大写字母Q,则退出当前状态;若不是相关字符,则不于任何响应,并不显示任何信息。四、部分程序设计及功能解说1、 扫描键盘输入用SCANK:;扫描键盘输入,根据键盘输入调用bios 16H 中断的1号功能,读取键盘的状态,根据输入的字母,与字母“进行比较,若值为则去执行CHKT,并响应按键D扫描键盘输入部分程序如下: XOR AX,AX INT 16H;调用bios 16H 中断的1号功能,读取键盘的状态.CMP AL,DJNE CHKT;如果输入的是字母“D”则跳转执行CHKT子程序 CALL DSPD;
4、响应按键D JMP SCANK2、 BCD码转换将读取的二进制代码循环右移4位,相当于将二进制转换成16进制;将寄存器内容与进行或运算,把单元传递于寄存器;程序代码如下:ROR AX,CL SHR AH,CL OR AX,3030H MOV CH,AH3、 显示部分调用10号中断的0E功能显示AL寄存器的内容,即BCD码将显示在屏幕上。注意:BL=前景色;AL=字符。BCD码显示代码如下所示:MOV AH,0EHINT 10H;调用10号中断的0E功能显示 MOV AL,CH INT 10H五、程序设计流程图开 始扫描键盘输入输 入 字 母是、?读取系统时间读取系统时间退出当前文件结束输入“”
5、输入“T”输入Q转换为BCD码显示转换为BCD码显示六.程序段功能汇总1、MAIN程序用SCANK:;扫描键盘输入,根据键盘输入调用bios 16H 中断的1号功能,读取键盘的状态,根据输入的字母,与字母“进行比较疑惑,若异或值为则去执行CHKT,并响应按键D。其他如输入“T”和“Q”时同理。2、DSPBCD PROC子程序即日期时间显示程序,以日期显示程序为例,通过读取系统的日期项如“年”, 由于读取的日期项是二进制代码,所以调用DSPBCD,把读取的系统日期项存为BCD码,然后将其显示出来,然后再循环以同样方法读取月,日。3、DSPD PROC子程序本子程序是当键盘输入字母“D”时所调用执
6、行的子程序;首先定义堆栈寄存器,按循环要求读取系统日期项,由于读取的日期项是二进制代码,因此需调用DSPBCD PROC子程序转换为BCD码并予以显示;执行完DSPBCD PROC子程序后调用10号中断显示一个分隔符,完成一个日期项的显示,然后再循环去读取其他日期项;最后返回主程序执行主程序。4、DSPT PROC子程序本子程序是当键盘输入字母“T”时所调用执行的子程序;首先定义堆栈寄存器,按循环要求读取系统时间项,由于读取的日期项是二进制代码,因此需调用DSPBCD PROC子程序转换为BCD码并予以显示;执行完DSPBCD PROC子程序后调用10号中断显示一个分隔符,完成一个日期项的显示
7、,然后再循环去读取其他日期项;最后返回主程序执行主程序。其执行过程与执行DSPD PROC子程序相似。七.试验结果及分析、实验结果双击systime.exe,程序初始运行界面:如果按错了键,会出现如下界面,没任何反应,也不显示任何信息:如果输入正确如“D”将出现如下界面(每输入一次就显示一次系统日期):如果输入正确如“T”将出现如下界面(每输入一次就显示一次系统时间):如果输入“Q”,则退出以上界面。、实验结果分析:通过以上的结果显示可以看出结果成功完成本次课程设计的目的和任务,本次课程设计严格按照课程设计任务的要求:运行可执行程序systime.exe,在出现的提示信息中输入大写字母“D”,
8、可显示系统当前日期;输入大写字母“T”,可显示系统当前时间;输入大写字母“Q”,可结束程序;若不是相关字符,则不于任何响应,并不显示任何信息。但还有缺陷的是不能实时刷新时间,由于这点在课程设计任务中没有相关要求,因此这次课程设计可以认为是成功的。八.课程设计总结和体会1. 在完成课程设计过程中,我认识到平时基础知识的重要性,只有能够熟练的掌握才能在实验过程中得心应手,否则一步错则整个试验都会陷入困境,因而,严谨的态度是试验成功的重要保障!2. 通过这次课程设计,我们对各个函数以及语句有了进一步的了解,对各个语句的功能有了更深刻的认识和体会,平时上课的理论知识只是停留在理论的层面,只有通过了这样
9、的试验才能更好的体会到,做到了理论和实际的相结合,使理论知识真正运用到了实践中去。在课程设计过程中,同组人员之间相互合作,共同研究使我更加坚信了团体的力量。在团体的共同协作和努力下,任何的难题都可以被解决!3.在本次课程设计过程中,李宝平老师以及相关同学给予我相当大的支持和帮助,在此表示诚挚的感谢! 九.参考文献1、微型计算机原理与接口技术 中国矿业大学出版社 李长青 主编2、汇编语言程序设计 科学出版社 卢中华等 主编3、微型计算机汇编语言程序设计 电子科学技术出版社 龙尚福 主编4、微机原理与汇编语言实用教程 清华大学出版社 王富荣 主编5、微机原理与接口技术课程设计 中南大学出版社 王南
10、兰 主编6、微机原理及应用 西南交通大学出版社 晏寄夫 主编7、32位微机原理与接口技术 化学工业出版社 马兴录 主编8、微机原理与接口技术 电子科技大学出版社 倪继烈 主编9、微处理器与微型计算机 清华大学出版社 李三立 主编10、微机原理与接口实验指导 国防工业出版社 黄海萍 主编附录程序清单STACK SEGMENT STACK ;定义堆栈段STACKH DB 20H DUP(?)STSIZE EQU $-STACKHSTACK ENDSCODE SEGMENT ASSUME CS:CODE,SS:STACK;,DS:DATASTART: ;程序执行的起始地址 MOV AX,STACK;
11、堆栈段经AX寄存器转移到SS寄存器 MOV SS,AX MOV SP,STSIZESCANK:;扫描键盘输入 XOR AX,AX INT 16H;调用bios 16H 中断的1号功能,读取键盘的状态. CMP AL,D;AL=D ? JNE CHKT;如果不相等跳转到子程序 CALL DSPD;响应按键D JMP SCANKCHKT: CMP AL,T;与字母“T”进行比较 JNE CHKQ;如果不相等跳转到子程序执行 CALL DSPT;响应按键T JMP SCANK;跳转到CHKQ: ;可以添加代码以响应其他按键 ;否则,它们将被忽略 CMP AL,Q JE EXIT;响应按键Q JMP
12、SCANK;跳转执行到子程序EXIT: MOV AX,4C00H;退出当前系统 INT 21H;功能: 显示一个压缩BCD码;入口: BH=页号; BL=前景色; AL=压缩BCD码DSPBCD PROC PUSH AX PUSH CX MOV CL,4;串长度为4 MOV AH,0;把读取的二进位数转为BCD码 ROR AX,CL SHR AH,CL OR AX,3030H MOV CH,AH;显示BCD码 MOV AH,0EH INT 10H;调用10号中断的0E功能显示 MOV AL,CH INT 10H POP CX;退出当前堆栈段 POP AX RETDSPBCD ENDP;功能:
13、显示系统日期;入口: BH=页号,BL=前景色; DSPD直接传给DSPBCDDSPD PROC PUSH AX;定义堆栈段地址 PUSH CX MOV AL,9 MOV CX,3;定义循环次数3次GETD: ;子程序定义 PUSH AX;读取系统日期项 OUT 70H,AL IN AL,71H CALL DSPBCD ;显示一个日期项,如:年 MOV AX,0E2EH ;.的ASCII码为2E INT 10H ;显示一个分隔符. POP AX DEC AL LOOP GETD;继续循环GETD POP CX POP AX RETDSPD ENDP;功能: 显示系统时间;入口: BH=页号,B
14、L=前景色; DSPT直接传给DSPBCDDSPT PROC PUSH AX PUSH CX MOV AL,04H;定义串长度 MOV CX,3;定义循环次数3次,分别读取时、分、秒GETT: ;子程序GETT PUSH AX;读取一个系统时间项 OUT 70H,AL IN AL,71H CALL DSPBCD ;显示一个日期项,如:日 MOV AX,0E3AH ;:的ASCII码为3A INT 10H ;显示一个分隔符: POP AX SUB AL,2 LOOP GETT;条件下继续循环GETT POP CX;退出堆栈段 POP AX RET;返回主程序执行DSPT ENDPCODE ENDS END START;程序结束