在对 IDE Controller 的选项 ROM 进行逆向工程的过程中,我注意到每个 in
或 out
指令后面都跟着两个 jmp Short
指令,它只是跳转到下一条指令(操作码 EB00
),如下所示:
out dx, al
jmp short next1
next1:
jmp short next2
next2:
; code continues
这种模式背后的具体原因是什么?
最佳答案
当 CPU 开始以超过 I/O 设备处理速度的速度运行时,允许 I/O 设备在下一个数据到达之前处理之前发送给它的数据。它经常与 PIT 定时器 (8253) 一起使用,其中需要两个 8 位 OUT 才能在芯片的三个定时器之一中写入 16 位值。
此外,这是必要的,因为原始的PC架构并没有使用READY信号来停止CPU,直到I/O设备处理完数据,因此必须在软件中执行等待。 JMP 非常适合,因为它引入了队列刷新,因此 CPU 浪费了一些周期来执行实际跳转。
关于assembly - x86 汇编中端口 I/O 后 jmp 短接的用途,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34319065/