str9
是.data
部分中分配的字节的标签,该字节的地址为0x1001_58e4
。确定由于此伪指令而生成的机器代码:
lbu $t1, str9
我不明白为什么这是一个伪指令,为什么0x1001_58e4
不能简单地用给定的指令加载到$t1
GPR中。有人可以向我解释为什么在这种情况下这不起作用。在处理这种情况时,汇编程序会做什么真正的指示?我知道如何在找到真实指令后将指令转换为机器代码,但只是不理解真正指令的需要,因为我的教授说它需要分解为2。
答案 0 :(得分:2)
您是否尝试将其转换为单一指令?你成功了吗? :)
提示:地址本身是32位值(0x1001_58e4
),mips指令是32位,所以如果你想对它进行编码,那么操作码和目标寄存器就没有剩下的地方。
因此,您需要在2条指令中执行此操作。首先,将地址的前16位加载到$t1
,然后使用真lbu
,将低16位作为前16位的偏移:
lui $t1, 0x1001
lbu $t1, 0x58e4($t1)
汇编程序在处理此操作时会执行哪些实际指令 情况?
您可以随时组装和反汇编:
Disassembly of section .text:
00000000 <.text>:
0: 3c091001 lui t1,0x1001
4: 912958e4 lbu t1,22756(t1)