Загрузка...

Ввод-вывод


До сих пор мы обсуждали перемещение данных между константа-ми, регистрами и адресным пространством процессора 8086. Как вы можете вспомнить, в процессоре 8086 имеется также второе, незави-симое адресное пространство, которое называется пространством ад-ресов ввода-вывода. В общем случае в качестве каналов управления и обмена данными таких устройств, как дисководы, дисплейные адап-теры, принтеры и клавиатура, могут использоваться 65536 адресов ввода-вывода или портов.

Большинство инструкций процессора 8086, включая инструкцию MOV, имеют доступ только к операндам в пространстве адресов памя-ти. Обращаться к портам ввода-вывода могут только две инструкции — IN и OUT.

Инструкция IN копирует содержимое из указанного порта вво-да-вывода в регистр AL или AX. Адрес порта ввода-вывода, указыва-емый в качестве источника, можно выбрать одним из двух способов. Если адрес порта меньше 256 (100h), вы можете указать его в инст-рукции, например:

in al,41h

Эта инструкция копирует байт из порта ввода-вывода 41h в ре-гистр AL.

При втором способе вы можете использовать для ссылки на порт ввода-вывода, из которого нужно выполнить чтение, регистр DX:

mov dx,41h

in al,dx

Для чего регистр DX используется в качестве указателя порта ввода-вывода? Во-первых, если адрес порта ввода-вывода превышает 255, вы должны использовать DX. Во-вторых, использование регистра DX позволяет при адресации к портам ввода-вывода получить большую гибкость. Например, указатель на порт ввода-вывода можно передать подпрограмме, загрузив его в регистр DX.

Пусть вас не введет в заблуждение синтаксис инструкции IN — регистры AL и AX являются единственно возможными операндами-при-емниками. Аналогично, единственными допустимыми операндами-источ-никами являются регистр DX и значение-константа, меньшая 255. Поэтому, как бы вам этого ни хотелось, использовать инструкции типа:

in bh,si

недопустимо.

Инструкция OUT в точности эквивалентна инструкции IN, только операндом-источником является регистр AL или AX, а порт ввода-вы-вода, на который указывает регистр DX или постоянное значение, меньшее 256, является операндом-приемником. Например, следующие инструкции устанавливают порт ввода-вывода 3B4h в значение 0Fh:

mov dx,3b4h

mov al,0fh

out dx,al

Загрузка...