Процессор i486 обеспечивает отдельное адресное пространство ввода/вывода, отличное от адресного пространства физической памяти, в которое могут быть помещены порты ввода/вывода. Адресное пространство ввода/вывода состоит из 2**16 (64К) индивидуально адресуемых 8-битовых портов; любые два последовательно расположенные 8-битовые порта могут рассматриваться как один 16-битовый порт, а любые четыре - как один 32-битовый порт. Если порт пересекает границу между двумя двойными словами физической памяти, то используются лишние циклы шины.
Штырек M/IO# процессора i486 указывает, когда происходит цикл шины обращения к адресному пространству ввода/вывода. При использовании отдельного адресного пространства ввода/вывода ответственность за применение данного сигнала для выбора портов ввода/вывода вместо памяти лежит на разработчике аппаратного обеспечения. Действительно, использование отдельного адресного пространства ввода/вывода упрощает аппаратную конструкцию системы, поскольку выбор этих портов может быть выполнен одним сигналом: в отличие от других процессоров, здесь не требуется декодировать сигналы нескольких проводов шины старшего адреса для установки отдельного адресного пространства ввода/вывода.
Программа может задать адрес порта двумя способами. С использованием непосредственно задаваемой байтовой константы в команде:
64 32-битовых порта с нумерацией 0,4,8, ... , 248,252
Используя значение регистра DX, программа может задать:
8-битовые порты с нумерацией от 0 до 65535.
16-битовые порты с нумерацией 0,2,4, ... ,65532,65534.
32-битовые порты с нумерацией 0,4,8, ... ,65528,65532.
Процессор i486 может пересылать по 8, 16 или 32 бита в устройство, отображаемое в пространстве ввода/вывода. Подобно словам в памяти, 16-битовые порты должны быть выравнены по четным адресам, таким образом, чтобы все 16 битов могли быть пересланы за один цикл шины. Подобно двойным словам в памяти, 32 -битовые порты должны быть выравнены по границе адресов, кратным четырем. Процессор поддерживает пересылку и к невыравненным портам, но тогда происходит уменьшение быстродействия за счет лишнего цикла шины.
Команды IN и OUT пересылают данные между регистром и портом в адресном пространстве ввода/вывода. Команды INS и OUTS пересылают строки данных между адресным пространством памяти и портами в адресном пространстве ввода/вывода.
Адеса портов ввода/вывода от 0F8H до 0FFH резервируются для внутреннего использования Intel. Не назначайте порты ввода/вывода на эти адреса. Точная последовательность циклов шины при доступе к портам, требующим более одного цикла, не определена. Например, команда OUT, загружающая невыравненный порт размером в двойное слово в адрес памяти 2H, выполняет доступ к слову по адресу 4H раньше, чем доступ к слову по адресу 2H. Точная последовательность не определена, и не гарантируется ее сохранение следующими продуктами Intel.
Если программному обеспечению требуется установить конкретную последовательность циклов шины, то она должна быть задана в явном виде. Например, для загрузки сначала порта длиной в слово по адресу 4H, а затем порта длиной в слово по адресу 2H, нужно использовать две команды формата слова вместо одной команды формата двойного слова.
Отметим, что хотя процессор i486 автоматически маскирует ошибки контроля четности для конкретных типов циклов шины, например, для циклов квитирования прерывания, он не маскирует ошибки четности для циклов шины обращения к адресному пространству ввода/вывода. Программистам нужно знать о таком поведении процессора, как о возможном источнике ложных ошибок контроля четности.