在对IDE控制器的可选ROM进行反向工程的过程中,我注意到,每条in
orout
指令后都有两条jmp short
指令,它们仅跳转到下一条指令(opcode EB00
),如下所示:
out dx, al
jmp short next1
next1:
jmp short next2
next2:
; code continues
这种模式背后的原因到底是什么?
为了允许I / O设备在下一个数据到达之前处理发送给它的先前数据,当CPU开始以比I / O设备可以应付的速度更高的速度运行时。它经常与PIT计时器(8253)一起使用,其中需要两个8位OUT在芯片的三个计时器之一中写入一个16位值。
此外,这是必要的,因为原始的PC架构在I / O设备完成数据处理之前不使用READY信号来停止CPU,因此必须在软件中执行等待。JMP非常适合,因为它引入了队列刷新,因此CPU浪费了一些执行实际跳转的周期。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句