1
[0x00400000]    0x3c011000  lui $1, 4096                    ; 5: li $t0, 0x100000F4
[0x00400004]    0x342800f4  ori $8, $1, 244
[0x00400008]    0x8d100000  lw $16, 0($8)                   ; 6: lw $s0, 0($t0)

以上是我的 spim 程序,我很好奇 li 指令被分成 lui 和 ori 谁能解释那里发生了什么?

任何帮助表示感谢!

4

2 回答 2

2

li 是一个伪指令(即,它在处理器上不作为操作码存在)。它总是扩展为“加载上立即数”;和“或立即”指令:

有效:(4096 << 16) || 244

lui如果数量不大,则跳过该指令;并将ori或与 0 寄存器。

于 2011-09-13T00:41:18.563 回答
0

li 是立即加载。但是,您尝试加载的值太大而无法放入该指令的直接数据部分。因此,汇编器将其分成两条指令,每条指令将一半的值加载到该寄存器的上部和下部。

于 2011-09-13T00:42:35.547 回答