Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Консп_лекц_МПТ_4.doc
Скачиваний:
135
Добавлен:
23.11.2018
Размер:
2.18 Mб
Скачать

4.5.Адресное пространство ввода – вывода

Адресное пространство ввода – вывода предназначено для обращения к регистрам внешних по отношению к процессору устройств. Его размер ограничен 64 Кбайт. Для обращения к устройствам ввода – вывода МП i8086/8088 имеет отдельные команды IN и OUT /17,18/. Данные при чтении могут помещаться в регистр AL или AX и выводятся из этих же регистров. В циклах ввода – вывода используется только 16 младших байт шины адреса (старшие биты при этом нулевые), что позволяет адресовать до 64 К регистров ввода – вывода. Адрес внешнего устройства задается либо в команде (только младший байт, старший – нулевой), либо берется из регистра DX (полный 16 – битовый адрес). Во втором случае возможно вычисление адресов портов при выполнении программы, что удобно при организации вычислительных циклов для обслуживании нескольких портов с помощью одной процедуры.

4.6.Программная модель микропроцессоров i8086/8088 и способы адресации

Программная модель семейства МП i8086/8088 приведена на рис.4.10. Модель показывает те ресурсы МП, которыми программист может распоряжаться при разработке программ. Программная модель МП семейства i8086/8088 является основой программных моделей современных процессоров.

Команды МП семейства i8086/8088 реализуют весьма разнообразные способы адресации, что упрощает организацию и использование сложных структур данных, а также расширяет возможности отдельных команд и повышает гибкость их применения.

Регистровая адресация. При этом способе адресации операнд находится в одном из 8- или 16-битовых регистрах МП. Команды, оперирующие содержимым регистров, являются наиболее короткими и выполняются за наименьшее время, так как не требуют вычисления исполнительного адреса ЕА и выполнения цикла шины для обращения к памяти.

Непосредственная адресация. Непосредственными операндами являются константы длиной 8 или 16 бит, которые размещаются в последних байтах команды (младший байт следует первым). Доступ к таким операндам в МП осуществляется очень быстро, поскольку во время выполнения команды они находятся во внутренней очереди команд.

Д алее рассмотрим способы адресации операндов, хранящихся в оперативной памяти. Как уже было отмечено выше, при обращении к оперативной памяти вычисляется исполнительный (эффективный) адрес ЕА, который в общем случае является суммой, включающей следующие компоненты:

Смещение (Disp) – 8- или 16-битовое знаковое целое, включенное в команду;

База (Base) – содержимое базового регистра, которое обычно используется для указания на начало некоторого массива;

Индекс (Index) – содержимое индексного регистра, которое обычно используется для выбора элемента массива.

Исполнительный адрес ЕА в общем случае вычисляется по формуле

EA = Disp + Base + Index.

        1. Прямая адресация. Этот способ является простейшим способом адресации ячеек оперативной памяти, в которых хранятся операнды. При прямой адресации исполнительным адресом ЕА является содержимое байтов смещения Disp команды.

Разновидностью этого способа является длинная прямая адресации, при которой в формате команды содержится четыре байта, указывающие базовый адрес сегмента и сегментное смещение offset. только в командах межсегментных переходов и вызовов подпрограмм.

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

Косвенная регистровая адресация. В командах преобразования данных исполнительный адрес ЕА равен содержимому одного из регистров SI, DI, BX и BP.

Данный способ адресации позволяет вычислять адреса во время выполнения программ, что часто требуется, например для обращения к различным элементам таблиц данных. Разновидностью этого способа является косвенная адресация портов ввода-вывода с помощью содержимого регистра DX в однобайтовых командах IN и OUT.

Базовая адресация. Исполнительный адрес ЕА операнда вычисляется путем суммирования содержимого базовых регистров ВХ или ВР и смещения disp. При использовании ВХ происходит обращение к операнду в текущем сегменте данных, а при использовании ВР – в текущем сегменте стека. Смещения, содержащиеся в команде, могут иметь длину 8 или 16 бит и интерпретируются как знаковые целые, представленные в дополнительном коде.

Например: MOV AX,[BP+4] или MOV AX,[BP] + 4.

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

Индексная адресация. Значение исполнительного адреса ЕА операнда вычисляется как сумма смещения disp, находящегося в команде, и содержимого индексного регистра SI или DI. Данный способ обычно применяется для обращения к различным элементам одномерного массива (таблицы) данных, когда смещение определяет известный при ассемблировании начальный адрес массива, а индексный регистр, содержимое которого может модифицироваться при выполнении программы, определяет элемент массива. По существу индексная адресация в МП i8680/8088 аналогична базовой.

Базовая индексная адресация. Исполнительный адрес ЕА равен сумме содержимого базового регистра ВХ или ВР, индексного регистра SI или DI и смещения disp, находящегося в команде (в частном случае смещение может отсутствовать). Этот способ обеспечивает наибольшую гибкость адресации, так как два компонента адреса можно определить и варьировать при выполнении команды. Это удобно при обращении к элементам матриц, т.е. к двумерным массивам, представленным в памяти как совокупность одномерных массивов.

Относительная адресация. В МП i8086/8088 реализуется только по отношению к указателю команд IP, так что сегментное смещение вычисляется как сумма смещения disp, находящегося в команде, и текущего значения IP. При этом значение IP равно адресу байта, следующего за рассматриваемой командой, которая в это время выполняется микропроцессором. В МП i8086/8088 относительная адресация не используется в командах, оперирующими данными, а применяется только в командах условных и безусловных переходов, вызовов подпрограмм и управления циклами.

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

Обобщая программную модель и способы адресации семейства МП i8086/8088, можно получить более подробную схему вычисления физического адреса памяти. Эта схема изображена на рис.4.11. и интерпретирует различные варианты вычисления физического адреса памяти.