3. Адресація портів введення-виведення 16-розрядних МП

Простір адрес портів введення-виведення несегментований, займає 64 Кбайт і адресується 16 молодшими розрядами 20-розрядної шини адреси. Порти можуть бути як 8-, так і 16-розрядними. Будь-які два суміжних 8-розрядних порти можна вважати 16-роз-рядним портом аналогічно слову в пам'яті. При цьому для обміну з 8-розрядними портами використовується регістр AL, а з 16-розрядними — регістр АХ. Перші 256 портів (з номе­рами 0 — 0FFH) можна адресувати за допомогою прямої ад­ресації.

 

Приклад 6. Ввести інформацію з 8-розрядного порту з адресою 56H у регістр-акумулятор AL.

Для того щоб ввести інформацію з 8-розрядного порту з адресою 56Н в акумулятор AL, треба виконати команду введення IN (введен­ня). Першим операндом команди є позначення акумулятора AL, якщо вводиться байт інформації, або АХ, якщо вводиться слово. У цьому випадку треба використати операнд AL. Другим операндом є номер порту 56H. Тому за командою

IN AL, 56H              ; AL¬ Р8(56H)

відбудеться введення інформації з 8-розрядного порту з адресою 56H до акумулятора.

Зазначимо, що допускається позначення номера порту у квадратних дужках:

IN AL, [56H]             ; AL¬ Н8(56H).

 

Приклад 7. Вивести інформацію з регістра-акумулятора АХ у 16-розрядний порт з адресою 34H.

Для того щоб вивести інформацію з акумулятора АХ до 16-розряд-ного порту з адресою 34H, треба виконати команду виведення OUT. Першим операндом команди є номер порту 34Н, другим — позначення акумулятора AL, якщо виводиться байт інформації, або АХ, якщо виво­диться слово. У цьому разі треба використати операнд АХ. Отже, за командою

OUT34H, АХ              ; АХ Р16(34H)

відбудеться виведення інформації з регістра АХ на 16-розрядний порт з адресою 34H.

Усі 64 Кбайт портів адресуються непрямо — за допомогою регістра DX.

 

Приклад 8. Ввести інформацію з 8-розрядного порту з адресою, що знаходиться у регістрі DX, у регістр-аккумулятор AL.

Для того щоб ввести інформацію, треба виконати команду введення IN, першим операндом якої є позначення акумулятора AL, а другим — позначення регістра DX.

Тому за командою

IN AL, DX               ;AL¬PS(DX)

відбудеться введення інформації в акумулятор AL з 8-розрядного порту з адресою, що знаходиться в регістрі DX. Вміст регістра DX має бути визначений до моменту виконання команди введення.

Допускається запис команди з непрямою адресацією у вигляді

IN AL, [DX]