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

时间:2015-02-24 22:49:18

标签: assembly mips

str9.data部分中分配的字节的标签,该字节的地址为0x1001_58e4。确定由于此伪指令而生成的机器代码

lbu $t1, str9

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

1 个答案:

答案 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)