2012-03-03 319 views
11

我無法理解指令jal如何在MIPS處理器中工作。 我的兩個問題是:
一)什麼是R31存儲在「日航」 後的值:PC + 4PC + 8
B)如果它真的PC + 8,會發生什麼變化指令在PC + 4?是在跳躍之前執行還是從未執行?

在帕特森和軒尼詩(第四版),第113:

「跳和鏈接指令:跳轉到和地址,並同時在寄存器(保存下一條指令的地址$的指令嶺在MIPS)」

‘的程序計數器(PC ):含在程序中的指令的地址寄存器正在執行’

讀取這兩個語句之後,可以得出的值SA ved in $ ra應該是(PC + 4)。

然而,在隨附書MIPS基準數據(綠色卡),JAL指令的算法被定義如下:
「跳轉和鏈接:JAL:J-:R t [31] = PC + 8 ; PC = JumpAddr「

website還指出,‘這是真的PC + 8’,但奇怪的是,在那之後它說,由於流水線是一種先進的主題」我們假設返回地址PC +4「。
我來自8086程序集,所以我意識到回到一個地址和跟在它後面的地址之間有很大的區別,因爲如果我假設某些事情不是真的,那麼程序將不起作用。謝謝。

回答

12

$ ra中的地址確實是PC + 8。緊跟在jal指令後的指令位於「branch delay slot」中。它在輸入函數之前執行,因此函數返回時不應該重新執行它。

Mips上的其他分支指令也有分支延遲時隙。

延遲插槽用於執行jal指令所需的時間。

+0

非常感謝!奇怪的是,許多網站提供了錯誤的信息(PC + 4)。 – ReimannCL 2012-03-03 20:50:33

1

我得到了同樣的問題。搜索了理查德的這個優秀答案,以及我希望在此添加的另一個鏈接。

鏈接是http://chortle.ccsu.edu/AssemblyTutorial/Chapter-26/ass26_4.html 與這個美妙的解釋雙加4到PC。因此,實際執行有兩個增加:1)通過流水線操作newPC = PC + 4,以及2)通過jal指令產生另一個額外的$ ra = newPC + 4,從而產生有效的$ ra =(jal指令的地址)+8。