MIPS编程作业 - 指令后更新位置

时间:2017-02-26 17:50:29

标签: assembly mips

对于我的汇编语言课程,我被要求填写图1 MIPS汇编代码中的汇编代码表,如图2所示。

Figure 1

在这段代码中,我的讲师试图实现一个递归函数调用来完成一个数字的阶乘。使用图2中的参数,到目前为止我已经填写了以下内容。

参数和进度

Figure 2

我知道初始堆栈指针从位置100开始,然后在函数continue中的第一条指令减少12。帧指针在位置96更新为112,返回地址将在位置92更新,n将在位置88更新为2.这将重复直到n达到1.

我对一些事情感到困惑。我的第一个问题是关于寄回地址。在更新返回地址的位置(92,80和68),每次返回地址是5000还是自动更新为其他地址?我很困惑如何更新返回地址,因为它没有像循环的每次迭代中的帧指针那样显式更新。

我的第二个问题是关于代码行之后的下一条指令:

jal fact # recursive call to fact(n-1) 

完成此操作后,列出以下说明

lw $4, 0 ($29) # restore n 

这会发生在60号位置吗?

mult $2, $4 # fact (n-1) * n

这会发生在56号位置吗?

我的最后一个问题是恢复每个寄存器。在代码行中:

lw $4, 0 ($29) # restore n
lw $31, 4 ($29) # restore return address
lw $30, 8 ($29) # restore frame pointer 

确切地说,n,返回地址和帧指针的值是否恢复到?它们是否会分别加载到88,92和96的原始值?

这是我第一次使用汇编语言的经历,如果我说的话没有意义或展示适当的研究,我会道歉。我的导师没有提供任何类似的例子,所以这是我在做了一些研究后发现的。

0 个答案:

没有答案