2012-06-26 24 views
3

我正在學習使用過程的MIPS代碼,但我無法理解堆棧(sp)和幀指針(fp)的用途。

例如我研究的代碼在下面有這個。它會輸入您輸入的數字之前的所有數字,例如3. 3,1,1,0並顯示它使用了多少堆棧大小。在這個例子中,它使用了16.我將-4更改爲-8,並且出現錯誤。 但是,我注意到一些其他代碼使用-8

問題是我錯過了什麼?

proc: 
    addi $sp,$sp,-4  # 
    sw $ra,0($sp)  # push $ra 

回答

1

在調用函數之前將返回地址推入堆棧。這就是代碼所做的。 -4表示通過向上移動堆棧指針來「分配」堆棧中的4個字節,以便可以寫入返回地址。

上面的解釋假定正常使用寄存器。

直到我看到代碼時,我無法總結-8的操作。但它可能爲該功能的論點保留空間。

+0

謝謝你的回答。在另一個例子中,我看到它使用'sw $ t0,($ sp)'而不是'sw $ ra,0($ sp)'。這是因爲它不需要返回值? – EnexoOnoma

+0

@Kaoukkos:代碼太少,不知道它做了什麼。 – nhahtdh