微机课程设计.docx
《微机课程设计.docx》由会员分享,可在线阅读,更多相关《微机课程设计.docx(19页珍藏版)》请在冰豆网上搜索。
![微机课程设计.docx](https://file1.bdocx.com/fileroot1/2022-11/30/68f4391f-5335-4e1a-935f-b173456bc5c7/68f4391f-5335-4e1a-935f-b173456bc5c71.gif)
微机课程设计
目录
摘要-1-
一.设计的题目-2-
二.设计目的-2-
三.设计内容-2-
3.1程序的内容与要求-2-
3.2程序运行条件-2-
3.3输入/输出描述-3-
四.设计方案-4-
五.程序结构-4-
5.1段定义说明-4-
5.2子程序功能说明-5-
5.3算法描述-5-
六.程序流程图-6-
七.文件的编辑、连接和运行结果-9-
7.1汇编源程序文件(ASM,MASM)-9-
7.2连接目标文件(LINK)-9-
7.3运行可执行文件-9-
八.程序的调试-10-
8.1程序结构设计特点-10-
8.2调试程序心得-10-
九.设计总结-10-
参考文献-13-
附录-14-
微机原理课程设计任务书
2011-2012学年第一学期 第17周-18周
题目
图形变换程序
内容及要求
结合微机原理知识,查阅有关资料,完成一个图形变换的程序编写,系统具有4种可选择的功能,按字母“Y”画一个由点组成的园;按字母“S”画一个由不同颜色填充的三角形;按字母“Z”画一个由不同颜色填充的矩形;按字母“Q”退出。
进度安排
1、查找资料,提出总体方案1天
2、分析、设计、调试、实现3天
3、检查、整理、写设计报告、小结1天
学生姓名:
指导时间:
2011-12-15至2011-12-29
指导地点:
任务下达
2011年12月15日
任务完成
2011年12月29日
考核方式
1.评阅√ 2.答辩√3.实际操作√ 4.其它□
指导教师
系(部)主任
摘要
《微机原理与接口技术》课程是电气信息类专业学生的一门重要基础课程,同时也是一门实践性和应用性很强的课程。
本课程主要讲授微型计算机的基本工作原理、系统组成及接口技术和基本的汇编语言程序设计知识,通过学习从而为学生今后分析和设计微机应用系统打好基础。
在理论教学的同时,如果忽视实践教学,学生对理论知识不能够很好的掌握,学习效果就会受到很大的影响。
本次课程设计主要是通过应用微机原理中汇编的几个步骤——编辑、汇编、连接、运行或调试运行,使得在doc界面完成图形变换。
关键词:
微型计算机原理接口技术汇编语言实践教学doc
一.设计的题目
图形变换程序
二.设计目的
1. 巩固和加深课堂所学知识。
2. 将课本上的理论知识和实际应用有机的结合起来,培养同学们分析和解决实际问题的能力。
3. 通过对汇编语言程序代码的阅读、修改、设计,理解和掌握复杂的汇编语言应用程序的编程,提高实践编程能力。
本程序要求按不同的键显示不同的图形,按“q”键退出。
实质上通过做这道题目可以检查学生对汇编语言这门课程的基本知识的掌握程度。
能用汇编语言熟练地运用顺序、选择、循环三大结构,进一步掌握各个指令的功能,特别是转向指令,让同学熟悉并掌握DOS系统功能调方法用及BIOS系统功能调用方法;同时在程序设计过程中熟悉并掌握各种指令的应用,知道编程的具体流程,以及掌握DEBUG的一系列的功能执行命令,及用它进行调试,运行功能。
只有掌握汇编语言基本编程方法,掌握程序各部分功能及其相互联系、相互作用,才能把程序写出来,才能把程序写好。
三.设计内容
3.1程序的内容与要求
结合微机原理知识,查阅有关资料,完成一个图形变换的程序编写,系统具有4种可选择的功能,按字母“Y”画一个由点组成的园;按字母“S”画一个由不同颜色填充的三角形;按字母“Z”画一个由不同颜色填充的矩形;按字母“Q”退出。
3.2程序运行条件
本程序可在windows98,windows2000,windowsxp上运行。
所需要工具软件为MASM2.0及以上版本。
3.3输入/输出描述
①输入Y
②输入S
③输入Z
④输入q
返回到DOS界面。
四.设计方案
BIOS调用中并没有现成的显示圆、三角形和矩形的功能,故编写了三个子程序,采用段内调用子程序的方法来实现。
其中圆用在屏幕上显示12个小圆点以围成一个圆来实现,12个小圆点的行列坐标事先定义在一个变量中。
三角形和矩形的实现原理是采用控制写点的方式,行、列、块的颜色不是采用变量表示,此处的三角形用寄存器表示,使用了堆栈技术,矩形使用的也是寄存器,但没有使用堆栈。
整个程序的结构如图所示。
五.程序结构
5.1段定义说明
分为数据段DSEG、堆栈段SSEG和代码段CSEG。
堆栈段是为一些字符串和图形的光标位置及其他一些数据分配空间;数据段是记录程序运行过程中所需的信息,包括字符信息,图形光标等;代码段则是程序算法部分,通过对各子程序的调用,实现图形转换功能。
5.2子程序功能说明
子程序包括三个:
函数名为YUAN,SAN和ZHENG,分别具有画圆、画三角形和画矩形的功能。
调用关系:
根据指令
SA:
CALLSAN
JMPINPUT
ZHEN:
CALLZHENG
JMPINPUT
YUA:
CALLYUAN
JMPINPUT
当转移到各标号时,调用不同的子程序,从而实现绘制图形。
过程返回指令RET定义在子程序中,当执行完子程序后,跳转到INPUT。
参数传送方式:
程序中用到利用寄存器传递参数和利用约定存储单元的方法传递参数。
即把参数存放在寄存器或是存储单元中来实现主程序和子程序间的参数传递。
5.3算法描述
(1)各模块功能实现:
MAIN模块
功能:
这是个主过程,是负责进入和退出图形转换程序的入口。
利用指令:
MOVAH,08;不带回显键盘输入,出口参数al
INT21H
来实现字符的输入,从而进入相应的子程序。
YUAN模块
功能:
实现画圆的功能。
圆用在屏幕上显示12个小圆点以围成一个圆来实现,12个小圆点的行列坐标事先定义在一个变量中。
利用CALL指令直接实现从主函数调用。
SAN模块
功能:
实现画三角形功能。
利用CALL指令直接实现从主函数调用。
ZHENG模块
功能:
实现画矩形的功能。
通过向四个方向滚屏,来实现绘制四个边。
利用CALL指令直接实现从主函数调用。
(2)典型指令的应用:
程序中运用了大量的数据定义语句、数据传送指令及转移指令,并用到DOC功能调用和基本输入输出系统BIOS中的中断处理程序。
典型的有JZ跳转指令,中断指令INT10H,INT21H,如指令:
MOVAL,2
MOVAH,9
MOVBL,0E0H
INT10H
其中AL存放字符代码,AL=字符代码,AH=9表示将字符和属性写到光标位置处,BL=属性。
而指令MOVAH,4CH/INT21H表示返回到DOC操作界面。
六.程序流程图
程序开始运行后,先提示:
pleasechoosethelettery,s,z:
inputqtoquit然后操作者选择一个字母,程序根据比较:
CMPAL,’S’
JZSA
CMPAL,’Z’
JZZHEN
CMPAL,’Y’
JZYUA
CMPAL,’q’
JZEXIT
MOVDX,OFFSETINFO2
MOVAH,09
INT21H
若为S,则转到标号SA,进一步调用子程序SAN来画出三角形;若为Z,则转到标号ZHEN,进一步调用子程序ZHENG来画出矩形;若为Y,则转到标号YUA,进一步调用子程序YUAN来画出圆。
若为q,则转到EXIT,转到DOC操作页面。
若不是以上的字符,则提示输入错误,显示chooseerror!
程序流程图如下所示:
七.文件的编辑、连接和运行结果
7.1汇编源程序文件(ASM,MASM)
由编辑程序所建立的ASM文件只是个文本文件,计算机无法执行。
需要经过汇编程序的汇编,使其转为目标代码文件。
它是通过调用宏汇编MASM(或汇编程序ASM)程序完成这一汇编操作的。
汇编程序还将对源文件进行语法检查,如发现有错,将给出错误原因。
程序设计者可根据它分析和修改源程序,并再经过汇编,直到无错时为止,此时得到的是一个目标文件(OBJ文件)。
7.2连接目标文件(LINK)
目标文件为浮动的相对地址,是不可直接执行的。
必须经过连接,把有关模块连接在一起,构成统一的编址,从而为运行提供条件。
在运行时,装填到内存中的具体位置由段地址来确定。
连接过程是由LINK连接程序实现的,止时得到的是一个可可执行文件(EXE文件)。
7.3运行可执行文件
得到可执行文件后就可以直接调用可执行文件名,从盘上调到内存中运行。
在出现的提示信息中,按Y键画圆;按S键画三角形;按Z键画正方形;按q键退出。
八.程序的调试
8.1程序结构设计特点
通过设计三个子程序,分别实现画圆、画三角形和画矩形的功能,然后通过比较输入的字符,调用相应的子程序,完成不同的绘图。
主程序和子程序间通过寄存器和约定内存单元的方法实现参数传递。
8.2调试程序心得
在调试中发现很多错误都是有于没注意到一些小细节而出错,(例如:
注释说明时忘了加“;”号,SEGMENT和ENDS、PROC和ENDP不匹配等),因此在写程序时所有的细节都要考虑到。
九.设计总结
一周的汇编语言课程设计结束了,我的收获很大。
通过课程设计的编程和对编程过程中遇到的问题的思考,有效的提高了我对汇编的认识和理解,切实的提高了我的编程能力,补全了我的不足。
通过这次课程设计,我巩固所了学过的知识,能用汇编语言熟练地运用顺序、选择、循环三大结构,进一步掌握了各个指令的功能,特别是转向指令,掌握了子程序的定义及调用,以及正确地运用DEBUG指令。
在整个程序的编写中,调试占了很大部分的时间。
要想写好汇编语言的程序,必须认真对待代码的每一个细节,还必须熟练的掌握debug命令,这对程序的调试是非常重要的。
通过这次实际动手能力的培养,我进一步熟悉了汇编语言的结构和使用方法,基本达到了能独立阅读、编制和调试一定规模的汇编语言程序的水平。
另外,就是我对这门课内容的学习感受。
要学好这门课,我认为应该做到以下三点:
1)课本上应该记住的东西一定要记住,记不住就没法做题,(例如指令,寻址方式等等)若记住你做题就会做,看程序也就能看懂,记不住见了它就会对它不知所措,一脸茫然。
2)预习很重要,这一点不仅适用于这一科的学习,确切的说它适用于任何一科,有的同学这一点作的不好,上课只知道竖着两个耳朵傻傻的听老师讲课,也不注意动动脑子随时思考,延续以前填鸭式的学习方式,想让老师讲给所有的东西,殊不知很多东西还要自己从书本获得。
这就难免出现听不懂的情况,这好比让一个不懂外语的人听外语录音,在他的心里,听外语就像听天书一般,所以说你要学一点新东西,前提是你对它要有一点了解,不然的话你所作的一切只不过是在浪费时间,浪费金钱,浪费生命。
3)理论与实践相结合,不懂的地方应勤问老师勤问同学,直到把它搞懂为止。
指导教师评语:
课程设计成绩:
指导教师签名:
年月日
参考文献
[1]沈美明、温冬蝉编.IBM-PC汇编语言程序设计,第2版,清华大学出版社,2001.
[2]沈美明、温冬蝉编.IBM-PC汇编语言程序设计例题习题集,清华大学出版社,1991.
[3]陆忠华等编.汇编语言程序设计,科学出版社,1993.
[4]迟成文、王保秀编.汇编语言程序设计”,中国科学技术大学出版社,1993.
[5]杨季文等编.80X86编语言程序设计教程,清华大学出版社,1998.
[6]钱晓捷主编.微机原理与接口技术,第4版,机械工业出版社,2008.
[7]沈美明等编著.80X86汇编语言程序设计,清华大学出版社,2001.
[8]杨素行等编著.微型计算机系统原理及应用,第2版,清华大学出版社,2004.
[9]刘兆瑜主编.微机原理与接口技术,国防科技出版社2010.
附录
源程序代码(简单注释)
DSEGSEGMENT
INFO1DB0DH,0AH,’pleasechoosethelettery,s,z:
’
DB0DH,0AH,’inputqtoquit’,’$’
INFO2DB0DH,0AH,’chooseerror!
’,’$’
D3DW0
TOTALDB12
DOTYXDB50,160
DB60,135
DB60,185
DB75,115
DB75,205
DB95,110
DB95,210
DB110,114
DB110,210
DB130,135
DB130,195
DB145,165
DSEGENDS
SSEGSEGMENT
STACKDB200DUP(0)
SSEGENDS
CSEGSEGMENT
ASSUMECS:
CSEG,DS:
DSEG,SS:
SSEG
START:
MAINPROCFAR
MOVAX,DSEG
MOVDS,AX
MOVAH,0;设置显示模式
MOVAL,4;显示模式代号
INT10H;10H号中断,显示I/O程序
INPUT:
LEADX,INTO1;要输出字符串首地址
MOVAH,9;在标准输出上显示一个字符串
INT21H
MOVAH,08;不带回显键盘输入,出口参数al
INT21H
CMPAL,’S’
JZSA
CMPAL,’Z’
JZZHEN
CMPAL,’Y’
JZYUA
CMPAL,’q’
JZEXIT
MOVDX,OFFSETINFO2
MOVAH,09
INT21H
SA:
CALLSAN
JMPINPUT
ZHEN:
CALLZHENG
JMPINPUT
YUA:
CALLYUAN
JMPINPUT
EXIT:
MOVAH,4CH
INT21H
RET
MAINENDP
SANPROCNEAR
PUSHAX
PUSHBX
PUSHCX
PUSHDX
MOVAH,0
MOVAL,12H
INT10H;显示I/O程序
MOVAL,1
A0:
MOVDX,1
MOVD3,1
MOVCX,320
A1:
PUSHCX
PUSHD3
A2:
MOVAH,12
PUSHAX
INT10H;显示I/O程序
POPAX
INCCX
SUBD3,1
JNZA2
POPD3
ADDD3,2
POPCX
INCDX
DECCX
JNEA1
INCA1
CMPAL,5
JNEA0
POPDX
POPCX
POPBX
POPAX
RET
SANNEDP
ZHENGPROCNEAR
PUSHAX
PUSHBX
PUSHCX
PUSHDX
MOVAH,0FH;取当前显示模式
INT10H
MOVAH,0
MOVAL,3
INT10H
MOVCX,1;字符数量
MOVAH,2;置光标位置
MOVDH,5;5行开始
MOVDL,25;25列开始
INT10H
;*****光标向下动********
LINE:
MOVAH,2
INT10H
MOVAL,2;字符代码
MOVAH,9;将字符和属性写到光标位置处
MOVBL,0E0H;字符黄色
INT10H
INCDH;行增加
CMPDH,20;20行
JNELINE
JMPLINE1
;****光标向右动*****
LINE1:
MOVAH,2
INT10H
MOVAL,2
MOVAH,9
MOVBL,0E0H;字符为黄色
INT10H
INCDL;列增加
CMPDL,55;55列
JNELINE1
JMPLINE2
;*****光标向上动*********
LINE2:
MOVAH,2
INT10H
MOVAL,2
MOVAH,9
MOVBL,0E0H;字符黄色
INT10H
DECDH;行减少
CMPDH,5;5行
JNELINE2
JMPLINE3
;***光标向左动***
LINE3:
MOVAH,2
INT10H
MOVAL,2
MOVAH,9
MOVBL,0E0H;字符为黄色
INT10H
DECDL;列减少
CMPDL,25;25列
JNELINE3
L00:
MOVAH,7;向下滚屏
MOVAL,14;下滚行数
MOVBH,20H;绿色,填空白行的属性
MOVCH,6;窗口左上角行号
MOVCL,26;窗口左上角列号
MOVDH,19;窗口右下角行号
MOVDL,54;窗口右下角列号
INT10H
;*****时间控制*****
L01:
MOVAH,0
INT1AH;时钟管理
CMPDL,10
JNZL01
L1:
MOVAH,6;向上滚屏
MOVAL,14
MOVBH,0F0H;白色
MOVCH,6
MOVCL,26
MOVDH,19
MOVDL,54
INT10H
L2:
MOVAH,0
INT1AH;时钟管理
CMPDL,15
JNZL2
L3:
MOVAH,7;向下滚屏
MOVAL,14
MOVBH,40H;红色
MOVCH,6
MOVCL,26
MOVDH,19
MOVDL,54
INT10H
L4:
MOVAH,0
INT1AH
CMPDL,30
JNZL4
L5:
MOVAH,6;向上滚屏
MOVAL,14
MOVBH,0D0H;品红
MOVCH,6
MOVCL,26
MOVDH,19
MOVDL,54
INT10H
L004:
MOVAH,0
INT1AH;时钟管理
CMPDL,10
JNZL004
L005:
MOVAH,7;向下滚屏
MOVAL,14
MOVBH,30H;青
MOVCH,6
MOVCL,26
MOVDH,19
MOVDL,54
INT10H
;****时间控制****
MOVAH,2;置光标位置
MOVDH,23;行号
MOVDL,0;列号
INT10H
POPDX
POPCX
POPBX
POPAX
RET
ZHENGEDNP
YUANPROCNEAR
PUSHAX
PUSHBX
PUSHCX
PUSHDX
MOVAX,0004H
INT10H
MOVBX,00
PUSHBX
MOVAH,0BH
INT10H
MOVBX,0003H
MOVAH,0BH
INT10H
MOVBL,TOTAL
MOVSI,OFFSETDOTYX
MOVCH,0
MOVDH,CH
PLO:
MOVDL,[SI]
MOVCL,[SI+1]
MOVAL,02H
MOVAH,0CH
INT10H
INCSI
INCSI
DECBL
JNZPLO
MOVBX,50
POPBX
POPDX
POPCX
POPDX
POPAX
RET
YUANENDP
CSEGENDS
ENDSTART