Assembly x86汇编中端口I/O后的jmp short的用途
在对IDE控制器的选项ROM进行反向工程的过程中,我注意到每个Assembly x86汇编中端口I/O后的jmp short的用途,assembly,x86,Assembly,X86,在对IDE控制器的选项ROM进行反向工程的过程中,我注意到每个In或out指令后面都有两条jmp short指令,它们直接跳转到下一条指令(操作码EB00),如下所示: out dx, al jmp short next1 next1: jmp short next2 next2: ; code continues 这种模式背后的确切原因是什么?允许I/O设备在下一个数据到达之前处理发送给它的上一个数据,此时CPU开始以超过I/O设备所能处理的速度运行。它经常与
In
或out
指令后面都有两条jmp short
指令,它们直接跳转到下一条指令(操作码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设备完成数据处理之前没有使用就绪信号来停止CPU,所以等待必须在软件中执行。JMP非常适合,因为它引入了队列刷新,因此CPU在执行实际跳转时浪费了一些周期。以提供一个小的延迟。过去,设备在访问端口之间需要延迟。在8086上,每个跳跃都需要15个周期才能执行。