И способы адресации
Программная модель семейства МП i8086/8088 приведена на рис.4.10. Модель показывает те ресурсы МП, которыми программист может распоряжаться при разработке программ. Программная модель МП семейства i8086/8088 является основой программных моделей современных процессоров.
Команды МП семейства i8086/8088 реализуют весьма разнообразные способы адресации, что упрощает организацию и использование сложных структур данных, а также расширяет возможности отдельных команд и повышает гибкость их применения.
Регистровая адресация. При этом способе адресации операнд находится в одном из 8- или 16-битовых регистрах МП. Команды, оперирующие содержимым регистров, являются наиболее короткими и выполняются за наименьшее время, так как не требуют вычисления исполнительного адреса ЕА и выполнения цикла шины для обращения к памяти.
Непосредственная адресация. Непосредственными операндами являются константы длиной 8 или 16 бит, которые размещаются в последних байтах команды (младший байт следует первым). Доступ к таким операндам в МП осуществляется очень быстро, поскольку во время выполнения команды они находятся во внутренней очереди команд.
Далее рассмотрим способы адресации операндов, хранящихся в оперативной памяти. Как уже было отмечено выше, при обращении к оперативной памяти вычисляется исполнительный (эффективный) адрес ЕА, который в общем случае является суммой, включающей следующие компоненты:
Смещение (Disp) – 8- или 16-битовое знаковое целое, включенное в команду;
База (Base) – содержимое базового регистра, которое обычно используется для указания на начало некоторого массива;
Индекс (Index) – содержимое индексного регистра, которое обычно используется для выбора элемента массива.
Исполнительный адрес ЕА в общем случае вычисляется по формуле
EA = Disp + Base + Index.
Прямая адресация. Этот способ является простейшим способом адресации ячеек оперативной памяти, в которых хранятся операнды. При прямой адресации исполнительным адресом ЕА является содержимое байтов смещения 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. и интерпретирует различные варианты вычисления физического адреса памяти.
Дата добавления: 2021-12-14; просмотров: 291;