我对mips很陌生,我想知道我是否正确地使用了堆栈并理解了它
所以我有这段代码...
la $s0, trackHeight # s0 = TH
addi $sp, $sp, -4 # store TH in stack first position
sw $s0, 0($sp)
div $s0, $s0, 2 # div TH for start position (x)
lw $s0, 0($sp) # restore stack
addi $sp, $sp, 4
我的问题是
1.当我稍后使用$s0时,它的值是否与被除之前的值相同?
1.如果我以后要使用堆栈,是否需要还原它
1.当我以后使用它的时候,我应该做一个lw指令来修改它吗
我的整个项目是不完整的,所以它不会正确编译,但我的t寄存器,所以我试图存储不同的整数在堆栈中使用以后的程序。我目前的了解堆栈是最低限度的,我找遍了,不能找到答案我寻找
1条答案
按热度按时间toiithl61#
你正在按照正确的顺序进行正确的操作,但是注解并不十分准确。
实际上就是把你减去的金额加回来,这样就恢复了堆栈。
关于
$s0
被除的问题,除法的结果实际上存储在寄存器$lo
和$hi
中(一个是商,另一个是余数,我忘记了哪个是哪个。所以实际上,$s0
并没有改变,你可以省略lw $s0, 0($sp)
(但保留addi $sp, $sp, 4
,这是重要的部分)。请注意,这仅适用于乘法和除法运算。对于其他运算,如果您更改了
$s_
寄存器,则需要正确备份和恢复它,就像您在示例中所做的那样。