《第五次汇编语言实验报告-子程序设计(共7页).doc》由会员分享,可在线阅读,更多相关《第五次汇编语言实验报告-子程序设计(共7页).doc(7页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上汇 编 语 言 实 验 报 告Assembly Language Programming LabReports_班级: 姓名: 学号:实验日期:学院: 专业:实验顺序: 原创:_ 实验名称:子程序设计 实验分数:_ 考评日期:_ 指导教师: _一 实验目的1、 掌握过程调用伪指令: PROC,ENDP,NEAR和FAR。2、 掌握 CALL,RET,RET n。理解子程序调用时现场保护和恢复现场的意义。3、 掌握子程序传递参数的三种方式,寄存器,内存单元,堆栈。4、 培养在复杂的程序设计时,采用模块化结构划分功能,分解程序的意识。5、 对子函数的嵌套调用和递归调用有一
2、定的理解。_二 实验环境操作系统:windows 8编译程序:masm 5.0_三 实验原理1. 子程序递归,堆栈传参2. 寄存器、存储器传参_四 实验步骤及结果分析1.子程序递归调用(求阶乘) 用堆栈进行传递参数 高级语言函数调用过程Fac(n) = fac(n-1)*n n0Fac(n)= 1 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)*4 Fac(n-1)*nFac(
3、n-1)*nFac(n-1)*nFac(n-1)*nFac(n-1)*nInt fac(int n)int f;If (nX2?交换X1、X2的值否是bxx1-x2axbx子程序3:Ax/10余数入栈,inc cxAx=0?否是,进入循环出栈转换为ASCII码输出结束源代码:data segmentx dw ?,?cc1 db 0ah,0dh,x1=$cc2 db 0ah,0dh,x2=$cc3 db 0ah,0dh,x1-x2=$data endscode segmentassume cs:code,ds:datastart:mov ax,datamov ds,axmain proc far
4、mov cx,0mov bx,0mov si,0mov dx,offset cc1mov ah,9int 21hcall surb1mov dx,offset cc2mov ah,9int 21hmov bx,0mov cx,0mov si,2call surb1call surb2mov dx,offset cc3mov ah,9int 21hcall surb3jmp mainout1:mov ah,4chint 21hmain endpsurb1 proc nearmov ah,1int 21hcmp al,0dhjz exitcmp al,0jl out1cmp al,9jg out1
5、and ax,000fhxchg ax,bxmov cx,10mul cxadd bx,axjmp surb1exit:cmp cx,0jz out1mov xsi,bxretsurb1 endpsurb2 proc nearmov bx,xcmp bx,x+2jae jet1xchg bx,x+2jet1:sub bx,x+2retsurb2 endpsurb3 proc nearmov ax,bxmov cx,0mov bx,10let1:mov dx,0inc cxidiv bxpush dxcmp ax,0jnz let1let2:pop axadd ax,0030hmov dl,almov ah,2int 21hloop let2ret surb3 endpcode endsend start运行结果:_五 实验心得疑问建议 通过本次实验,学习了子程序的调用、嵌套和递归以及三种传参方式,收获很多。并且进一步学习了使用debug。专心-专注-专业