将操作码解码为指令

时间:2015-08-11 16:17:54

标签: assembly x86 opcode ia-32

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

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

2 个答案:

答案 0 :(得分:1)

通常你会使用调试器。

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

答案 1 :(得分:0)

扩展500 - 内部服务器错误的答案,代码为:

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型外围卡设计运行的速度要快一些,因此跳转到下一条指令被用作延迟。