2012-08-27 35 views
0

我有一個奇怪的系統崩潰。碰撞發生在MIPS processor的移動指令中。這條指令沒有內存訪問權 - 一個註冊移動的寄存器。我假定碰撞發生在移動指令上,因爲epc保存了下一條指令的地址。崩潰在移動vo,ao指令

jr ra; 
move v0,a0; 
lw a0,16(a0); 

這是什麼原因造成的?

ePC即使在jr指令之後仍持有第三條指令,是由於流水線操作造成的。

+0

MIPS不做OO,是嗎?因爲您會注意到您正在嘗試加載剛纔移動的註冊表。也許它優化了這個在移動之前直接加載v0? –

+0

嗨,約翰。通過面向對象,你的意思是內核OOPS? –

+0

By OO,我的意思是無序執行,處理器重新排列順序語句執行的位置。通常,該策略的一部分是將lw分成兩條指令。只要知道要獲取的地址並且其值不會更改,請啓動加載。做一些其他的事情(例如移動v0,a0),然後等待結果最終從主存到達。與RISC相比,它更像是一個CISC,但我認爲一些RISC芯片可能會這樣做。 –

回答

1

鑑於EPC持有JR之後的第三條指令的地址,則該指令發生崩潰。 MOVE指令位於JR的branch delay slot中,所以它在JR之前執行。 JR返回到LW指令,這是EPC告訴你崩潰正在發生的地方。

順便說一下,MOVE指令不能在MIPS架構中引起任何異常(指令取指中的頁面錯誤除外)。