汇编 子程序设计 阶乘

汇编 子程序设计 阶乘

ID:1253429

大小:1.13 MB

页数:12页

时间:2017-11-09

汇编 子程序设计 阶乘_第1页
汇编 子程序设计 阶乘_第2页
汇编 子程序设计 阶乘_第3页
汇编 子程序设计 阶乘_第4页
汇编 子程序设计 阶乘_第5页
资源描述:

《汇编 子程序设计 阶乘》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、昆明理工大学信息工程与自动化学院学生实验报告(2010—2011学年第一学期)课程名称:汇编与微机接口开课实验室:2010年12月10日年级、专业、班计科083学号姓名成绩 实验项目名称子程序设计指导教师教师评语 教师签名:年月日一.实验目的1.掌握子程序设计的方法;2.输入并汇编求N!程序;3.观察并记录运行结果。二.子程序设计方法1.过程定义伪操作过程调用伪操作用在过程(子程序)的前后,使整个过程形成清晰的、具有特定功能的代码块,其格式为:procedurenamePROCAttribute:procedure

2、nameENDP2.子程序调用和返回3.保护与恢复寄存器4.子程序的参数传递12(1)通过寄存器传送参数(2)如果过程和调用程序在同一源文件中,则过程可直接访问模块中的变量(3)通过地址表传送参数地址(4)通过堆栈传送参数或参数地址(5)多个模块之间的参数传递问题5.增强功能的过程定义伪操作三.输入并汇编求N!程序1.N!程序描述在子程序嵌套的情况下,如果一个子程序调用的子程序就是它自身,这样的子程序称为递归子程序。显然递归调用是子程序嵌套的一种特殊情况。使用递归算法往往能设计出效率较高的程序。递归调用最简单例子是

3、计算阶乘。求N!本身是一个子程序,由于N!是N和(N-1)!的乘积,所以为求(N-1)!必须递归调用求N!的子程序,只是每次调用所使用的参数不同而已。2.N!程序流程图12123.N!源程序STACKSGSEGMENTSTACK'S';定义堆栈DW128DUP('ST')STACKSGENDSDATASEGMENTN_VALDW4;定义N值RESULTDW?;结果DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSGFRAMESTRUC;定义帧结构SAV_BPDW?;

4、保存BP值SAV_CS_IPDW2DUP(?);保存返回地址NDW?;当前N值RESULT_ADDRDW?;结果地址FRAMEENDSMAINPROCFARMOVAX,DATAMOVDS,AXLEABX,RESULTPUSHBX;结果地址入栈PUSHN_VAL;N值入栈CALLFARPTRFACT;调用递归子程序MOVCL,10MOVAX,RESULTDIVCL;把阶乘结果转换成十进制数ORAX,3030H;转换成ASCII码MOVDL,ALMOVAH,2;显示结果的高位INT21HMOVAX,RESULTDIVC

5、L;把阶乘结果转换成十进制数ORAX,3030H;转换成ASCII码MOVDL,AHMOVAH,2;显示结果的低位INT21HR1:MOVAX,4C00H12INT21HMAINENDPFACTPROCFAR;N!递归子程序PUSHBP;保存BP值MOVBP,SP;BP指向帧基地址PUSHBXPUSHAXMOVBX,[BP].RESULT_ADDRMOVAX,[BP].N;取帧中N值CMPAX,0JEDONE;N=0时退出子程序嵌套PUSHBX;为下一次调用压入结果地址DECAXPUSHAX;为下一次调用压入(N-

6、1)值CALLFARPTRFACTR2:MOVBX,[BP].RESULT_ADDRMOVAX,[BX];取中间结果(N-1)!MUL[BP].N;N*(N-1)!JMPSHORTRETURNDONE:MOVAX,1;0!=1RETURN:MOV[BX],AX;存中间结果POPAXPOPBXPOPBPRET4FACTENDPCODEENDSENDMAIN四.实验记录和运行结果1.用MASM程序产生OBJ文件12使用jiecheng.asm作为输入文件,通过汇编程序MASM程序产生二进制的目标文件JIECHENG.O

7、BJ。2.用LINK程序产生EXE文件汇编程序已产生出二进制的目标文件JIECHENG.OBJ,但JIECHENG.OBJ文件不是一个可执行文件,还必须使用连接程序(LINK)把JIECHENG.OBJ文件转换为可执行的JIECHENG.EXE文件。3.在DOS环境中执行N!程序输入:D:huibian>jiecheng.exe运行结果如图:124的阶乘为:24五.使用DEBUG程序跟踪观察程序的执行过程1.使用U命令查看JIECHENG.EXE可执行文件的反汇编代码122.使用T命令查看程序运行的中间步骤(1)

8、MOVDS,AX,把AX值传送到DS中(2)把结果RESULT的有效地址传送给寄存器BX(3)结果地址入栈(4)N值入栈12(5)递归调用子程序(6)BP入栈,保存BP值(7)BP指向帧基地址(8)BX入栈,保存BX值(9)BX入栈,保存BX值12(10)取帧中N值   (11)比较N值是否为0(12)N=0时退出子程序嵌套(13)为下一次调用压入结果地址(

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。