下载此文档

汇编--N阶乘.doc


文档分类:汽车/机械/制造 | 页数:约12页 举报非法文档有奖
1/12
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/12 下载此文档
文档列表 文档介绍
-1-一、;;。二、实验原理及基本技术路线图(方框原理图)一个子程序作为调用程序去调用另一子程序,这种关系称为子程序嵌套。由于子程序嵌套对堆栈的使用很频繁,因此还要确保堆栈有足够空间,并要注意堆栈的正确状态,这包括CALL、RET、RETN、PUSH、POP、INT、IRET等与堆栈操作有关指令的正确使用。在子程序嵌套的情况下,如果一个子程序调用的子程序就是它自身,这样的子程序称为递归子程序。显然递归调用是子程序嵌套的一种特殊情况。使用递归算法往往能设计出效率较高的程序。设计递归子程序时,必须保证每一次后继调用都不能破坏它上一次调用时所生成的参数和中间结果,并且该过程不会修改它本身。这就意味着当使用汇编语言设计递归子程序时,必须考虑每一次调用都应该把它的参数、寄存器和所有的中间结果保存到不同的存储区域。最好的办法是利用堆栈来存储这些信息,一次调用所保存的信息称为一帧。递归调用要使用大量的堆栈空间,一定要保证堆栈足够大,而且也要保证堆栈的正确使用,避免死机等不可预料的情况发生。求N!算法流程图:-2-主程序结果地址入栈N入栈调用FACT求N!返回FACT子程序保存BP内容,建立帧首地址保存寄存器内容取结果地址取NN=0?结果地址入栈N-1入栈调用FACT求N-1取(N-1)!N!=N*(N-1)N!存入结果单恢复寄存器内容返回N!=1三、所用仪器、材料(设备名称、型号、规格等):::记事本四、实验方法、:\assembly\目录下;-3-(C:\assembly\MASM5)添加到Path环境变量中;:\assembly\,,输入汇编程序代码;,将当前目录切换到C:\assembly\,然后输入命令:[Enter],来汇编程序,根据汇编结果查看程序代码是否有语法错误,如有,则更正保存后重新汇编,直至没有错误为止,;:[Enter],观察输出结果,如果没有错误,;:[Enter],调试程序,并记录运行过程;。五、实验过程原始记录(数据、图表、计算等):\assembly\MASM5目录添加到Path环境变量中:,输入汇编程序代码:-4-程序源码:STACKSGSEGMENTSTACK'S';定义堆栈DW128DUP('ST')STACKSGENDSDATASEGMENTN_VALDW3;定义N值RESULTDW?;结果DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSGFRAMESTRUC;定义帧结构SAV_BPDW?;保存BP值SAV_CS_IPDW2DUP(?);保存返回地址NDW?;当前N值RESULT_ADDRDW?;结果地址FRAMEENDSMAINPROCFAR-5-MOVAX,DATAMOVDS,AXLEABX,RESULTPUSHBX;结果地址入栈PUSHN_VAL;N值入栈CALLFARPTRFACT;调用递归子程序R1:MOVAX,4C00HINT21HMAINENDPFACTPROCFAR;N!递归子程序PUSHBP;保存BP值MOVBP,SP;BP指向帧基地址PUSHBXPUSHAXMOVBX,[BP].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;存中间结果POPAX-6-:::(1)结果地址入栈-7-(2)N值入栈,并调用递归子程序(3)保存BP值,BP指向帧基地址,准备取N值(4)取到N值后判断是否等于零,显然3不等于零,准备为下一次调用压入结果地址-8-(5)为下一次调用压入结果地址和N-1的

汇编--N阶乘 来自淘豆网m.daumloan.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数12
  • 收藏数0 收藏
  • 顶次数0
  • 上传人825790901
  • 文件大小0 KB
  • 时间2016-01-31