在对IDE控制器的选项ROM进行逆向工程的过程中,我注意到每条in
或out
指令后跟两条jmp short
指令,它们只是跳转到下一条指令(操作码EB00
),如下所示:
out dx, al
jmp short next1
next1:
jmp short next2
next2:
; code continues
这种模式背后的原因究竟是什么?
答案 0 :(得分:8)
允许I / O设备处理在下一个数据到达之前发送给它的先前数据,此时CPU开始以比I / O设备可以处理的速度更快的速度运行。它经常与PIT定时器(8253)一起使用,其中需要两个8位OUT来在芯片的三个定时器之一中写入一个16位值。
此外,这是必要的,因为原始PC架构在I / O设备完成数据处理之前没有使用READY信号来停止CPU,因此等待必须在软件中执行。 JMP很合适,因为它引入了队列刷新,因此CPU浪费了一些周期来执行实际的跳转。