汇编子程序设计阶乘

汇编子程序设计阶乘

ID:30030759

大小:177.50 KB

页数:4页

时间:2018-12-26

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

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

1、1.N!程序描述在子程序嵌套的情况下,如果一个子程序调用的子程序就是它自身,这样的子程序称为递归子程序。显然递归调用是子程序嵌套的一种特殊情况。使用递归算法往往能设计出效率较高的程序。递归调用最简单例子是计算阶乘。求N!本身是一个子程序,由于N!是N和(N-1)!的乘积,所以为求(N-1)!必须递归调用求N!的子程序,只是每次调用所使用的参数不同而已。2.N!程序流程图443.N!源程序STACKSGSEGMENTSTACK'S';定义堆栈DW128DUP('ST')STACKSGENDSDATASEGMENTN_

2、VALDW4;定义N值RESULTDW?;结果DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSGFRAMESTRUC;定义帧结构SAV_BPDW?;保存BP值SAV_CS_IPDW2DUP(?);保存返回地址NDW?;当前N值RESULT_ADDRDW?;结果地址FRAMEENDSMAINPROCFARMOVAX,DATAMOVDS,AXLEABX,RESULTPUSHBX;结果地址入栈PUSHN_VAL;N值入栈CALLFARPTRFACT;调用递归子程序MOV

3、CL,10MOVAX,RESULTDIVCL;把阶乘结果转换成十进制数ORAX,3030H;转换成ASCII码MOVDL,ALMOVAH,2;显示结果的高位INT21HMOVAX,RESULTDIVCL;把阶乘结果转换成十进制数ORAX,3030H;转换成ASCII码MOVDL,AHMOVAH,2;显示结果的低位INT21HR1:MOVAX,4C00H4INT21HMAINENDPFACTPROCFAR;N!递归子程序PUSHBP;保存BP值MOVBP,SP;BP指向帧基地址PUSHBXPUSHAXMOVBX,[B

4、P].RESULT_ADDRMOVAX,[BP].N;取帧中N值CMPAX,0JEDONE;N=0时退出子程序嵌套PUSHBX;为下一次调用压入结果地址DECAXPUSHAX;为下一次调用压入(N-1)值CALLFARPTRFACTR2:MOVBX,[BP].RESULT_ADDRMOVAX,[BX];取中间结果(N-1)!MUL[BP].N;N*(N-1)!JMPSHORTRETURNDONE:MOVAX,1;0!=1RETURN:MOV[BX],AX;存中间结果POPAXPOPBXPOPBPRET4FACTEN

5、DPCODEENDSENDMAIN4

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

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

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