2015-03-02 77 views
0

將值0xB33C分配給寄存器$ t0。

對此的答案是:ori $t0, $zero, 0xB33C但是,我很困惑爲什麼。我認爲答案是addi $t0, $t0, 0xB33C

有人可以向我解釋這個嗎?我不確定ori指令是如何工作的。

回答

1

我想答案應該是addi $t0, $t0, 0xB33C

也許你的意思是addi $t0, $zero, 0xB33C?無論如何,在這種情況下,addi的問題在於它對指令字中編碼的16位立即數進行了符號擴展。所以你最終會得到0xFFFFB33C

ori執行按位或運算,這意味着如果在任何輸入中設置了相應的位,結果中的每個位都將被置位。造成這種情況的真值表:

IN OUT 
---------- 
0 0 -> 0 
0 1 -> 1 
1 0 -> 1 
1 1 -> 1 

正如你可以看到,執行逐位或零和一些值X之間,會給你X的結果。因此ori $t0,$zero,0xB33C爲您提供$t0 = 0 bitwise OR 0xB33C,即$t0 = 0xB33C

+0

謝謝!我現在知道了! – Josh 2015-03-02 21:30:03