微机原理课程设计_第1页
微机原理课程设计_第2页
微机原理课程设计_第3页
微机原理课程设计_第4页
微机原理课程设计_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

武汉理工大学《微机原理与接口技术》课程设计说明书III图形变换程序设计1设计意义(1)巩固和加深课堂所学知识。(2)

将课本上的理论知识和实际应用有机的结合起来,培养同学们分析和解决实际问题的能力。(3)

通过对汇编语言程序代码的阅读、修改、设计,理解和掌握复杂的汇编语言应用程序的编程,提高实践编程能力。本程序要求按不同的键显示不同的图形,按“q”键退出。实质上通过做这道题目可以检查学生对汇编语言这门课程的基本知识的掌握程度。能用汇编语言熟练地运用顺序、选择、循环三大结构,进一步掌握各个指令的功能,特别是转向指令,能够让我们熟悉并掌握DOS系统功能调方法;同时在程序设计过程中熟悉并掌握各种指令的应用,知道编程的具体流程。

只有掌握汇编语言基本编程方法,掌握程序各部分功能及其相互联系、相互作用,才能把程序写出来,才能把程序写好。2设计内容2.1程序的内容与要求掌握8086汇编语言程序设计方法,设计一个图形变换显示程序。程序运行后,键盘输入不同进行不同处理:(1)输入‘Q’,显示‘ThankYou!’并结束程序;(2)输入‘E’,显示一个用不同颜色填充且带有边框的矩形图案;输入‘F’,显示一个用不同颜色填充的圆形图案。2.2程序运行条件 本程序可在DOS,windows98或DOS模拟器上运行。所需要工具软件为MASM5.0及以上版本。3方案设计3.1设计思路3.1.1显示字符程序显示“ThankYou”程序是最易于设计的一部分,只需要定义其字符串为字节型变量,并定义在当键盘输人为‘Q’时显示,并退出运行即3.1.2显示圆形首先,定义x为竖线的列值,Y1和Y2分别为竖线的两端点的行值,并将界面分成LEFT和RIGHT两部分。在LEFT部分,输入值为列数A,给圆的半径R赋具体值,通过算法完成下式求得A对应的行值,从而确定Y2,再利用中间变量实现Y1与Y2的等值,即可画出LEFT部分的一条弦。再用宏定义,使A值从0到R,完成弦在0到R上的积分,就形成左半部分的半圆,同理,可完成右半部分的半圆,两个半圆整合,便形成圆。图3-1定义弦图3-2计算圆上点的坐标3.1.3显示矩形先确定一点,定义为矩形左上角的列号和行号,即确定了矩形的一个角点坐标,再定义其长度和宽度并赋值,知道左上角角点坐标及矩形长宽,即可画出矩形。边框的设计实际是大小两个矩形的重叠形成的,定义第二个矩形时,其角点及长宽比之前的尺寸少有增加,酌情而定,设置输出时,底层显示尺寸较大的矩形,上层显示尺寸较小的矩形,使得上层矩形显示完整,下层矩形显示多出来的部分,即形成边框,并在输出颜色是设置两个举行的色差,从而明显显示出边框。3.2程序流程图程序流程图如图3-3所示图3-3程序流程图4程序分解4.1字符显示程序在设计思路中已经提到,显示字符的程序较为简单,只需用字节型变量定义字符串,并定义在接收‘Q’是显示,并退出运行即可。DB0DH,0AH,'Q:display"ThankYou!"andquittoDOS.',0DH,0AHMSGQDB0DH,0AH,'ThankYou!','$'4.2圆形显示程序(1)利用弦的积分方法,定义宏:LINEMACROX,Y1,Y2 ;画列值为x,行值从Y1到Y2的直线LOCALLL,FIRSTMOVAAAAAMOVAAAAAMOVAAAAAMOVAAAAAJMPAAAAALL:INCAAAAA ;行值加1FIRST:MOVAAAAAINT10H CMPDX,Y2JNZLL ;判断Y1和Y2是否相等,若相等则完成ENDM(2)定义坐标:CIRCLEMACROMOVA,0 ;初始化圆的横坐标AGA:CALLAAA ;计算纵坐标的值MOVAAAMOVCL,AADDCX,X0MOVAAA ;右平面弦的列值MOVAAAMOVCL,ANEGCXADDCX,X0 MOVAAA MOVAAA ADDAAAMOVAAA ;弦的上端点的行值MOVAAANEGAAAADDAAA MOVAAA ;弦的下端点的行值LINEAAA LINERIGHT,DOWN,UP ;在右平面画弦INCA MOVAL,R计算纵坐标的子程序:SQRTPROCNEAR;计算行坐标MOVMULMOVMOVMULSUBMOVCX,0LAST1:MOVDXINCDSUBAXJCEINCCJMPLEXIT1:MOVH,CX ;计算结果保存在H单元内RETSQRTENDP4.3矩形程序显示产生矩形的子程序:RECTANGLEPROCNEARPUSH??PUSH??PUSH??PUSH??PUSH??MOVD??;矩形左上角行号MOVCX??MOVAL,??MOVDI??;矩形的长ADDDI,CXMOVSI,??TWID;矩形的宽ADDSI,DXHLINE:MOVC??MNHAGAIN:MOVAHVMOV??INT??INCCXCMP??;是否达到矩形的长?JLHA??ADDDX,1CMPD??EPOP??POP??POP??XPOPD??POPAXRETRECTANGLEENDP4.4产生颜色的子程序RANDOMCOLOR??OCNEARPUSH??PUSHBXPUSH??XRANDCOLOR:INAL,40HCMPA??JA??OLORMOVV??,ALPOP??POPBXPOPAXRETRANDOMCOLORENDP4.5屏幕初始化子程序CLSMENUPROCNEARMOV??;设置屏幕显示方式MOV?? ;定义成640*48016色图形模式INT10H LEAB??;显示菜单MOVAH,13HMOVAL,01MOVC??MOV??MOVBH,0MOV??INT??RETCLSMENUENDP5运行结果显示5.1矩形输出显示输入‘E’,矩形输出显示如图5-1所示图5-1(a)矩形输出显示程序图5-1(b)矩形输出显示程序5.2圆形输出显示输入‘F’,圆形输出显示如图5-2所示图5-2(a)圆形输出显示图5-2(b)圆形输出显示5.3字符串输出显示输入‘Q’,字符串输出显示如图5-3所示5-3字符串输出显示6设计过程中的问题在设计过程中出现的最大问题,就是开始按‘E’后正常显示矩形,再按‘F’后,在显示圆的同时,还会显示矩形,矩形在底层,再按‘E’,在显示矩形的同时还会显示圆形,且圆形在底层,运行结果如图6-1所示。图6-1(a)错误运行结果图6-1(b)错误运行结果经分析,出现该问题的原因是没有清屏,导致按下一个键,显示下一个图形的时候,上一个图形依旧不会消失,找到了问题所在,之前是由于在设置输出时,仅在第一次输出矩形之前屏幕初始化。修改后,定义屏幕初始化的子程序,在输出矩形和圆形事,都先有调用清屏的子程序这一步,是的错误得以纠正,屏幕初始化子程序的调用如下:CALLCLSMENU ;屏幕初始化并显示菜单CALLRAN??????;随机产生颜色CALL??;画外框矩形CALLCLSMENU ;屏幕初始化并显示菜单CALLRANDOMCOLOR ;随机产生颜色MOV??CIRCLE ;在屏幕上画出半径为R的圆心得体会本次课程设计题目是图形变换程序设计。初次看到题目,没有任何的思路,情急之下,心神不定地查了一整天的资料,也没有太大的收获。自己完全局限于课本上所学的简单的语言,但那远不足以完成本次课设的任务。最后,我决定通过查阅参考资料,并上网查询各种代码的含义,自己设计画图的算法,实现图形的显示。在整个过程中,圆的画法是最不易的。开始参考了别人画圆轨迹线,从中得到了启示,做圆上弦的积分由线及面,形成圆面。这次课程设计对我而言,其难度是之前从未有过的。然而,我还是靠自己的毅力挺了过来。在查阅了大量资料后,掌握了简单图形显示的程序,熟悉了子程序的调用和doc功能的实现,并初步学会了中断在程序中的应用。两周的汇编语言课程设计结束了,我的收获是很大的。通过课程设计的编程和对编程过程中遇到的问题的思考,有效的提高了我对汇编的认识和理解,切实提高了我的编程能力,补全了我的不足。值得庆幸的是,这次课程设计,自己是独立完成的,并未参考他人方案。虽然并未有很多设计上创新的地方,但对我来说,这是一种突破,自己独立解决问题的能力进一步提高。在今后的课程设计中,我依旧要保持这种独立思考的习惯,将自己的短处变为长处。致谢我本次的课程设计是在??老师老师亲切关怀与细心指导下完成的。从题目的选择到设计的最终完成,??老师始终都给予了我细心的指导和不懈的支持,并且在耐心指导之余,?????老师仍不忘关心我们的生活,冷冷寒冬的关怀让我们倍感温暖。值得一提的是,????老师宅心仁厚,闲静少言,不慕荣利,对学生认真负责,在他身上,我们可以感受到一个学者的严谨和务实,这些都让我们获益菲浅,并且将终生受用无穷。毕竟“经师易得,人师难求”,希望借此机会向???老师表示最衷心的感谢!参考文献【1】彭虎周佩玲付忠谦.《微机原理与接口技术》(第二版)电子工业出版社2008.3【2】张凡.《微机原理与接口技术》(第二版)清华大学出版社2010.9【3】朱定华.《微机原理、汇编与接口技术》清华大学出版社1010.1【4】牟琦聂建萍.《微机原理与接口技术》清华大学出版社1007.12【5】吴叶兰.《微机原理与接口技术》机械工业出版社2009.8附录;;宏功能:画一条竖线;哑元意义:x为竖线的列值;Y1和Y2分别为竖线的两端点的行值;LINEMACROX,Y1,Y2 ;画列值为x,行值从Y1到Y2的直线LOCALLL,FIRSTMOV??MOV?/???MOV/???MOVD/???JMP/???LL:INC/??? ;行值加1FIRST:MOV/???INT10H ;写一个像素点CMP/???JNZLL ;判断Y1和Y2是否相等,若相等则完成ENDM;;宏功能:通过分别在左右平面画垂直于x轴的弦来画一个实心圆;CIRCLEMACROMOV/??? ;初始化圆的横坐标AGA:CALL/??? ;计算纵坐标的值MOV/???MOV/???ADD/??? ;右平面弦的列值MOVCH,0MOV/???NEGVADDC/??? MOV/??? ;左平面弦的列值MOVDX,H ADD/???MOVV/???NEGDXADD/??? MOV/??? ;弦的下端点的行值LINELEFT,V/??? ;在左平面画弦LINE/??? ;在右平面画弦INCA ;继续画其他弦至画出圆MOVAL,RCMP/???JNZ/???ENDM;**********************************************************************DATASEGMENTMENUDB0DH,0AH,'Pleasepressakey:',0DH,0AHDB0DH,0AH,'E:showarectangle.'DB0DH,0AH,'F:showacircle.'DB0DH,0AH,'Q:display"ThankYou!"andquittoDOS.',0DH,0AHMENULENEQU$-MENUMSGQDB0DH,0AH,'ThankYou!','$'ROW/???COLUMN/???RECTLENDW/???RECTWIDDWVCOLORDB/???RDB?/???DB? ;存放圆的横坐标A2DW/???HDW/??? ;存放圆的纵坐标Y0EQU/??? ;纵坐标的行值X0EQU/??? ;横坐标的列值RIGHTDW? ;存放右平面的列值LEFTDW? ;存放左平面的列值UPDW? ;存放上半平面的行值DOWNDW? ;存放下半平面的行值DATAENDS;**********************************************************************CODESEGMENTASSUMEDS:DATA,CS:CODE,ES:DATA;START:MOVA/???MOV/???MOV/???;CALLCLSMENU ;屏幕初始化并显示菜单WAITPRESS: ;等待按键MOV/??? ;接受命令INT1/???ORA/??? ;转换成小写字母CMPAL,'e'JZDRAWRECTCMPAL/???CMPA/???JZQuitProcJMPW/???DRAWRECT:CALLCLSMENU ;屏幕初始化并显示菜单CALLR/??? ;随机产生颜色CALLRECTANGLE ;画外框矩形PUSHV/???/???PUS/???PUSHRECTLENDDROW,8ADD/???SUB/???S/???ADDCOLOR,8CALLR/??? ;画内部矩形POPREC/???POPR/???POPROWJMPV/???SDRAWCIRC:CALLCLV/??? ;屏幕初始化并显示菜单CALL/??? ;随机产生颜色MOV/???CIRCLE ;在屏幕上画出半径为R的圆JMP/???QuitProc:MOVAL,03MOVAH,0INT/???MOVDX,OFFSETMSGQ ;显示信息MOV/???INT21HMOV/??? ;返回DOSINT21H;;产生矩形子程序RECTANGLEPROC/???PUSHAXPUSH/???PUSHCXPUSH/???PUSH/???MOVDX,ROW;矩形左上角行号MOV/???;矩形左上角列号MOV/???MOV/???;矩形的长ADDDI,CXMOV/???;矩形的宽ADDSI/???HLINE:MOV/???HAGAIN:MOVAH/???;写像素MOV/???INT/???INC/???CMP/???;是否达到矩形的长?JL/???ADD/???CMP/???;是否达到矩形的宽?JL/???EPOPSI/???DIPOP/???POP/???RETRECTANGLEENDP;;计算纵坐标的值辅助画圆子程序SQRTPROC/???;计算行坐标MOVA/???MUL/???MOV/???MOV/???MUL/???SUBA/???MOVCX,0LAST1:MOV/???ADD/???INCDXSUB/???JCEXIT1INCCXJMP/???EXIT1:MOV/??? ;计算结果保存在H单元内RETSQRTENDP;;随机产生颜色子程序RANDOMCOLORPROCNEARPUSH/???PUSHBXPUSH/???RANDCOLOR:IN/???CMP/???JA

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论