Вопрос № 16 Адресность команды, Понятие способов адресации и их влияние на формат команды. Основные способы адресации
Формат команды задает длину команды в байтах или словах, количество полей для указания адреса, т.е. адресность команды, расположение полей в команде и т.д.
Данные (элементы информации), участвующие в операции, определяются с помощью адресов, указанных в командах. Существует большое число способов представления адресов в командах и их определения (вычисления) с целью доступа к операндам (данным) на основе информации, указанной в команде.
Способ адресации - правило определения (вычисления) адреса операнда на основе информации, указанной в команде, т.е. способ адресации определяет порядок выполнения действий над адресной частью команды и содержимым одного или нескольких регистров ЦП ПК для вычисления исполнительного адреса Аисп, по которому хранится операнд в памяти.
Исполнительный адрес Аисп - адрес операнда в памяти (М) или в блоке РОНов (АХ, ВХ, СХ, DX и др.). Аисп - это целое двоичное число без знака, число разрядов n которого определяет возможное число ячеек памяти, к которым можно обращаться.
К основным способам адресации относятся следующие: прямая, непосредственная, косвенная, относительная.
Прямая адресация. Физический адрес операнда совпадает с кодом в адресной части команды (рис. 11.4). Формальное обозначение:
Операндi = (Аi),
где Аi – код, содержащийся в i-м адресном поле команды.
Непосредственная адресация. В команде содержится не адрес операнда, а непосредственно сам операнд (рис. 11.5):
Операндi = Аi
Непосредственная адресация позволяет повысить скорость выполнения операции, так как в этом случае вся команда, включая операнд, считывается из памяти одновременно и на время выполнения команды хранится в процессоре в специальном регистре команд (РК). Однако при использовании непосредственной адресации появляется зависимость кодов команд от данных, что требует изменения программы при каждом изменении непосредственного операнда.
Косвенная адресация (рис. 11.6). Адресная часть команды указывает
адрес ячейки памяти (рис. 11.6,а) или номер регистра (рис. 11.6,б), в которых содержится адрес операнда:
Операндi = ((Аi))
Применение косвенной адресации операнда из оперативной памяти
при хранении его адреса в регистровой памяти существенно сокращает длину поля адреса, одновременно сохраняя возможность использовать
для указания физического адреса полную разрядность регистра.
Недостаток этого способа – необходимо дополнительное время для
чтения адреса операнда. Вместе с тем он существенно повышает гибкость
программирования. Изменяя содержимое ячейки памяти или регистра,
через которые осуществляется адресация, можно, не меняя команды в
программе, обрабатывать операнды, хранящиеся по разным адресам.
Косвенная адресация не применяется по отношению к операндам,
находящимся в регистровой памяти.
Относительная адресация. Этот способ используется тогда, когда па-
мять логически разбивается на блоки, называемые сегментами. В этом
случае адрес ячейки памяти содержит две составляющих: адрес началасегмента (базовый адрес) и смещение адреса операнда в сегменте. Адрес
операнда определяется как сумма базового адреса и смещения относи-
тельно этой базы:
Операндi = (базаi + смещениеi)
Для задания базового адреса и смещения могут применяться ранее
рассмотренные способы адресации. Как правило, базовый адрес находится в одном из регистров регистровой памяти, а смещение может быть задано в самой команде или регистре.
Рассмотрим два примера.
1. Адресное поле команды состоит из двух частей (рис. 11.7): в одной указывается номер регистра, хранящего базовое значение адрес (начальный адрес сегмента), а в другом адресном поле задается смещение, определяющее положение ячейки относительно начала сегмента. Именно такой способ представления адреса обычно и называют относительной адресацией.
2. Первая часть адресного поля команды также определяет номер базового регистра, а вторая содержит номер регистра, в котором находится смещение (рис. 11.8). Такой способ адресации чаще всего называют базово-индексным.
Главный недостаток относительной адресации – большое время вычисления физического адреса операнда. Но существенное преимущество этого способа адресации заключается в возможности создания перемещаемых программ – программ, которые можно размещать в различных частях памяти без изменения команд программы. То же относится к программам, обрабатывающим по единому алгоритму информацию, расположенную в различных областях ЗУ. В этих случаях достаточно изменить содержимое базового адреса начала команд программы или массива данных, а не модифицировать сами команды. По этой причине относительная адресация облегчает распределение памяти при составлении сложных программ и широко используется при автоматическом распределении памяти в ультипрограммных вычислительных системах.