Быстрый ввод / вывод системы 8086 - PullRequest
0 голосов
/ 10 февраля 2011

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

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

MOV BX, 18000h
MOV [BX], AL

Я очень новичок в такого рода вещах, поэтому я очень признателенпомощь от старых программистов, использующих ядро, asm, если кто-нибудь из вас здесь :) Спасибо.

Ответы [ 2 ]

3 голосов
/ 10 февраля 2011

Вы не можете выполнить команду IN or OUT!

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

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

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

  • Через отдельное адресное пространство ввода / вывода
  • Посредством сопоставленного с памятью ввода / вывода

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

0 голосов
/ 12 февраля 2011

Если ваша система 386 или более поздняя, ​​вы можете использовать префикс переопределения размера операнда, что в результате приведет к "out edx, al".Вам нужно будет использовать тот же префикс и, возможно, также префикс переопределения размера оператора, чтобы сначала загрузить edx.Al загружается со стандартным мнемосхемой 8086

...