[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,谁能解释一下是怎么回事?
感谢任何人的帮助!
发布于 2011-09-13 08:41:19
li是一条伪指令(即它在处理器上不作为操作码存在)。它总是被扩展成一个'load an‘和一个'or with immediate’指令:
有效:(4096 << 16) || 244
如果数字不大,则跳过lui指令;并且ori将与0寄存器执行或操作。
发布于 2011-09-13 08:42:36
li是立即加载的。但是,您试图加载的值太大,无法放入该指令的即时数据部分。因此,汇编程序将其分成两条指令,每条指令将该值的一半加载到该寄存器的上部和下部。
https://stackoverflow.com/questions/7395601
复制相似问题