str9是.data节中分配的字节的标签,这个字节的地址是0x1001_58e4。确定将由此伪指令生成的机器代码:
lbu $t1, str9
我不明白为什么这是一个伪指令,为什么0x1001_58e4不能简单地用给定的指令加载到$t1探地雷达。有谁能给我解释一下为什么这在这种情况下不起作用。在处理这种情况时,汇编程序会做什么真正的指令?当我找到真正的指令时,我知道如何将指令转换成机器代码,但我只是不理解需要真正的指令,正如我的教授所说的,需要将指令分解为2。
发布于 2015-02-24 23:22:47
你试过把这个变成一条指令吗?你成功了吗?)
提示:地址本身是一个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)https://stackoverflow.com/questions/28707910
复制相似问题