Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly x86汇编中端口I/O后的jmp short的用途_Assembly_X86 - Fatal编程技术网

Assembly x86汇编中端口I/O后的jmp short的用途

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设备所能处理的速度运行。它经常与

在对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设备所能处理的速度运行。它经常与PIT定时器(8253)一起使用,其中需要两个8位OUT在芯片的三个定时器之一中写入16位值


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

以提供一个小的延迟。过去,设备在访问端口之间需要延迟。在8086上,每个跳跃都需要15个周期才能执行。