




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
本文格式为Word版,下载可任意编辑——工学汇编语言课程设计10000字获奖报告摘要中英文MASM有宏处理功能,而ASM没有宏处理功能,因此,MASM比ASM的功能强大,但MASM需要占据较大的内存空间,当内存空间较小时(如64KB),只能使用ASM。2、目标程序的连接过程:
汇编后产生的目标程序(OBJ文件)并不是可执行程序文件(EXE文件),还不能直接运行,它必需通过连接程序(LINK)连接成一个可执行程序后才能运行。连接程序进行连接时,其输入有两个部分:一是目标文件(.OBJ),目标文件可以是一个也可以是多个,可以是汇编语言经汇编后产生的目标文件,也可以是高级语言(例如C语言)经编译后产生的目标文件;另一是库文件(.LIB),库文件是系统中已经建立的,主要是为高级语言提供的。连接后输出两个文件,一是扩展名为.EXE的可执行文件,另一个是扩展名为.MAP的内存分派文件,它是连接程序的列表文件,又称为连接映像(LinkMap),它给出每个段在存储器中的分派状况,该文件可有可无。连接程序给出的“无堆栈段的警告性错误〞并不影响程序的运行。所以,到此为止,连接过程已经终止,可以在操作系统下执行该.EXE程序了。3、汇编语言和DOS操作系统的接口:
编写的汇编语言源程序是在DOS环境下运行时,必需了解汇编语言是如何同DOS操作系统接口的。
用编辑程序把源程序输入到机器中,用汇编程序把它转换为目标程序,用连接程序对其进行连接和定位时,操作系统为每一个用户程序建立了一个程序段前缀区PSP,其长度为256个字节,主要用于存放所要执行程序的有关信息,同时也提供了程序和操作系统的接口。
操作系统在程序段前缀的开始处(偏移地址0000H)安排了一条INT20H软中断指令。INT20H中断服务程序由DOS提供,执行该服务程序后,控制就转移到DOS,即返回到DOS管理的状态。因此,用户在组织程序时,必需使程序执行完后能去执行存放于PSP开始处的INT20H指令,这样便返回到DOS,否则就无法继续键入命令和程序。
DOS在建立了程序段前缀区PSP之后,将要执行的程序从磁盘装入内存。在定位程序时,DOS将代码段置于PSP下方,代码段之后是数据段,最终放置堆栈段。内存分派好之后,DOS就设置段寄放器DS和ES的值,以使它们指向PSP的开始处,即INT20H的存放地址,同时将CS设置为PSP后面代码段的段地址,IP设置为指向代码段中第一条要执行的指令位置,把SS设置为指向堆栈的段地址,让SP指向堆栈段的栈底,然后系统开始执行用户程序。为了保证用户程序执行完后能返回到DOS状态,可使用如下两种方法。(一)标准方法
首先将用户程序的主程序定义成一个FAR过程,其最终一条指令为RET。然后在代码段的主程序(即FAR过程)的开始部分用如下三条指令将PSP中INT20H指令的段地址及偏移地址压入堆栈:
PUSHDS;保护PSP段地址MOVAX,0;保护偏移地址0PUSHAX
这样,当程序执行到主程序的最终一条指令RET时,由于该过程具有FAR属性,故存在堆栈内的两个字就分别弹出到CS和IP,从而
执行INT20H指令,使控制返回到DOS状态。返回DOS的标志就是程序运行完后出现一个DOS的标识符,如C:\\>。(二)非标准方法
也可在用户的程序中不定义过程段,只在代码段终止之前(即CODEENDS之前)增加两条语句:
MOVAH,4CHINT21H
则程序执行完后也会自动返回DOS状态。
此外,由于开始执行用户程序时,DS并不设置在用户的数据段的起始处,ES同样也不设置在用户的附加段起始处,因而在程序开始处使用以下方法重新装填DS和ES的值使其指向用户的数据段:
MOVAX,段名
MOV段寄放器名,AX;段寄放器名可以是DS、ES、SS之一
1.4课程设计的意义
在调试程序时,要注意每一个小细节,如解释忘加分号,指令书写错误等问题,有时会运行不了,要细心检查错误。另外,由于动画为全屏显示,无法截图,只好照下来进行截图,图片可能会不太明了。通过改变指令,也可以改变汽车和小鸟开始的位置。
这次课程设计让我们稳定和加深了对微机原理与接口技术的理解,提高综合运用本课程所学知识的能力。通过实际分析设计,调试程序,也把握了微机原理与接口技术的基本规程和各个指令的使用。
2.程序设计方案及流程图
2.1主程序流程图
开始
输入圆柱体的底面半径和高按2*π*r*r+2*π*r*h计算圆柱体表面积输出圆柱体表面积按π*r*r*h计算圆柱体体积按4*r*r+4*√2*r*h计算长方体表面积输出圆柱体体积终止2.2总体设计
本课程设计要求编写一个完整的程序以实现求一个圆柱体的表输出长方体表面积面积和体积以及该圆柱体内接最大长方体的表面积和体积。该程序要
按求先显示一些提醒信息,然后按提醒信息的要求输入圆柱体的底面半2*r*r*h计算长方体体积径和高,通过求圆柱体的表面积及体积公式:表面积=2*π*r*r+2*π*r*h、体积=π*r*r*h输出长方体体积来编写计算的程序的,同时通过判断得到当圆柱体的内接长方体底面为正方体时,内接长方体的表面积和体积最大,此时通过分析所得的公式:表面积=4*r*r+4*√2*r*h、体积=2*r*r*h来编写计算的程序的。本程序中由于不便利编写进行浮点数的运算的程序,所以一种方法是把π看成是314,把√2看成是141这样到最终再通过除以100保存两位小数,程序编好以后通过运行调试改正错误,直到所有的错误都改好为止,最终输出所要求的提醒信息以及结果。
2.3详细设计
这次课程设计的设计思想是在熟练把握汇编程序的设计方法的基础上,编写出计算圆柱体表面积和体积及其最大内接长方体的表
面积和体积的代码,具体步骤如下:
首先定义Pi=314,root=141,之所以这样定义,是为了便利最终输出的时候能保存两位小数,然后定义除数decimal=10,定义这个变量是为了将结果从低位到高位保存到栈中,从而输出的时候能够正好以从高位到低位的顺序输出,再定义两个变量,一个是底面半径r,另一个是高h,以便输入的底面半径和高保存在定义的这两个寄放器中,从而可以随时使用这两个变量的值,最终定义一个计数的变量i来计数,其初值为0。
上述定义完毕以后再计算圆柱体的表面积和体积以及重大内接长方体的表面积及体积,由于计算这四个的方法和步骤大致一致,所以这里只介绍计算圆柱体的表面积的方法和步骤,利用计算圆柱体表面积的公式:2*π*r*r+2*π*r*h可知,首先计算π*r*r,先用moval,r指令将变量r的值放入al寄放器,然后利用mulr指令实现al寄放器的值与半径相乘,结果放入寄放器ax中,相当于实现r*r,再用mulPi指令,使ax寄放器的与Pi相乘,结果的高十六位放入dx寄放器,低十六位放入ax寄放器,然后利用movcx,ax和mvbx,dx将方才计算所得结果保存在bx,cx寄放器中,至此π*r*r计算完毕,再计算π*r*h,先用moval,h指令将变量h的值放入al寄放器,然后利用mulr指令实现al寄放器的值与半径相乘,结果放入寄放器ax中,相当于实现h*r,再用mulPi指令,使ax寄放器的与Pi相乘,结果的高十六位放入dx寄放器,低十六位放入ax寄放器,至此π*r*r计算完毕。然后将两部分计算的结果相加,即π*r*r+π*r*h,由于π*r*r的结果存放在bx,cx寄放器中,π*r*h
⑩Debug支持所有形式的寄放器间接寻址命令。例如:ADDBX,74[BP+3][SI-5]POP[BX+DI](四)反汇编命令U
格式(1):U地址
该命令从指定的地址开始,反汇编32个字节。若略去指定地址,则以上一个U命令反汇编的最终一条指令地址的下一条指令地址作为起始地址;若没有用过U命令,则以由Debug初始化的段寄放器的值作段地址,以100作为地址偏移量。
格式(2):U范围这种格式的命令,可以对指定范围的内存单元进行反汇编,范围可以由起始地址、终止地址(只能包含地址偏移量)或起始地址及长度来指定。其命令格式如:
U04BA:1000108两者是等效的。
3.3Debug调试的主要过程
由于调试圆柱体的表面积过程与其他三个计算圆柱体体积、计算最大内接长方体表面积和体积过程类似,因此这里只介绍调试圆柱体表面积的过程。
(一)输入圆柱体的底面半径和高
U04BA:0100L7
(二)计算圆柱体的表面积
(三)将计算的结果从低位至高位压入栈中,通过t一步一步调试将其压入栈中。
(三)将小数点压入栈中部分代码
(四)将栈中元素由高位至低位输出到显示器上
4.试验后的总结与收获
4.1设计中遇到的问题
在此次课程设计的过程中,我遇到了好多的问题,主要有以下一些:
(1)在编程初期首先遇到的是结构化程序的结构很重要,刚开编的时候没有写流程图和算法,结果程序可读性很差,也很难查错,从中了解到写程序需要一步步来,不能操之过急。
(2)在编程中时常出现规律错误。由于这个错误在编译中不会被发现,所以很难找出,要对程序一步一步的检查才行,可以用对子程序稍加修改后单独运行来查错。这表达我经历的程序不够多,需要在这方面加把劲。
4.2问题的解决方法
此次课程设计中遇到了好多问题,在指导老师的帮助下,加上我自己的努力及同学朋友的全力帮助下,我的这些问题都已得到完满的解决。如怎样通过调试来检查出不简单发现的错误的问题,我通过可是听老师的讲解,课下和同学探讨,最终解决了这个问题。
4.3设计后的感想和收获
通过这一个学期的汇编语言的学习,我对汇编的认识有了更深理解,切实的提高了我的编程能力。通过这次课程设计的试验,我对学过的知识有了更深层次的运用,能用汇编语言熟练地运用顺序、选择、循环三大结构,进一步把握了各个指令的功能,特别是转向指令,把握了子程序的定义及调用,以及正确地运用DEBUG指令。在整个程序的编写中,调试占了很大部分的时间。要想写好汇编语言的程序,必需认真对待代码的每一个细节,还必需熟练的把握debug命令,这对程序的调试是十分重要的。通过这次实际动手能力的培养,我进一步熟悉了汇编语言的结构和使用方法,基本达到了能独立阅读、编制和调试一定规模的汇
编语言程序的水平。
总之,我认为我本次课程设计基本达到了要求,所编程序的功能也基本完善。当然本程序也存在一定不足,就是不能够输入更大的圆柱体底面半径和高的值来计算结果,当然我也想出了一种方法来加以改进,就是把圆周率设计为3和14来处理。对于3而言,将其代入公式求出其结果,对于14而言也代入公式求结果,然后对此结果两次除以十算出其两位小数,再将剩余的结果即整数部分与上部分3运算出来的结果相加后再输出,对于根号二也是如此,这样的话圆柱体底面半径和高就可以输入比较大的值了。
5.附录(详细源代码)
datasegment
i1db0dh,0ah,'Pleaseinputtheradiusofcylinder:$'i2db0dh,0ah,'Thesurfaceareaofcylinder:$'i3db0dh,0ah,'Thevolumeofcylinder:$'
i4db0dh,0ah,'Thesurfaceareaofrectangularparallelepiped:$'i5db0dh,0ah,'Thevolumeofrectangularparallelepiped:$'i6db0dh,0ah,'Pleaseinputtheheightofcylinder:$'idb0;计数rdb?;半径hdb?;高
decimaldw10;作为除数10以算出每一位的值Pidw314
;圆周率;根号2
rootdw141
commondw100dataendsstacksegmentDB200DUP(0)stackendscodesegment
assumeds:data,ss:stack,cs:codemain:movax,datamovds,ax
leadx,i1;显示输入圆柱体底面半径的提醒信息movah,9int21hmovah,1
;输入圆柱体的半径
int21hsubah,ahsubax,30h
movr,al;把圆柱体的半径放到定义的变量r中movah,2movdx,13int21hmovax,data
;输出回车
movds,ax
leadx,i6;显示输入圆柱体高的提醒信息movah,9int21hmovah,1
;输入圆柱体的高
int21hsubah,ahsubax,30hmovh,almovah,2movdx,13int21hsubax,axsubcx,cx
;输出回车
subdx,dx;将各寄放器清零moval,rmulrmulPimovcx,axmovbx,dxsubax,axmoval,h
;按计算圆柱体表面积的公式编写其代码
mulrmulPiaddax,cxadcdx,bxmovcx,axmovbx,dxaddax,cxadcdx,bxsubcx,cx
pushax;将计算后表面积的结果放入ax寄放器leadx,i2;显示圆柱体的表面积movah,9int21hsubax,ax
next0:;将表面积的结果除以十,将其最低位放入栈中,当计算到其次
位后跳转到下一程序将小数点压入栈中,以保证输出结果保存两位小数
popaxcwddivdecimalpushdxinci
cmpi,2jenext1cmpax,0jznext2pushax
jmpnext0next1:subdx,dxmovdx,-2incipushdxpushaxjmpnext0
next2:;将方才压入栈中的结果依次出栈,从最高位开始输出,每输出一个数,
将其加48以转化为ascll码输出字符
subax,axsubdx,dxpopdxadddx,30hmovah,2int21hdeci
cmpi,0jznext3jmpnext2next3:movah,2movdx,13int21h
subax,ax;按求圆柱体体积的公式编写其代码subcx,cx
;输出回车
subdx,dxmoval,rmulrmulPimovcx,axsubax,axmoval,hcbwmulcxpushax
leadx,i3;显示圆柱体的体积movah,9int21h
subax,ax
next4:;将体积的结果除以十,将其最低位放入栈中,当计算到其次位
后跳转到下一程序将小数点压入栈中,以保证输出结果保存两位小数
popaxcwddivdecimalpushdxincicmpi,2jenext5cmpax,0jznext6pushax
jmpnext4next5:subdx,dxmovdx,-2incipushdxpushaxjmpnext4
next6:;将方才压入栈中的结果依次出栈,从最高位开始输出,每输出一个数,
将其加48以转化为ascll码输出字符
subax,axsubdx,dxpopdxadddx,30hmovah,2int21hdecicmpi,0jznext7jmpnext6next7:movah,2movdx,13int21hsubax,axsubcx,cx
;输出回车
subdx,dxmoval,rmulrcwd
;按求长方体表面积的公式编写其代码
movcx,axmovbx,dxsubax,axmoval,hmulrmulrootaddax,cxadcdx,bxmovcx,axmovbx,dxaddax,cxadcdx,bxmovcx,axmovbx,dxaddax,cxadcdx,bxsubcx,cxpushax
leadx,i4;显示最大内接长方体的表面积movah,9int21hsubax,ax
next8:;将体积的结果除以十,将其最低位放入栈中,当计算到其次位
后跳转到下一程序将小数点压入栈中,以保证输出结果保存两位小数
popaxcwddivdecimalpushdxincicmpi,2jenext9cmpax,0jznext10pushax
jmpnext8next9:subdx,dxmovdx,-2incipushdxpushaxjmpnext8
next10:;将方才压入栈中的结果依次出栈,从最高位开始输出,每输出一个数,
将其加48以转化为ascll码输出字符
subax,axsubdx,dxpopdxadddx,30hmovah
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 首都师范大学科德学院《企业管理》2023-2024学年第二学期期末试卷
- 香港科技大学(广州)《兽医影像诊断学》2023-2024学年第一学期期末试卷
- 驻马店职业技术学院《环境即兴编舞训练》2023-2024学年第一学期期末试卷
- 鹤壁汽车工程职业学院《动物传染病学》2023-2024学年第二学期期末试卷
- 黄冈科技职业学院《单片机原理及应用》2023-2024学年第二学期期末试卷
- 黄河交通学院《建筑施工安全技术》2023-2024学年第二学期期末试卷
- 黄淮学院《应用统计学导论》2023-2024学年第一学期期末试卷
- 黑龙江三江美术职业学院《英语七》2023-2024学年第二学期期末试卷
- 黑龙江司法警官职业学院《中医养生保健与“治未病”》2023-2024学年第一学期期末试卷
- 黑龙江商业职业学院《消防工程施工技术与组织》2023-2024学年第二学期期末试卷
- 装配式建筑深化设计-1.2.3 装配式建筑深化设计拆分原47课件讲解
- 电力工程施工组织措施方案
- T∕HGJ 12404-2021 仪表维修车间设计标准
- 【MOOC】园林植物应用设计-北京林业大学 中国大学慕课MOOC答案
- 继续教育《生态文明建设的理论与实践》考试试题及答案
- 组织部2024年双拥工作计划
- 2024-2025学年人教新目标英语八年级下册期末综合检测卷(含答案)
- 2023年新疆兵团事业单位开展招聘考试真题
- 2024年浪潮数字企业技术有限公司社会招聘(105人)笔试核心备考题库及答案解析
- 第47届世界技能大赛江苏省选拔赛竞赛技术文件-混凝土建筑项目
- 防溺水应急救援培训
评论
0/150
提交评论