2017-05-07 39 views
0

当堆栈指针移回原来的位置时,会发生什么情况,但保存在堆栈中的值没有从内存加载到寄存器文件中?即当堆栈指针移回时,值仍然存在于堆栈内存中。堆栈指针移回,但值没有加载到注册文件?

+0

什么也没有发生,完全符合你描述的要求。通过向一个方向移动堆栈指针,可以在堆栈上分配内存,然后通过向相反方向移动堆栈指针释放内存。 – Michael

回答

0

堆栈指针($ sp)正如名称暗示的指针,指向一个地址。

比方说,这是我们的记忆,并在beggining $ SP持有ADRESS “0x..01”

... | 0x..01 | 0x..02 | 0x..03 | ...

sw $a0,0($sp)#存储在$ SP ADRESS的第一偏移的$ A0 (这是0x..01在这个例子中)

addi $sp,$sp,4#$移动藻

现在让我们看看我们有什么。 $ sp不再指向0x..01,因为我们已经在第二行中更改了它,但$ a0的值仍然存储在0x..01。如果我们在此之后编写另一个sw命令,新值将被存储在$ sp的新地址中。

总结: $ sp拥有当前单元的地址。当您更改$ sp时,您只能更改$ sp指出的位置。