资源描述:
《第五次汇编语言实验报告-子程序设计.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、汇编语言实验报告AssemblyLanguageProgrammingLab Reports______________________________________________________________________________班级:姓名:学号:实验日期:学院:专业:实验顺序:原创:___实验名称:子程序设计实验分数:_______考评日期:________指导教师:________________________________________________________________________
2、______一.实验目的1、掌握过程调用伪指令:PROC,ENDP,NEAR和FAR。2、掌握CALL,RET,RETn。理解子程序调用时现场保护和恢复现场的意义。3、掌握子程序传递参数的三种方式,寄存器,内存单元,堆栈。4、培养在复杂的程序设计时,采用模块化结构划分功能,分解程序的意识。5、对子函数的嵌套调用和递归调用有一定的理解。______________________________________________________________________________二.实验环境操作系统:windows8编译
3、程序:masm5.0______________________________________________________________________________三.实验原理1.子程序递归,堆栈传参2.寄存器、存储器传参______________________________________________________________________________四.实验步骤及结果分析1.子程序递归调用(求阶乘)用堆栈进行传递参数高级语言函数调用过程Fac(n)=fac(n-1)*nn>0Fac(n)=1
4、n=0高级语言递归调用,形参中的内容在这层递归调用结束后才会被释放实参5实参4实参3实参2实参1形参n=5形参n=4形参n=3形参n=2形参n=1Fac(0)*1Fac(4)*5Fac(2)*3Fac(1)*2Fac(3)*4Fac(n-1)*nFac(n-1)*nFac(n-1)*nFac(n-1)*nFac(n-1)*nIntfac(intn){intf;If(n<=0)F==1;Elsef=fac(n-1)*n;}在汇编语言中子程序没有形参和实参,直接更改的是给定寄存器或者内存单元或者栈中的数据,需要自己开辟类似形参的空间
5、去保存相应的数据,在这里最好的办法就是用栈。源代码:stacksegmentstackdb100hdup(?)stackendsdatasegmentresultdw?dataendscodesegmentmainprocfarassumecs:code,ds:datastart:movax,datamovds,axmovax,5pushaxcallfactmovresult,axmovah,4chint21hmainendpfactprocnearpushbpmovbp,spmovax,[bp+4]cmpax,0jaresul
6、t1movax,1jmpresult2result1:decaxpushaxcallfactmovbx,[bp+4]mulbxresult2:popbpret2factendpcodeendsendstart实验结果:2.实现两个输入的十进制数相减法,相乘,相除,三者任选一个。给出设计思路,各个子程序必要时给出程序框图,给出代码,正确运行结果。两数相减设计思路:1.主程序:调用三个子程序。主程序用JMP构成循环,可以做多次计算。2.子程序surb1:功能是键盘输入,数字键ASCII码→十进制数(该十进制数保存为二进制数),用存储
7、单元x传参。3.子程序surb2:功能为两数相减,以寄存器bx传参4.子程序surb3:功能为显示十进制数。先将二进制数→十进制数。将传参寄存器bx中的二进制数用除以10取余数的方法转换为十进制数,再将余数加30h变为十进制数的ASCII码,然后显示。子程序1:键盘输入存储单元x传参Cx=0?Exit是否回车是Out1小于0or大于9?否是以二进制保存否开始子程序2:X1>X2?交换X1、X2的值否是bx←x1-x2ax←bx子程序3:Ax/10余数入栈,inccxAx=0?否是,进入循环出栈转换为ASCII码输出结束源代码:d
8、atasegmentxdw?,?cc1db0ah,0dh,'x1=$'cc2db0ah,0dh,'x2=$'cc3db0ah,0dh,'x1-x2=$'dataendscodesegmentassumecs:code,ds:datastart:movax,dat