2013-10-26 47 views
0

保存返回地址,比方說,我有:MIPS:在嵌套過程

main: 

    // stuff 

    jal function_a 

function_a: 

    // function_a stuff 

    jal function_b 

    jr $ra 

function_b: 

    // function_b stuff 

    jr $ra 

據我瞭解,主要保存在$ RA當它JAL function_a適當的返回地址,但隨後function_a覆蓋$ RA當它執行jal function_b時,顯然$ ra需要在某個時刻保存。但是我找不到任何能夠說明這一點的公約是什麼。在致電jal function_b之前,我是否在function_a中將$ ra存儲在堆棧中?在調用jal function_b之前,我是否將$ ra存儲在s-register中,然後在function_b的開頭保存該s-register(我認爲暗含here)?有些不同?有關係嗎?

回答

1

通常的做法是將$ra直接保存在堆棧上。存儲在(說)$s0沒有多大意義,因爲根據正常的電話會議function_a也必須保存$s0,所以首先你必須在堆棧上保存$s0$ra騰出空間。如果你不遵循正常的通話慣例,那麼你當然可以做任何你想做的事情。

+0

有道理,謝謝。 – Tyler