logo
1 / Lectures / Lect5_pc

Пространство ввода-вывода (адреса компонентов системной платы) ([5], с.49)

Обмен с внешними устройствами (портами) в процессорах семейства x86 может производиться либо непосредственно по командам процессора либо в режиме прямого доступа к памяти (ПДП или DMA – Direct Memory Access).

В первом случае возможны два варианта:

- адресация порта ввода-вывода в так называемом пространстве ввода-вывода и

- переназначение адресов памяти на адреса портов – прием который называют вводом-выводом с разметкой памяти (memory mapped input output).

При адресации в пространстве ввода-вывода для обращения к портам используются четыре основные команды процессора: IN – ввод в регистр аккумулятор EAX, OUT – вывод из регистра EAX, INS – ввод в элемент строки памяти, OUTS – вывод из элемента строки памяти. Причем последние две команды могут выполняться в цикле, задаваемом префиксом REP, что является основой для построения режима PIO (Programmable Input/Output – программно-управляемый ввод-вывод), используемого, например, для обмена с CD-ROM. Элементом строки памяти в этих командах может быть байт, слово или двойное слово.

Таким образом команды IN и OUT реализуют обмен данными между аккумулятором (регистром EAX) и портом ввода-вывода, а команды INS и OUTS – обмен между портом ввода-вывода и оперативной памятью.

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

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

Диапазон адресов пространства ввода-вывода ограничен 64К, т.е. допускает указание до 64 К портов ввода-вывода, при их косвенной адресации через регистр DX. Прямой адресацией команда ввода-вывода может указать только 256 (512) портов.

В обоих случаях адреса пространства ввода-вывода и адреса памяти передаются по одним и тем же адресным линиям. Различие адресов обеспечивается :

в процессорах Pentium и более ранних моделях – управляющими сигналами, сопровождающими (идентифицирующими) каждый шинный цикл процессора: циклы обращения к памяти сопровождаются сигналами чтения или записи в память – MEMRD# и MEMWR#, в отличие от циклов ввода-вывода, сопровождаемых сигналами IORD# и IOWR# - чтение из порта ввода-вывода или запись в него

в процессорах Pentium Pro и более поздних – специальной фазой в начале каждого шинного цикла.

При прямом доступе к памяти обмен производится под управлением контроллера прямого доступа либо иного контроллера, способного получить управление системной шиной.

(В процессорах Pentium и более ранних сигналы IORD# и IOWR# вырабатываются также в циклах прямого доступа к памяти DMA, причем в этом случае на шине адреса выставлен адрес памяти, а не порта. Для блокировки его дешифрации как адреса порта в циклах прямого доступа используется сигнал не активный уровень сигнала разрешения адреса AEN - Address Enable).

Большинство устройств ПЭВМ: клавиатура, таймер, параллельный и последовательный порты, контроллеры прерываний, прямого доступа и др. имеют типовые адреса, начиная с самых ранних моделей ПЭВМ. Это обеспечивает совместимость сверху вниз новых моделей с имеющимся программным обеспечением. Часть адресов перечислена в таблице 4

Таблица 4. Часть адресов пространства ввода-вывода ПЭВМ

Адрес

Назначение

000h – 00Fh

Контроллер DMA #1

020h – 021h

Контроллер прерываний #1

040h – 05Fh

Таймер

060h

Диагностический регистр теста POST

060h, 064h

Контроллер клавиатуры

061h

Источники NMI и управление звуком

070h – 07Fh

Память CMOS и маска NMI

080h

Диагностический регистр

Посмотреть назначение адресов портов ввода-вывода можно из панели управления Windows (или кликнув правой кнопкой мышки на значке “Мой компьютер” и выбрав из меню пункт “Свойства”) или диагностическими программами DOS.