Доступ IN/OUT к адресам выше 2^16?

Как я могу загрузить/сохранить данные на периферию, адрес которой больше 216 с инструкциями IN/OUT.

Когда я использую инструкцию IN/OUT, скажем, OUT DX, AL, я знаю, что сегментный регистр DX не используется, поэтому я могу получить доступ только к первым 216 адресам (поскольку DX имеет ширину 16 бит).

Одно из моих устройств находится по адресу 18000h. Как я могу достичь этого? Пространство памяти/IO перекрывается (вывод M/IO не используется), так что можно сказать что-то вроде

MOV BX, 18000h
MOV [BX], AL

person Klark    schedule 10.02.2011    source источник


Ответы (1)


Вы не можете с IN or OUT инструкцией!

Процессор x86 поддерживает адресное пространство ввода-вывода, содержащее до 65 536 8-битных портов ввода-вывода.

Из таблицы данных Intel:

Процессор позволяет приложениям получать доступ к портам ввода/вывода одним из двух способов:

  • Через отдельное адресное пространство ввода/вывода
  • Через ввод-вывод с отображением памяти

Доступ к портам ввода-вывода через адресное пространство ввода-вывода осуществляется с помощью набора инструкций ввода-вывода и специального механизма защиты ввода-вывода. Доступ к портам ввода-вывода через ввод-вывод с отображением памяти осуществляется с помощью процессорных инструкций перемещения и строк общего назначения с защитой, обеспечиваемой сегментацией или пейджингом. Порты ввода-вывода можно отображать так, чтобы они отображались в адресном пространстве ввода-вывода или в адресном пространстве физической памяти (ввод-вывод с отображением памяти) или в обоих.

person GJ.    schedule 10.02.2011
comment
Хорошо, я это уже знаю. Я изменил схему. Эта организация была излишне сложной. Сейчас вся периферия ниже 65536, так что должно нормально работать (по крайней мере на бумаге :)). Спасибо за ответ. - person Klark; 10.02.2011
comment
Технически вы можете получить доступ к порту с номером 0xFFFF как к 16-битному или 32-битному порту ввода-вывода. Intel предупреждает об этом в своей документации для растрового изображения разрешения ввода-вывода (в сегменте состояния задачи). - person Brendan; 04.11.2020