我完全無法理解MIPS的堆棧。堆棧中的空間是通過減去寄存器來分配的,堆棧隨着程序的方向增長,當堆棧增長太多時,它會通過覆蓋(或者至少試圖)程序而溢出。一旦執行該函數,我必須通過添加先前減去的相同值來刪除堆棧。這對我來說很好。不過,我被告知,當我保存參數時,我必須分配四個空格,對應於四個第一個參數($ a0- $ a3),並且從不使用它們(如所述的here)。爲什麼?另外,當我構建堆棧時,我必須保存額外的參數。我是否應該保存「不額外」的論據? 例如這個C程序的組件:MIPS的堆棧會導致我的大腦溢出
void f (int x, int y, int z) {
int array[5], a, b;
if (x >= y && x != z)
g(x+1, y+2, z+3, 4, 5);
else
h(x-1, y-2, z-3, 4, 5, 6, 7);
while (z != 0)
x++
}
我應該保存$ A0〜$ A3在各自堆棧位置?我應該將它們保存在$ s0- $ s3?如果我沒有而部分,我應該不是保存嗎?
已鏈接是描述一個微軟特定調用約定的頁面。這不是在MIPS CPU上使用堆棧的唯一方法。 –
呃,你不需要在C中分配任何堆棧空間。實際上,C不需要堆棧。你用自動存儲持續時間聲明變量,編譯器完成剩下的工作。此外,+1爲braindamaged微軟調用約定。 – EOF
@EOF對不起,我的意思是如何組裝C程序。 – gabrieljcs