0
我的理解是:差異登錄擴展了即時VS零擴展立即
零擴展的速釋意志墊立即與左零,因此:
ori $t1, $0, 0xF
結果:
0x0000000F
登錄擴展直接 - 意志墊眼前最顯著位,所以:
addi $t1, $0, 0xF
結果:
0xFFFFFFFF
我顯然是錯誤的,但爲什麼呢?
我的理解是:差異登錄擴展了即時VS零擴展立即
零擴展的速釋意志墊立即與左零,因此:
ori $t1, $0, 0xF
結果:
0x0000000F
登錄擴展直接 - 意志墊眼前最顯著位,所以:
addi $t1, $0, 0xF
結果:
0xFFFFFFFF
我顯然是錯誤的,但爲什麼呢?
您需要考慮立即數的大小,即16位mips。因此,你的直接實際上是0x000F
,所以MSB是零。爲了說明符號擴展爲負數,請使用位數爲#15的更大的立即數,例如0xffff
,這確實將被cpu解釋爲0xffffffff
。
因爲你需要考慮立即數的大小,這是16位mips(我假設你使用mips,你忘了提及...)因此你的立即數實際上是'0x000F',所以MSB是零。 – Jester
噢,好的。我想我正在尋找一個例子,其中標誌擴展可能導致一個問題。 – Gigalala
使用更大的直接例如'0xffff'。 – Jester