关键词不能为空

当前您在: 主页 > 高中公式大全 >

均线粘合共振选股公式汇编--N阶乘

作者:高考题库网
来源:https://www.bjmy2z.cn/gaokao
2020-10-25 14:30
tags:n的阶乘公式

世界最长的河流-中国历史

2020年10月25日发(作者:危德馨)
.
一、实验目的
1. 掌握子程序的设计方法;
2. 掌握递归子程序的设计思想;
3. 体会堆栈操作在子程序嵌套中的重要作用。
二、实验原理及基本技术路线图(方框原理图)
一个子程序作为调用程序去调用另一子程序, 这种关系称为子程序嵌套。由于子程
序嵌套对堆栈的使用很频繁,因此还要确保堆栈有足够空间,并要注 意堆栈的正确状态,
这包括CALL、RET、RET N、PUSH、POP、INT、IRET等与堆栈操作有关指令的正确
使用。
在子程序嵌套 的情况下,如果一个子程序调用的子程序就是它自身,这样的子程序
称为递归子程序。显然递归调用是子 程序嵌套的一种特殊情况。使用递归算法往往能设
计出效率较高的程序。
设计递归子程序时, 必须保证每一次后继调用都不能破坏它上一次调用时所生成的
参数和中间结果,并且该过程不会修改它本 身。这就意味着当使用汇编语言设计递归子
程序时,必须考虑每一次调用都应该把它的参数、寄存器和所 有的中间结果保存到不同
的存储区域。最好的办法是利用堆栈来存储这些信息,一次调用所保存的信息称 为一帧。
递归调用要使用大量的堆栈空间,一定要保证堆栈足够大,而且也要保证堆栈的正确使
用,避免死机等不可预料的情况发生。
求N!算法流程图:
'.
.
FACT子程序
保存BP内容,建立帧首地址
保存寄存器内容
取结果地址
主程序
取N
结果地址入栈
N入栈
调用FACT求N!
N=0?
结果地址入栈
N-1入栈
调用FACT求N-1
返回
取(N-1)!
N!=N*(N-1)
N!存入结果单元
恢复寄存器内容
返回
N!=1

三、所用仪器、材料(设备名称、型号、规格等)
1. 操作系统平台:Windows Server 2003
2. 汇编环境:Microsoft MASM 5.0
3. 文本编辑器:记事本
四、实验方法、步骤
1. 将MASM5.0的文件置于C:assembly目录下;
'.
.
2. 将和所在目录(C:assemblyMASM5)添加到Path环境变量中;
3.在C:assembly下新建一个文件,打开,输入汇编程序代码;
4. 运行一个命令行窗口,将当前目录切换到C:assembly,然后输入命令:masm
[Ent er],来汇编程序,根据汇编结果查看程序代码是否有语法错误,如有,则更正保存
后重新汇编,直至 没有错误为止,此时会生成文件;
5. 输入命令:link [Enter],观察输出结果,如果没有错误,则生成;
6. 输入命令:debug [Enter],调试程序,并记录运行过程;
7. 完成实验报告。
五、实验过程原始记录(数据、图表、计算等)
1. 将C:assemblyMASM5目录添加到Path环境变量中:

2. 新建名为的文件,输入汇编程序代码:
'.
.

程序源码:
STACKSG
STACKSG
DATA
N_VAL
RESULT
DATA
CODE
FRAME
SAV_BP















SEGMENT STACK 'S'
DW 128 DUP('ST')
ENDS
SEGMENT
DW 3
DW ?








;定义N值
;结果
;定义堆栈
ENDS
SEGMENT
ASSUME CS:CODE, DS:DATA, SS:STACKSG
STRUC
DW ?














;定义帧结构
;保存BP值
;保存返回地址
;当前N值
;结果地址
SAV_CS_IP
N
DW 2 DUP(?)
DW ?
DW ?



RESULT_ADDR
FRAME
MAIN




ENDS
PROC FAR
'.






R1:

MAIN
FACT












R2:



DONE:
RETURN:

'.
.
MOV AX,DATA
MOV DS,AX
LEA BX,RESULT
PUSH BX 结果地址入栈
PUSH N_VAL N值入栈
CALL FAR PTR FACT 调用递归子程序
MOV AX,4C00H
INT 21H
ENDP
PROC FAR N!递归子程序
PUSH BP ;保存BP值
MOV BP,SP BP指向帧基地址
PUSH BX
PUSH AX
MOV BX,[BP].RESULT_ADDR
MOV AX,[BP].N 取帧中N值
CMP AX,0
JE DONE ;N=0时退出子程序嵌套
PUSH BX 为下一次调用压入结果地址
DEC AX
PUSH AX 为下一次调用压入(N-1)值
CALL FAR PTR FACT
MOV BX,[BP].RESULT_ADDR
MOV AX,[BX] 取中间结果(N-1)!
MUL [BP].N N*(N-1)!
JMP SHORT RETURN
MOV AX,1 0!=1
MOV [BX],AX 存中间结果
POP AX
.



FACT
CODE



















POP
POP
RET
ENDP
ENDS
END
BX
BP
4
MAIN
3. 汇编源程序:

4. 连接生成可执行文件:

5.调试程序:
(1)结果地址入栈
'.
.

(2)N值入栈,并调用递归子程序

(3)保存BP值,BP指向帧基地址,准备取N值

(4)取到N值后判断是否等于零,显然3不等于零,准备为下一次调用压入结果地址
'.
.

(5)为下一次调用压入结果地址和N-1的值,然后准备进行下一次调用

(6)第二次调用判断N值是否等于零,显然2不等于零

'.
.
(7)第三次调用判断N值是否等于零,显然1不等于零

(8)第四次调用判断N值是否等于零,显然等于零,准备返回

(9)第四次调用返回0!=1,存中间结果,返回

'.
.
(10)第三次调用,取堆栈中的中间结果N-1,准备时行N*(N-1)的操作

(11)计算N*(N-1),开始第三次调用的返回
(12)第二次调用,取堆栈中的中间结果N-1,准备时行N*(N-1)的操作


'.
.
(13)计算N*(N-1),开始第二次调用的返回
(14)当前中间结果的值


(15)第一次调用,取堆栈中的中间结果N-1,准备时行N*(N-1)的操作

(16)计算N*(N-1),开始第一次调用的返回

'.
.
(17)第一次调用返回后,主程序执行完毕,RESULT中存放N的阶乘,程序结束并退出

六、实验结果、分析和结论(误差分析与数据处理、成果总结等。其中,绘制曲
线图 时必须用计算纸)
1. 子程序设计可以使用多种方法传递参数,但用堆栈传递参数时要特别注意所有与堆
栈相关的操作。
2. 递归子程序的堆栈调用比较复杂,需要对我们对每一次调用时堆栈的变化都非常清
楚,这 样不但思路清晰,而且在子程序返回过程中,返回值和堆栈指针的变化也能帮助
我们理解程序运行的细节 ,以便检查错误。
3. 分析递归子程序最好最简便的方法是将程序调用的相互关系和堆栈变化用图画 出
来,这样一步一步的按程序逻辑进行绘制,可以很好的检查程序逻辑设计是否有问题,
是一种 查错的好办法。
'.

哪些公司需要平面设计-耿弇


求直角三角形斜边长-描写友谊的诗句


写给闺蜜感动到哭的信-第一次什么感觉


升学宴主持词-变异系数计算公式


扇形圆心角度数怎么求-长方体的棱长总和


身份证丢失如何补办-关于目标的句子励志


亚洲地理位置-2015高考满分作文


四级500分什么水平-尼尔斯骑鹅旅行



本文更新与2020-10-25 14:30,由作者提供,不代表本网站立场,转载请注明出处:https://www.bjmy2z.cn/gaokao/425743.html

汇编--N阶乘的相关文章

  • 爱心与尊严的高中作文题库

    1.关于爱心和尊严的作文八百字 我们不必怀疑富翁的捐助,毕竟普施爱心,善莫大焉,它是一 种美;我们也不必指责苛求受捐者的冷漠的拒绝,因为人总是有尊 严的,这也是一种美。

    小学作文
  • 爱心与尊严高中作文题库

    1.关于爱心和尊严的作文八百字 我们不必怀疑富翁的捐助,毕竟普施爱心,善莫大焉,它是一 种美;我们也不必指责苛求受捐者的冷漠的拒绝,因为人总是有尊 严的,这也是一种美。

    小学作文
  • 爱心与尊重的作文题库

    1.作文关爱与尊重议论文 如果说没有爱就没有教育的话,那么离开了尊重同样也谈不上教育。 因为每一位孩子都渴望得到他人的尊重,尤其是教师的尊重。可是在现实生活中,不时会有

    小学作文
  • 爱心责任100字作文题库

    1.有关爱心,坚持,责任的作文题库各三个 一则150字左右 (要事例) “胜不骄,败不馁”这句话我常听外婆说起。 这句名言的意思是说胜利了抄不骄傲,失败了不气馁。我真正体会到它

    小学作文
  • 爱心责任心的作文题库

    1.有关爱心,坚持,责任的作文题库各三个 一则150字左右 (要事例) “胜不骄,败不馁”这句话我常听外婆说起。 这句名言的意思是说胜利了抄不骄傲,失败了不气馁。我真正体会到它

    小学作文
  • 爱心责任作文题库

    1.有关爱心,坚持,责任的作文题库各三个 一则150字左右 (要事例) “胜不骄,败不馁”这句话我常听外婆说起。 这句名言的意思是说胜利了抄不骄傲,失败了不气馁。我真正体会到它

    小学作文