具有真实指令助记符的伪指令

Pseudoinstructions with real instruction mnemonics

str9是分配在.data段的一个字节的标签,这个字节的地址是0x1001_58e4。确定将作为此伪指令的结果生成的机器码

lbu $t1, str9

我完全不明白为什么这是一个伪指令,为什么 0x1001_58e4 不能简单地用给定的指令加载到 $t1 GPR 中。有人可以向我解释为什么这在这种情况下不起作用。汇编程序在处理这种情况时会执行哪些实际指令?一旦找到真正的指令,我就知道如何将指令翻译成机器代码,但只是不明白需要真正的指令,因为我的教授说它需要分解成 2 个。

你试过把它变成一条指令吗?你成功了吗? :)

提示:地址本身是一个 32 位值 (0x1001_58e4),而 mips 指令是 32 位的,所以如果你想对其进行编码,操作码和目标寄存器就没有地方了。

因此,您需要在 2 条指令中完成。首先,将地址的前 16 位加载到 $t1,然后使用真正的 lbu 将低 16 位作为前 16 位的偏移量:

lui $t1, 0x1001
lbu $t1, 0x58e4($t1)

What real instructions does the assembler do when dealing with this case?

你总是可以 assemble 和 disassemble:

Disassembly of section .text:

00000000 <.text>:
   0:   3c091001        lui     t1,0x1001
   4:   912958e4        lbu     t1,22756(t1)