【问题标题】:MIPS decoding a branch instruction from machine-code to assemblyMIPS 将分支指令从机器码解码为汇编
【发布时间】:2017-10-16 12:57:51
【问题描述】:

我对以下机器代码有点困惑 0001 1001 0110 0000 0000 0000 0000 0010 这是机器语言的二进制代码,我翻译成 mips 32 位指令。

000110 01011 00000 0000 0000 0000 0010

blez   $t3,        2

我不确定我的翻译是否正确。

我不确定为什么立即数是 2 而不是目标位置的地址。

【问题讨论】:

  • MIPS b 指令使用目标的相对位移(即相对于 PC)。但是,它是左移的。但是,您忽略了它。 cs.umd.edu/class/sum2003/cmsc311/Notes/Mips/addr.html
  • 好的,如果该指令位于 1122334C 的地址中,那么在当前地址上加 8 就是目标?因此,它应该跳转到 11223354?

标签: assembly mips disassembly opcode


【解决方案1】:

我得到的偏移量与您的不同,因此请重新检查您提供给我们的位或您的数学。

.word 0x19600002
nop
nop
nop
nop
.word 0x19600002

mips-elf-as so.s -o so.o
mips-elf-objdump -D so.o


00000000 <.text>:
   0:   19600002    blez    $11,0xc
   4:   00000000    nop
    ...
  14:   19600002    blez    $11,0x20

偏移量中是否添加了假设/暗示的 0x4?

【讨论】:

  • MIPS 分支偏移相对于分支指令的结尾。 (即通常的PC+=4 发生以及 添加分支位移。)OP 在技术上错误 仅显示相对位移,这只是一个问题它是如何解释的。 (顺便说一句,x86 也是这样:相对分支和 RIP 相对寻址模式是相对于指令的结尾的。)+1 用于将机器代码扔给反汇编程序以检查整个事情。
  • 不只是那些手臂,其他手臂都是一样的,实际上很常见,只是帮助操作人员表明不仅仅是编码的立即数起作用。
  • (当我问这个问题时知道答案,但是 OP 需要做更多的研究,例如,如果你有可用的工作工具,看看他们所说的与你想出的相比)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-22
  • 1970-01-01
  • 2019-04-26
  • 2017-12-20
相关资源
最近更新 更多