汇编语言课程设计——————电子时钟的设计.doc
西安工业大学课程设计用纸 课程名称:汇编语言程序设计课程英文名称:PROGRAMMING BY ASSEMBLE LANGUAGE一设计目的:1. 理解掌握定时/计数器和中断的使用方法。2. 掌握微机常用的输入输出方式及接口技术。3. 掌握一定的汇编语言知识,培养自己的动手操作能力。4. 学习程序设计的基本思路和方法。二程序内容:第一部分:定义显示界面。第二部分:调用系统时间,并将调用的用二进制表示的时间数转换成ASCII码,并将时间数存入内存区。第三部分:将存在系统内存区的时间数用显示字符串的形式显示出来。第四部分:获取键盘的按键值,以ESC键退出系统返回DOS。三程序设计原理:首先在数据段开辟一显示缓冲区,用来存储系统时间。调用DOS中断,返回系统时间,并将来返回的二进制时间转换成ASCII码,方便时间显示时的调用。分别将来小时数、分钟数、秒数存入显示缓冲区,并最终存入一结束字符号$。调用DOS字符串显示功能将时间显示 西安工业大学课程设计用纸 出来。并调用屏幕I/O中断,定位光标的开始位置,结合着将时间显示在我们预先定义好的位置上。由于获取了的系统时间不会自动刷新,所以我们要设计成刷新的方式来不断获取系统的时间,这样就形成了会跳动的电子钟了。调用延时TIME延时中断服务程序,累加到存放秒值的寄存器DL中,并进行十进制调整。在累加的过程中,不断地对时、分、秒值进行比较,秒不能等于60,分不能等于60,时不能等于24。秒等于限制值时,则使秒值为0分值加1;分等于限制值时,则使分值为0时值加1;时等于限制值时,则使时值为0;时、分、秒值都不超过限制值时,就转显示屏输出。时间显示的刷新要配合延时程序进行,为了得到良好的显示效果,延时程序要尽量接近1秒,但又不能超过一秒,所以本程序调用了一段较精确的时间延迟程序。 利用BIOSS设计窗口,选择适当的背景和前景等,使屏幕显示更加完美。程序一旦进入运行,就将不间断地在显示屏显示时间,要想程序停止运行,可同时在键盘按下ESC键返回DOS系统。四程序流程图如下:DATA SEGMENT ;设置数据段 BUF1 DB 'THE TIME IS NOW: $' BUF5 DB ' $' BUF6 DB ' &&&&&& # &&&&&& $' BUF7 DB ' 00 >o o < 00 $' BUF8 DB ' 00 (:) 00 $' BUF9 DB ' 00 00 $' BUF10 DB ' 00 ! 00 $' BUF3 DB 'CLASS: $' BUF4 DB 'NAME:hu ling wei $' BUF2 DB 10 DB 10 DUP(?) DATA ENDS STACK SEGMENT STACK ;设置堆栈段 DB 100 DUP(?) STACK ENDS CODE SEGMENT ;设置代码段 ASSUME CS:CODE,DS:DATA,SS:STACK CURSOR MACRO ROW,CLM ;设置光标位置 MOV AH,2 MOV BH,0 MOV DH,ROW MOV DL,CLM INT 10H ENDM WIN MACRO ROWL,CLML,ROWR,CLMR,COLOR ;设置窗口,位置,颜色 MOV AH,6 MOV AL,0 MOV CH,ROWL MOV CL,CLML MOV DH,ROWR MOV DL,CLMR MOV BH,COLOR INT 10H ENDM ASCBCD MACRO REG INC BX INC BX MOV REG,BX MOV CL,4 SHL REG,CL INC BX MOV AL,BX AND AL,0FH OR REG,AL ENDM BCDASC MACRO REG INC BX INC BX MOV AL,REG MOV CL,4 SHR AL,CL OR AL,30H MOV BX,AL INC BX MOV AL,REG AND AL,0FH OR AL,30H MOV BX,AL ENDM INCBCD MACRO REG,COUNT ;BCD数加1 MOV AL,REG INC AL DAA MOV REG,AL CMP AL,COUNT JNZ DISPY MOV REG,0 ENDM STRDSPY MACRO ADRS LEA DX,ADRS MOV AH,9 INT 21H ENDM CLOCK PROC FAR START: PUSH DS ;显示字符串 MOV AX,0 PUSH AX MOV AX,DATA MOV DS,AX WIN 0,0,24,79,7 WIN 6,9,18,70,B ;设置窗口 CURSOR 6,25 ;设置光标 STRDSPY BUF5 ;显示字符串 CURSOR 7,25 ;设置光标 STRDSPY BUF6 CURSOR 8,25 STRDSPY BUF7 CURSOR 9,25 STRDSPY BUF8 CURSOR 10,25 STRDSPY BUF9 CURSOR 11,25 STRDSPY BUF10 CURSOR 6,9 STRDSPY BUF3 CURSOR 7,9 STRDSPY BUF4 CURSOR 14,32 STRDSPY BUF1 CURSOR 15,36 LEA DX,BUF2 MOV AH,0AH INT 21H ;从键盘接收当前时间 LEA BX,BUF2 ASCBCD CH ;小时值ASCII到BCD ;存CH ASCBCD DH ;分值ASCII到BCD ;存DH ASCBCD DL ;秒值ASCII到BCD ;存DL TIMER: CALL DELY ;延时1秒 INCBCD DL,60H ;(DL)+1,并判 ;大于等于60? INCBCD DH,60H ;(DH)+1,并判 ;大于等于60? INCBCD CH,24H ;(CH)+1,并判 ;大于等于60? DISPY: LEA BX,BUF2 BCDASC CH ;时值BCD转到ASCII BCDASC DH ;分值BCD转到ASCII BCDASC DL ;秒值BCD转到ASCII INC BX MOV AL,'$' MOV BX,AL PUSH DX CURSOR 15,36 ;设置光标 STRDSPY BUF2+2 ;显示时,分,秒值 POP DX MOV AH,01H INT 16H CMP AL,1BH JZ X XOR AL,AL JMP TIMER X:MOV AH,4CH INT 21H RET DELY PROC PUSH CX PUSH CX MOVE 4600 X1:DEC CX,0FFFFH X2:DEC CX JNE X2 DEC AX JNE X1 POP AX POP CX RET DELY ENDP CLOCK ENDP CODE ENDP END START 开始显示提示符从键盘上接收当前时,分,秒时,分,秒值ASCII码转换为BCD码,分别存入CH,DH,DL延时1秒DL加1,DAA调整(DH)>=60H?DL清零,DH加1,DAA调整(DH)>=60H?DH清零,CH加1,DAA调整(CH)>=24H?CH清零时,分,秒值BCD码转换为ASCII码,输出显示六调试过程: 1)编译源文件,命名为HULINGWEI。ASM 2)采用命令格式。MASM HULINGWEI。ASM将生成一个OBJ文件,检查源程序中的错误,并改正。3)键入连接命令:LINK HULINGWEI。OBJ,再次键入HULILNGWEI回车,即可显示结果。 4)时间在运行中出现了不准确性,对程序的循环次调整后,时间能正常运行。七时遇到的问题及解决方法 在课程设计中遇到的最大的困难是如何产生中断,对中断向量表的装载还比较模糊,对中断的初始化、具体设置、中断返回还不是很清楚,程序设计一度陷入停滞状态,不知如何是好。 我们又重新翻阅了杨素行主编的微型计算机系统原理及应用及周明德主编的微型计算机的原理及应用,重点研究了中断,通过对这一章的学习,我们终于对中断有了详细的认识,在设计程序 西安工业大学课程设计用纸 时也容易了很多。八心得体会 这是我第一次用汇编语言来设计一个小程序,历时一周终于完成,其间有不少感触。 1借鉴 鲁迅先生曾说过要"拿来",对,在这次课程设计中,就要"拿来"不少子程序,比如将ASCII码转换成BCD码,将BCD码转换成压缩BCD码,将压缩BCD码转换成ASCII码等,这些子程序的设计是固定的,因此可以直接从指导资料中调用,至于设置光标的子程序,只需要修改几个参数就可以,这大大方便了我们的设计,为我们节省了很多的时间。 2合作 这个时代不欢迎孤独的英雄,因为一个人的能力毕竟有限,惟有善于合作的团队才能发挥出最大的能量。在这次课程设计中,我真正体会到了合作的重要性,我们这个班级在这次程序设计中总在一起,从要实现的功能到流程图的绘制,从程序的编写到程序的检查,从程序的调试到实验报告的写作,其间每一个过程都凝聚了我们班级的力量。在遇到棘手的问题时,我们总是一起讨论,一起把问题解决;在 西安工业大学课程设计用纸 我遇到不很明白的程序时,是同学们耐心地给我讲解;在我面对有错的程序不知所措时,也是同学们帮我一步步地调试,耐心的指导,直至程序能正常运行。 3指导老师提供的资料很重要 这次课程设计的大部分程序,都可以在王老师提供的资料中找到,这对我们的程序设计很有帮助,从这些资料中,我们可以看出这个时钟程序的基本流程,修改一些程序就可以实现这个时钟的基本功能,添加一些程序就可以实现这个时钟的附加功能,可以说,如果没有王老师提供的源程序,我们将面临很大的困难。 4考核方式很正规 在程序设计完之后,不仅仅是交上设计报告就可以过关,还必须要经过王老师得面试。杨老师在面试时就我们编写的程序提问了几个问题,以考察我们是否真正了解了这个程序,面是很严格,表现不好就不能过关。在这次面试中,我认识到自己对一些细节还不是很清楚,还有待于进一步提高;通过这次课程设计,我明白了做任何事情都要脚踏实地,认真钻研,严格谨慎。 向在这次课程设计中给与指导和帮助的王老师表示衷心的感谢! 九 参考文献。周明德。微型计算机原理及应用。北京。清华大学出版社。2002扬素行。微型计算机系统原理及应用。北京。清华大学出版社。2004