2012-10-31 73 views
4

我在研究MIPS時對此部分感到困惑。加載32位常量以在MIPS中註冊

教授John L. Hennessy編寫的教科書說,如果我們得到了一些不斷加載,我們應該

lui $s0, upper(big) 
ori $s0, $s0, lower(big) 

但是,爲什麼我們不只是做

addi $s0, $zero, big 

由於寄存器32位,這更加簡單,不是嗎?

回答

3

傳遞給addi的直接理由是隻有16位。要加載一個16位值範圍之外的32位立即數,你需要兩次去做,就像你的教科書中的例子。由於MIPS ISA使用固定大小的32位指令,因此總有3238位可用於任何32位立即值,因此,無需立即加載或添加立即指令即可獲得32位立即值的原因(預計還有一個問題)指令參數 - 這在RISC體系結構中非常常見)。

+0

謝謝!由於固定長度,即時格式僅保留16位用於常量,其餘16位用於操作和寄存器代碼。 – lucasKoTW

3

是寄存器是32位,但是如何在32位指令中指定32位數?一條指令由操作碼和數據組成。所以,你不能在一個addi中擠壓一個操作碼+ 32位數據。

0

如果您需要加載很多常量,則可以使用文字池。然後每個恆定負載僅需要1個加載指令。更多信息herehere