1、微机原理课设霓虹灯的模拟显示1.设计意义与要求1.1设计意义通过课程设计,能够对所学知识有更进一步的理解,并能掌握学习理论时没有注意的细节。调试程序,排除故障有助于提高分析问题、解决问题的能力。课程设计中碰到的挫折,有助于养成良好的学习习惯、严谨的工作作风。通过此课程设计的汇编语言练习,可以熟悉汇编语言的寻址方式和指令系统,BIOS和DOS系统功能调用,程序设计方法并熟悉汇编的编程环境。1.2设计要求 设计内容:采用汇编语言设计一个在屏幕中央以$字符显示一矩形,并以#将矩型从上之下、从左至右填满;然后再按相反的次序消失的程序。按Q退出程序 设计要求:(1)设计任务及要求分析(2)方案比较及认证
2、说明(3)系统原理阐述(4)软件设计课题需要说明:软件思想,流程图,源程序及程序注释(5)调试记录及结果分析(6)总结(7)参考资料(8)附录:芯片资料或程序清单,软件演示屏幕拷贝图或硬件实物图2方案论证2.1方案比较在设计过程中字符的显示有2中不同的方式。方案一:运用DOS功能的2号调用,程序的设计如下MA ROW,COLUME ;MA是个宏定义光标位置MOV AH,02HMOV DL,#INT 21H在本程序中,显示方式很简洁很直观很容易记忆理解。但是它无法设置字符的属性,同时还会在下个坐标位置显示光标,影响光看者的视觉享受。 方案二:运用BIOS功能的9号调用,程序设计如下 CALL C
3、URSOR ;调用光标设置子程序 MOV AL,23H MOV BL,0BH PUSH CX MOV CX,1 MOV AH,09H INT 10H POP CX 这个程序设计起来占用寄存器较多,略微复杂点,但是它的功能更加完备,更能实现霓虹灯的颜色变化显示效果,给人一种美感。2.2方案选择 从上面的分析比较可知方案二的可行性和实际达到的效果更好。所以选则方案二实现霓虹灯的功能。3系统原理阐述3.1设计思路 (1) 执行程序时显示一个欢迎界面,提示按大写S键进入显示界面 (2) 执行程序这部分程序运用的主要原理是先在屏幕上显示个字符$(#)号,再执行循环,语句显示一行(列)$(#)字符。利用像
4、这样的原理实现矩形框的完成和内部的填充。至于反向消失部分,用空格代替想要显示的字符,反向执行循环,就可以实现字符的消失了。(3) 霓虹灯显示完毕,提示输入Q退出界面。 3.2程序中的BIOS和DOS功能调用3.2.1 BIOS功能调用 (1) 设置光标位置(2号功能)入口参数:AH=2(功能号),BH=页号,DH=行号,DL=列号。 出口参数:无。根据DX确定了光标位置。(2) 初始窗口或向上滚动(6号功能)入口参数:AH=6,AL=上滚行数,CX=上滚窗口左上角的行、列号。DX=上滚窗口右下角的行、列号。BH=空白行的属性。出口参数:无。当滚动后,底部为空白输入行(3) 在当前光标位置写字符
5、和属性(9号功能)入口参数:AH=9,BH=页号,AL=字符的ASCII码,BL=字符属性,CX=写入字符数。出口参数:无。3.2.2 DOS功能调用 (1) 键盘输入一个字符并回显(1号功能) 输入参数无,返回结果AL字符(2) 显示字符串,光标跟谁字符串移动(9号功能)DS:DX待显字符串的首地址字符串以$结尾。(3) 显示一个字符,光标跟随字符移动(2号功能) DL=待显字符的ASCII码,无返回结果。3.3.程序模块 (1) 宏定义光标位置 MA MACRO OP1,OP2 ;宏定义光标位置 PUSH AX ;现场保护 PUSH BX MOV AH,02H MOV BH,0 ;页号 M
6、OV DH,OP1 ;行号 MOV DL,OP2 ;列号 INT 10H POP BX POP AX ENDM 这个子程序的重点是设计光标所在页、行、列及其现场保护。使用了BIOS功能调用设置光标的位置。(2) 清屏子程序 CLEAR PROC NEAR ;清屏 MOV AH,06H MOV AL,0 MOV CH,0 MOV CL,0 MOV DH,24 MOV DL,79 MOV BH,07H INT 10H RET CLEAR ENDP 初始化窗口,AL=0表示全屏滚动,CH=滚动窗口左上角行号,CL=滚动窗口左上角列号,DH=滚动窗口右下角行号,DL=滚动窗口右下角列号,BH=滚入行的
7、属性。(3) 光标的设置CURSOR PROC NEAR ;光标的设置 MOV AH,02H MOV BH,0 MOV DH,ROW ; 设置行 MOV DL,COLUME ;设置列 INT 10H RET CURSOR ENDP 光标位置的设置,这个子程序与宏定义光标位置类似只是运用有些不同。(4) 延时子程序DELAY1 PROC NEAR PUSH CX PUSH DX MOV DX,100 D3: MOV CX,500 D4: LOOP D4 DEC DX JNZ D3 POP DX POP CX RET DELAY1 ENDP这个子程序写法的关键是现场保护(即进栈出栈),内外两个循环
8、的设计。延时程序的主要目的是可以让我们清楚的看到字符在屏幕上的显示过程。4.软件思想与流程图4.1程序功能描述 程序开始,进行清屏,显示欢迎界面。按键输入,如果输入S就执行霓虹灯模拟显示在屏幕中央以$字符显示一矩形,并以#将矩型内部从上往下、从左至右填满;然后再按相反的次序消失的程序,否则就继续等待输入。霓虹灯模拟显示程序执行完后,显示退出提示,等待Q的输入,如果输入为Q就退出程序,否则就继续等待输入。4.2 流程图 N Y N Y5.调试记录及结果分析5.1 调试过程调试过程主要由编辑、汇编、链接和执行等几个步骤组成。(1) 源程序的编辑:编辑好汇编语言源程序后,保存为.asm文件。(2)
9、源程序的汇编:调用汇编程序对源程序进行翻译,生成.OBJ的目标文件。在汇编过程中,源程序有错误生不成目标文件,经过多次修改最终生成目标文件。(3) 目标程序的连接:调用链接程序(LINK)将用户目标程序和库文件进行链接、定位,生成.EXE可执行文件。(4) 调试可执行程序:刚开始可执行程序运行之后没有得到预想的结果,又重新检查源程序的算法错误,重新编辑、汇编、链接和执行,得到了预想的结果。5.2结果记录经过很多次调试,分析修改完善,终于得到正确调试结果。(1)执行程序时,提示进入界面如下; 图1 欢迎提示界面(2)输入S后,程序执行过程中,显示矩形框及填充如下: 图2显示矩形框 图3填充矩形框
10、(3)程序执行过程中,反向消失填充及矩形框如下: 图4反向消失矩形框内部 图5反向消失矩形框(4)程序执行过程中,再次显示矩形框和填充如下: 图6再次显示矩形框 图7再次填充矩形框(5)程序执行过程中再次反向消失填充及矩形框如下: 图8再次反向消失矩形框内部 图9再次反向消失矩形框(6)提示输Q退出界面如下: 图6退出提示界面由以上调试得到的图形可知,调试结果与预期结果是一致的,程序可实现预期的功能。5.3调试中出现的问题及解决方法问题1:寄存器不够用怎么办? 解决方法:这是由于程序结构复杂,使用了太多寄存器,可以定义外部变量来解决。问题2:寄存器值变化多端怎么办?解决方法:使用堆栈进行现场保
11、护。使用时应注意PUSH,POP的成对使用,不要遗忘POP同时还要注意堆栈的先入后出的规律。6.心得体会 通过这次的课程设计,让我对汇编有了更进一步的认识,加强了我用汇编语言编程的能力。汇编语言程序设计是一门很抽象的学科,学起来也比较乏味。一开始学的时候感觉很难,也没什么兴趣。但随着学习的推进,以及上机编程,逐渐感到轻松。在这次课程设计中,让我更加熟悉了汇编语言的一些基本的指令;掌握了汇编语言的一些基本的中断调用功能,可以用汇编语言调用各种中断调用功能。在设计过程中,不断对程序进行修改、改进,增强了自己分析问题、解决问题的能力;在不断的调试中,也让自己发现了自己存在的一些错误以及一些调试时应注
12、意的问题,同时也更深的理解了寄存器、存储器等工作原理以及一些指令执行后对它们的改变,例如INT指令会改变AL的值,在编程时应注意这方面的问题。这次的汇编课程设计,我的题目是霓虹灯的模拟显示。虽然在设计过程中遇到了不少问题,比如运行界面出现乱码、字符不是出现在预期位置等等问题,但在不断的修改和尝试中慢慢地解决这些问题,心里也有一种莫名的喜悦之感,正是这种感觉,使我对这门课产生了更加浓厚的兴趣,对本次课程设计更加用心和认真。这次向老师问了两次,向同学请教过很多问题,使我的基础知识更加牢靠。其实很早我就把程序写好了,不过很烂,后来经过几天的修改调试最终达到了自己觉得还过得去的要求在编程过程中我对汇编
13、的一些工具进行了尝试,从MASM的EDIT集成汇编运行环境,最终我在“MASM”软件下完成了我的编程工作,该软件可以标识汇编关键字,从而利于编写与调试。总之,这次课程设计我锻炼了动手能力,熟悉了汇编的编程环境,并巩固了课程相关知识,收益很多。实践出真知,在课程设计中不忘在小处创新,希望在下一次课程设计中能有更大的突破!7.参考文献1汤书森.微机原理接口技术实验于实践教程.北京:清华大学出版社,20082余朝琨.IBM-PC汇编语言程序设计.北京:机械工业出版社. 20083宋江.微机原理与接口技术.北京:机械工业出版社. 20054金泉涌.微型计算机应用经验汇编.北京:清华大学出版社,2007
14、5沈美玲.IBM-PC汇编语言程序设计.北京:清华大学出版社,19936吴耿峰.十六位微型计算机原理接口及应用.北京:高等教育出版.20047戴梅萼.微型计算机技术与应用.北京:清华大学出版社. 19928 罗省贤汇编语言程序设计教程北京:电子工业出版社,20049吴向军汇编语言程序设计北京:高等教育出版社,20088.附录 源程序清单源程序如下:MA MACRO OP1,OP2 ;宏定义光标位置 PUSH AX ; PUSH BX MOV AH,02H MOV BH,0 ;页号 MOV DH,OP1 ;行 MOV DL,OP2 ;列 INT 10H POP BX POP AX ENDMSTA
15、CK SEGMENT PARA STACK Stack ;定义堆栈段 STACK ENDSDATASEG SEGMENT PARA Data ;定义数据段 ROW DB ? COLUME DB ? COUNT DB ? COUNT1 DB ? CT DB ? MENU DB *,0dh,0ah ; DB * welcome you ! *,0dh,0ah DB * *,0dh,0ah DB * programme of displalying neon lamp *,0dh,0ah DB * *,0dh,0ah DB * please press S to enter *,0dh,0ah DB
16、 * and then press Q to exit ! *,0dh,0ah DB *$ BUF DB press Q to exit ! $ DATASEG ENDSCODESEG SEGMENT PARA Code ASSUME SS:STACK,DS:DATASEG,CS:CODESEGMAIN PROC FAR MOV AX,DATASEG MOV DS,AXCALL CLEAR ;调用清屏子程序 MA 8,0 ;欢迎界面的出现位置 WAT0: LEA DX,MENU ;输入S进入霓虹灯显示 MOV AH,9 INT 21H MOV AH,1 INT 21H CMP AL,S CAL
17、L CLEAR ;如果输入的不是S就清屏 MA 8,0 JNZ WAT0 PUSH AX ;入栈 PUSH BX PUSH CX PUSH DX MOV ROW,24 ;完成矩形框的左竖行 MOV COLUME,0 LOP3: CALL CURSOR ;调用设置光标位置 MOV AL,24H ;把$的ASCII 码传递给AL MOV BL,0BH ;设置字符属性 PUSH CX ;入栈 MOV CX,1 ;字符显示1次 MOV AH,09H INT 10H POP CX ;出栈 CALL DELAY1 ;调用延时 DEC ROW ;行坐标减1 CMP ROW,0 ;若行坐标大于0就跳转到lop
18、3否则执行下个程序 JNZ LOP3 MOV ROW,0 MOV COLUME,0 ;完成矩形框的上行 LOP1: CALL CURSOR MOV AL,24H MOV BL,0BH PUSH CX MOV CX,1 MOV AH,09H INT 10H POP CX CALL DELAY1 INC COLUME CMP COLUME,79 JNZ LOP1 MOV ROW,0 MOV COLUME,79 ;完成矩形框的右竖行 LOP2: CALL CURSOR MOV AL,24H ;完成$的输出 MOV BL,0BH PUSH CX MOV CX,1 MOV AH,09H INT 10H
19、POP CX CALL DELAY1 INC ROW CMP ROW,24 JNZ LOP2 MOV ROW,24 MOV COLUME,79 ;完成矩形框的下横行 LOP4: CALL CURSOR MOV AL,24H MOV BL,0BH PUSH CX MOV CX,1 MOV AH,09H INT 10H POP CX CALL DELAY1 DEC COLUME CMP COLUME,0 JNZ LOP4 ;到此矩形框已完成 MOV COLUME,0 ;从上往下从左往右#填充 LOP6: MOV ROW,1 INC COLUME LOP5: CALL CURSOR MOV AL,2
20、3H MOV BL,0BH PUSH CX MOV CX,1 MOV AH,09H INT 10H POP CX CALL DELAY1 INC ROW CMP ROW,24 JNZ LOP5 CMP COLUME,78 JNZ LOP6 MOV COLUME,79 ;反向消失LOP7: MOV ROW,23 DEC COLUME LOP8: CALL CURSOR MOV AL, MOV BL,0BH PUSH CX MOV CX,1 MOV AH,09H INT 10H POP CX CALL DELAY1 DEC ROW CMP ROW,0 JNZ LOP8 CMP COLUME,1 J
21、NZ LOP7 MOV CL,1 ;消失矩形框左竖行 LOP10: MA CL,0 MOV AL, MOV BL,0BH PUSH CX MOV CX,1 MOV AH,09H INT 10H POP CX CALL DELAY1 INC CL CMP CL,24 JNZ LOP10 MOV CL,0 ;消失矩形框下行 LOP9: MA 24,CL MOV AL, MOV BL,0BH PUSH CX MOV CX,1 MOV AH,09H INT 10H POP CX CALL DELAY1 INC CL CMP CL,79 JNZ LOP9 MOV CL,24 ;消失矩形框右竖行LOP11
22、: MA CL,79 MOV AL, MOV BL,0BH PUSH CX MOV CX,1 MOV AH,09H INT 10H POP CX CALL DELAY1 DEC CL CMP CL,0 JNZ LOP11 MOV CL,79 ;消失矩形框上行LOP12: MA 0,CL MOV AL, MOV BL,0BH PUSH CX MOV CX,1 MOV AH,09H INT 10H POP CX CALL DELAY1 DEC CL CMP CL,0 JNZ LOP12 MA 0,0 ;消失(0,0)这一点 MOV AL, MOV BL,0BH PUSH CX MOV CX,1 M
23、OV AH,09H INT 10H POP CX MOV ROW,24 ;完成矩形框的左竖行 MOV COLUME,0 LOP13: CALL CURSOR ;调用设置光标位置 MOV AL,24H ;把$的ASCII 码传递给AL MOV BL,0BH ;设置字符属性 PUSH CX ;入栈 MOV CX,1 ;字符显示1次 MOV AH,09H INT 10H POP CX ;出栈 CALL DELAY1 ;调用延时 DEC ROW ;行坐标减1 CMP ROW,0 ;若行坐标大于0就跳转到lop3否则执行下个程序 JNZ LOP13 MOV ROW,0 MOV COLUME,0 ;完成矩
24、形框的上行 LOP14: CALL CURSOR MOV AL,24H MOV BL,0BH PUSH CX MOV CX,1 MOV AH,09H INT 10H POP CX CALL DELAY1 INC COLUME CMP COLUME,79 JNZ LOP14 MOV ROW,0 MOV COLUME,79 ;完成矩形框的右竖行 LOP15: CALL CURSOR MOV AL,24H ;完成$的输出 MOV BL,0BH PUSH CX MOV CX,1 MOV AH,09H INT 10H POP CX CALL DELAY1 INC ROW CMP ROW,24 JNZ L
25、OP15 MOV ROW,24 MOV COLUME,79 ;完成矩形框的下横行 LOP16: CALL CURSOR MOV AL,24H MOV BL,0BH PUSH CX MOV CX,1 MOV AH,09H INT 10H POP CX CALL DELAY1 DEC COLUME CMP COLUME,0 JNZ LOP16 ;到此矩形框已完成 MOV COUNT1,23 ;矩形框内部填充 LOP17: MOV COUNT,39 MOV CH,39 MOV CL,40 LOP18: MA COUNT1,CH ;填充左半段 MOV DL,23H PUSH CX MOV CX,1 M
26、OV AH,09H INT 10H POP CX MOV AH,02H INT 21H MA COUNT1,CL ;填充右半段 MOV AL,# MOV BL,0BH PUSH CX MOV CX,1 MOV AH,09H INT 10H POP CX CALL DELAY1 DEC CH INC CL DEC COUNT CMP COUNT,0 JA LOP18 DEC COUNT1 CMP COUNT1,0 JNZ LOP17 MOV CT,1 ;设置行的初值为1 反向消失内部 LOP19: MOV COUNT,39 ;内循环次数 MOV CH,1 MOV CL,78 LOP20: MA
27、CT,CH MOV AL, ;显示空格 MOV BL,0BH PUSH CX MOV CX,1 MOV AH,09H INT 10H POP CX MA CT,CL ;设置光标位置 MOV DL, MOV AH,02H INT 21H CALL DELAY1 INC CH DEC CL DEC COUNT CMP COUNT,0 JNZ LOP20 INC CT CMP CT,24 JNZ LOP19 MOV CL,1 ;消失矩形框左竖行 LOP21: MA CL,0 MOV AL, MOV BL,0BH PUSH CX MOV CX,1 MOV AH,09H INT 10H POP CX CALL DELAY1 INC CL CMP CL,24 JNZ LOP21 MOV CL,0 ;消失矩形框下行 LOP22: MA 24,CL MOV AL, MOV BL,0BH PUSH CX MOV CX,1 MOV AH,09H INT 10H POP CX CALL DELAY1 INC CL CMP CL,79 JNZ LOP22 MOV CL,24 ;消失矩形框右竖行LOP23: MA CL
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1