x86汇编中端口I / O后jmp短路的目的

时间:2015-12-16 18:04:14

标签: assembly x86

在对IDE控制器的选项ROM进行逆向工程的过程中,我注意到每条inout指令后跟两条jmp short指令,它们只是跳转到下一条指令(操作码EB00),如下所示:

    out dx, al
    jmp short next1
next1:
    jmp short next2
next2:
    ; code continues

这种模式背后的原因究竟是什么?

1 个答案:

答案 0 :(得分:8)

允许I / O设备处理在下一个数据到达之前发送给它的先前数据,此时CPU开始以比I / O设备可以处理的速度更快的速度运行。它经常与PIT定时器(8253)一起使用,其中需要两个8位OUT来在芯片的三个定时器之一中写入一个16位值。

此外,这是必要的,因为原始PC架构在I / O设备完成数据处理之前没有使用READY信号来停止CPU,因此等待必须在软件中执行。 JMP很合适,因为它引入了队列刷新,因此CPU浪费了一些周期来执行实际的跳转。