【问题标题】:Decoding opcode to instruction将操作码解码为指令
【发布时间】:2015-08-11 16:17:53
【问题描述】:

这个汇编程序的前2条指令是直接用机器码写的,如何将它们翻译成标准形式(我猜它类似于add %bp, %bx,但它没有任何意义因为这个例程应该清空 8042 缓冲区)?

   func:
        .word   0x00eb,0x00eb
        in  $64, %al
        test    %al, $2
        jnz func
        ret

【问题讨论】:

  • 这叫反汇编。如果您想手动完成,请使用指令集参考,或使用反汇编程序。
  • 请记住,数据是以小端序存储的。 .word 等价于 .byte 0xeb, 0x00
  • 现在说得通了。谢谢!!

标签: assembly opcode x86


【解决方案1】:

通常您会为此使用调试器。

db 0EBh, 00h 是空跳转,即跳转到紧随其后的指令。

【讨论】:

    【解决方案2】:

    扩展 500 - Internal Sever Error 的答案,代码是:

    func:   jmp     short func0
    func0:  jmp     short func1
    func1:  in      $64, %al
            test    %al, $2
            jnz     func
            ret
    

    到下一条指令的两次跳转用于创建一个短暂的延迟。在使用某些 I/O 端口操作时,某些 8088 / 8086 / 80186 / 80286 / ... 类型的环境可能需要这样做。例如,在 IBM AT 的早期,在某些情况下,AT / ISA 总线的运行速度比一些旧的 ISA 类型外围卡设计运行的速度要快一些,因此跳转到下一条指令被用作延迟。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-26
      • 1970-01-01
      • 2011-07-03
      • 1970-01-01
      • 1970-01-01
      • 2016-10-03
      • 2022-11-23
      • 2016-08-02
      相关资源
      最近更新 更多