【发布时间】:2018-04-12 04:02:45
【问题描述】:
对于我的汇编编程课的作业,我们遇到了以下问题。我尝试了几种不同的方法来解决它,但我只能想到使用条件语句的解决方案。我没有在网上或班上的其他人那里找到答案。来自 c++/javascript 风格的语言,我知道必须有一个基本语句(否则该函数可能永远调用自己)。那不需要条件语句吗?
问题来了:
**直接递归是过程调用自身时使用的术语。你不想让一个过程永远调用自己,因为运行时堆栈会填满。您需要以某种方式限制递归。
编写一个调用递归过程的 MASM 程序。标记过程 recProc。在此过程中,将 1 添加到计数器,以便您可以验证它执行的次数。使用调试器运行程序,并在程序结束时检查计数器的值。在 ECX 中输入一个数字,指定您希望允许递归继续的次数。
仅使用 LOOP 指令,不使用其他条件 声明。
找到一种方法,让递归过程以固定的次数调用自身。
使用过程时,您需要确保保留寄存器和标志。您需要使用 PUSHFD/POPFD 和 PUSHAD/POPAD。**
【问题讨论】:
-
cmov?你能用吗?
-
@SeverinPappadeux 教授没有明确说我们不能,但我在我们的书中没有看到,所以我会说不。
-
我们这里似乎有一些矛盾的要求。 ECX 是否应该保持 recProc supposed 运行的次数?还是它确实运行的数字?我想理论上它可以同时用于两者,但这似乎很愚蠢。此外,
loop是 条件语句。图片loop notdone. -
提示:回想一下
LOOP递减 ECX。如果 ECX 等于 0,则控制进入下一条语句,否则进入标签参数。
标签: assembly x86 conditional-statements masm