微机原理与接口技术课程设计说明书1目录摘要………………………………………………………………………21设计任务及要求分……………………………………………………31.1设计任务……………………………………………………………………31.2要求分析……………………………………………………………………32比较方案及说明…………………………………………………………………43系统原理阐述……………………………………………………………………54子程序分析………………………………………………………………………64.1主程序分析…………………………………………………………………64.2画三角形子程序分析………………………………………………………84.3画矩形子程序分析…………………………………………………………114.4画圆子程序分析……………………………………………………………155调试记录及结果分析…………………………………………………………205.1调试记录……………………………………………………………………205.2结果分析……………………………………………………………………21体会…………………………………………………………………………………23参考文献…………………………………………………………………………24附录…………………………………………………………………………………25微机原理与接口技术课程设计说明书2摘要汇编语言是一门涉及硬件的程序语言,也是电气工程及其自动化专业的一门重要的专业基础课。本次课程设计就是利用汇编语言直接操作硬件,实现画图,并且根据键盘字母输入从从屏幕上输出不同颜色,不同形状的图形。该报告主要包括了涉及任务及要求分析,Bresenham画线和直接写入元素两种方法的对比说明,阐述了涉及原理和程序,其中程序主要分为两大部分,主程序和子程序,主程序中包含了清屏指令组,子程序调用指令和退出指令,子程序分别实现画圆,画三角形,画矩形的功能。该课程设计中很多内容主要来自图书馆查阅资料和网络资源,整理后进行修改运行,最终能实现左右功能及要求。微机原理与接口技术课程设计说明书31设计任务及要求分析1.1设计任务按S用四种颜色各显示一个矩形的程序,按T用三种颜色各显示一个三角形的程序,按C用一种颜色显示一个圆。按Q退出程序。1.2要求分析本课程设计的任务是用汇编语言编写一个“显示图形变换程序”,根据题目分析可得该程序需要实现以下几个功能,第一,检测键盘字母输入;第二,判断字母是否符合要求,第三,当符合条件时调用正确的子程序;第四,运行输出想要的结果。微机原理与接口技术课程设计说明书42.比较方案及认证说明根据题目要求需实现画图功能,我主要采用了两种方法。第一种方法是直接建立坐标,在坐标点写入像素,该方法利用10H中断的0CH号功能写像素,并且通过AL寄存器设置像素点颜色,用这个方法的话比较容易理解,无需其他算法,操作起来比较简单,但是能实现的画图功能比较有限,如利用这个方法画直线比较简单,语句较少,但是在画非直线图形的时候用这个方法反而变得很复杂。第二个方法为Bresenhan算法,Bresenham算法是计算机图形学领域使用最广泛的直线扫描转换方法。其原理是:过各行、各列像素中心构造一组虚拟网格线,按直线从起点到终点的顺序计算直线各垂直网格线的交点,然后确定该列像素中与此交点最近的像素。该算法的优点在于可以采用增量计算,使得对于每一列,只要检查一个误差项的符号,就可以确定该列所求的像素。在用该算法画圆是能使程序得到简化,且运行效率较高。本次课程设计中,在画矩形和三角形时,用到了第一种直接写入像素法,画圆是用到的为Bresenham算法。微机原理与接口技术课程设计说明书53系统原理阐述根据课程设计任务书所给出条件要求,我主要把程序分为四部分来实现,即把程序分为四个模块,采用子程序调用的方法,这样不仅有利于程序的编写,使程序清晰可见,还方便程序的修改及阅读。第一个模块为主程序模块,该程序快中主要有清屏程序组,使屏幕上卷,从而实现清屏功能,清屏功能用INT10H的功能六实现,键盘输入判断,利用CMP指令,判断ZF标志位,从而调用正确的子程序,最后是退出语句。第二个模块为画圆程序块,该程序块主要利用Bresenham算法来实现画圆,其原理是过各行、各列像素中心构造一组虚拟网格线,按直线从起点到终点的顺序计算直线各垂直网格线的交点,然后确定该列像素中与此交点最近的像素,把所有符合要求的像素点亮即为圆形。第三个模块和第四个模块分别为画矩形和画三角形子程序,他们的原理是完全相同的,首先利用CX确定一个行坐标,利用DX确定一个纵坐标,两坐标交点即为像素点坐标,然后利用INT10H的0CH号功能写入像素,用BH的值确定像素点颜色,利用CX寄存器的值确定直线的像素点个数,即为线长,此法关键在于正确确定每个顶点的坐标。微机原理与接口技术课程设计说明书64子程序分析4.1主程序分析首先分析主程序,主程序中包含了清屏程序和子程序调用以及退出子程序,清屏子程序的目的是清楚屏幕上的内容,接着根据输入字母判断后调用符合条件的子程序。主程序如下:MAINPROCFARMOVAX,DATASMOVDS,AXMOVAX,0600H;用INT10H的功能6清屏MOVBH,7MOVCX,0;窗口左上角坐标MOVDX,184FH;窗口右上角坐标INT10HL1:MOVAH,1;利用21H中断判断字母INT21H;输入并改变ZF标志位CMPAL,'S'JZP1CMPAL,'T'JZP2CMPAL,'C'JZP3CMPAL,'Q'JZEXITJMPL1P1:CALLJUXING;调用画矩形的子程序JMPL1P2:CALLSANJIAO;调用画三角形的子程序JMPL1P3:CALLHYUAN;调用画圆的子程序JMPL1EXIT:MOVAX,4C00H:退出子程序INT21HMAINENDP微机原理与接口技术课程设计说明书7主程序流程图如下图所示:YNYNYNY图4-1程序流程图如图4-1为该程序的流程图,从图中可以看出,先通过清屏程序清屏,然后利用21H中断从键盘上获得一个字母,并判断分别判断字母与大写字母S,T,C和Q是否相等,如果不相等,则不执行,直到有字母相等时,如输入大写字母S时,则调用“JUXING”子程序。然后返回等待下一个字母输入。清屏开始输入字母判断S判断T判断C检测输入判断Q结束调用SANJIAO调用EXIT调用HYUAN调用JUXING微机原理与接口技术课程设计说明书84.2画三角形子程序分析画三角形子程序:画三角形子程序靠点亮屏幕像素点实现,通过INT10中断的0C号功能设置屏幕的模式为写像素模式,通过BH的值确定像素点颜色,通过坐标确定三角形各点的坐标,CX的值为横坐标,DX的值为纵坐标,通过循环点亮像素点分别构成三角形的两直角边和斜边画三角形子程序如下:SANJIAOPROCNEARMOVAH,0;设置显示模式MOVAL,12HINT10HMOVCX,100;从坐标(100,200)处画第一个三角形水平线MOVDX,200LOP1:MOVAH,0CHMOVAL,0AHMOVBH,0INT10HINCCXCMPCX,200;线长为100JNZLOP1MOVCX,100;从坐标(100,200)处画第MOVDX,200一个三角形垂直线LOP2:MOVAH,0CH;写像素功能MOVAL,0AH;颜色为浅绿色MOVBH,0INT10HDECDXCMPDX,100;判断线是否结束,线长为100JNZLOP2MOVCX,100;从坐标(100,100)处画第一个MOVDX,100三角形斜线LOP3:MOVAH,0CHMOVAL,0AHMOVBH,0INT10HINCCXINCDX微机原理与接口技术课程设计说明书9CMPDX,200JNZLOP3MOVCX,300;画第二个三角形,画法和的个三角MOVDX,200一样关键在于找准坐标LOP4:MOVAH,0CHMOVAL,0CHMOVBH,0INT10HINCCXCMPCX,400JNZLOP4MOVCX,300MOVDX,200LOP5:MOVAH,0CHMOVAL,0CHMOVBH,0INT10HDECDXCMPDX,100JNZLOP5MOVCX,300MOVDX,100LOP6:MOVAH,0CHMOVAL,0CHMOVBH,0INT10HINCCXINCDXCMPDX,200JNZLOP6MOVCX,500;画第三个三角形MOVDX,200LOP7:MOVAH,0CHMOVAL,0EHMOVBH,0INT10HINCCXCMPCX,600JNZLOP7微机原理与接口技术课程设计说明书10MOVCX,500MOVDX,200LOP8:MOVAH,0CHMOVAL,0EHMOVBH,0INT10HDECDXCMPDX,100JNZLOP8MOVCX,500MOVDX,100LOP9:MOVAH,0CHMOVAL,0EHMOVBH,0INT10HINCCXINCDXCMPDX,200JNZLOP9RETSANJIAOENDP画三角形程序流程图如下图所示:YN图4-2画三角形程序流程图如图4-2为画三角形程序流程图,画出一边后,依据同样的方法确定坐标即可画出其余所有边。写像素设置坐标点判断CX变换坐标开始结束微机原理与接口技术课程设计说明书114.3画矩形子程序分析画矩形程序分析:矩形的画法和三角形的画法是一样的,找准各个点的坐标,从一个坐标到另一个坐标之间点亮像素点即为矩形的边。画矩形的程序如下:JUXINGPROCFARMOVAH,0MOVAL,12HINT10HMOVCX,50;画第一个矩形MOVDX,200;起始点坐标为(50,200)LOP1:MOVAH,0CH;设置写像素MOVAL,0AH;设置颜色MOVBH,0;设置页号(一般为0)INT10HINCCX;横坐标加一CMPCX,100;判断直线是否画完JNZLOP1;若ZF不为0则循环LOP1;直到画完直线MOVCX,50;以下程序段和上一断是一样的MOVDX,200;除坐标外用法相似,在此不再LOP2:MOVAH,0CH;阐述MOVAL,0AHMOVBH,0INT10HDECDXCMPDX,100JNZLOP2MOVCX,50MOVDX,100LOP3:MOVAH,0CHMOVAL,0AHMOVBH,0INT10HINCCXCMPCX,100JNZLOP3MOVCX,100MOVDX,100LOP4:MOVAH,0CHMOVAL,0AH微机原理与接口技术课程设计说明书12MOVBH,0INT10HINCDXCMPDX,200JNZLOP4MOVCX,150;第二个矩形MOVDX,200LOP5:MOVAH,0CHMOVAL,0CHMOVBH,0INT10HINCCXCMPCX,200JNZLOP5MOVCX,150MOVDX,200LOP6:MOVAH,0CHMOVAL,0CHMOVBH,0INT10HDECDXCMPDX,100JNZLOP6MOVCX,150MOVDX,100LOP7:MOVAH,0CHMOVAL,0CHMOVBH,0INT10HINCCXCMPCX,200JNZLOP7MOVCX,200MOVDX,100LOP8:MOVAH,0CHMOVAL,0CHMOVBH,0INT10HINCDXCMPDX,200微机原理与接口技术课程设计说明书13JNZLOP8MOVCX,250;第三个矩形MOVDX,200LOP9:MOVAH,0CHMOVAL,0EHMOVBH,0INT10HINCCXCMPCX,300JNZLOP9MOVCX,250MOVDX,200LOP10:MOVAH,0CHMOVAL,0EHMOVBH,0INT10HDECDXCMPDX,100JNZLOP10MOVCX,250MOVDX,100LOP11:MOVAH,0CHMOVAL,0EHMOVBH,0INT10HINCCXCMPCX,300JNZLO