2015-12-16 3 views
3

В процессе обратного проектирования ПЗУ контроллера IDE я заметил, что каждая инструкция in или out сопровождается двумя инструкциями jmp short, которые просто переходят к следующей инструкции (опкод EB00), например так:Назначение jmp short после ввода порта ввода-вывода в x86

out dx, al 
    jmp short next1 
next1: 
    jmp short next2 
next2: 
    ; code continues 

Что именно это рассуждение позади этой модели?

+6

Чтобы обеспечить небольшую задержку. Это были устройства, требующие задержки между доступом к их портам. На 8086 каждый из этих прыжков должен выполнить 15 циклов. –

ответ

8

Чтобы позволить устройству ввода-вывода обрабатывать предыдущие данные, отправляемые ему до того, как будут получены следующие данные, когда CPU начнет работать с большей скоростью, чем то, с чем может справиться устройство ввода-вывода. Он часто использовался с таймером PIT (8253), в котором два 8-битных OUT были необходимы для записи 16-битного значения в одном из трех таймеров чипа.

Кроме того, это было необходимо, потому что оригинальная архитектура ПК не использовала сигнал READY для остановки процессора до тех пор, пока устройство ввода/вывода не закончило обработку данных, поэтому ожидание должно выполняться в программном обеспечении. JMP хорошо подходит, потому что он вводит флеш очереди, поэтому процессор потратил несколько циклов, выполняя фактический прыжок.

Смежные вопросы