[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可以有人解释那里发生了什么吗?
任何帮助表示感谢!!
答案 0 :(得分:2)
li是伪指令(即,它不作为处理器上的操作码存在)。 它总是扩展为“立即加载”;以及“或立即”指示:
有效地:(4096 << 16) || 244
如果数字不大,将跳过lui
指令;和ori
将或0寄存器。
答案 1 :(得分:0)
li立即加载。但是,您尝试加载的值太大,无法放入该指令的立即数据部分。汇编程序因此将其拆分为两个指令,每个指令将该值的一半加载到该寄存器的上部和下部。