logo
Шпоры по ВТ

42 Способы адресации, основанные на преобразовании кода команды

Способы, в которых исполнительный адрес определяется адресным кодом команды и содержимым регистров МП, включают относительную и индексную адресации. При относительной адресации (базировании) исполнительный адрес определяется суммой адресного кода команды и некоторого числа, называемого базовым адресом. Базовые адреса хранятся в отведённых для этой цели регистрах, а в команде выделяется поле для указания номеров этих регистров. Относительная адресация позволяет при меньшей длине адресного кода команды обеспечить доступ к любой ячейке памяти. Для этого число разрядов в базовом адресе выбирают таким, чтобы можно было адресовать любую ячейку оперативной памяти, а адресный код самой команды используют для представления лишь сравнительно короткого "смещения" (обозначают буквой D):

Смещение D определяет положение операнда относительно начала массива данных, задаваемого базовым адресом. Поскольку суммирование связано с потерей времени, то для формирования исполнительного адреса используют также метод совмещения. В этом случае базовый адрес содержит старшие, а смещение – младшие разряды исполнительного адреса, которые объединяются в регистре адреса. Однако при совмещении базовый адрес может задавать не любую ячейку, а только те, адреса которых содержат нули в младших разрядах, соответствующих смещению. Относительная адресация обеспечивает так называемую перемещаемость программ, т.е. возможность передвижения программ в памяти без изменений внутри самой программы. Развитием метода базирования является индексация. Механизм индексации обеспечивает автоматическую модификацию адресных частей команд и используется для управления циклическими вычислительными процессами. В данном случае модификация заключается в изменении адресных частей соответствующих команд согласно расположению в оперативной памяти обрабатываемых операндов. Для выполнения индексации используются так называемые индексные регистры, а в формате команды выделяется поле для указания номера индексного регистра. Наименование индексных регистров связано с тем, что первоначально они предназначались для хранения индекса текущего элемента массива ai. Хотя назначение индексных регистров значительно расширилось, термин сохранился. Исполнительный адрес формируется путём сложения адресного кода команды (смещения) с содержимым индексного регистра (индексом), а при наличии базирования – и с базовым адресом. Отличительной чертой индексации является то, что код команды, хранящейся в оперативной памяти, остаётся неизменным.

Следовательно, одна и та же команда может использоваться при соответствующих изменениях индекса для формирования различных исполнительных адресов. Для управления индексацией используются команды, задающие операции над содержимым индексных регистров. Можно выделить следующие основные виды индексных операций: а)засылка в соответствующий индексный регистр начального значения индекса; б) изменение индекса и в)проверка окончания циклических вычислений. Изменение индекса состоит в сложении или вычитании значения индекса с фиксированным приращением. Соответствующая команда указывает номер индексного регистра, а также значение и знак (или адрес) приращения. Для проверки выхода из цикла используются или обычная команда условного перехода, или специальные команды "условный переход по счётчику" и "условный переход по индексу". Счётчиком обычно служит один из регистров общего назначения, в который перед началом цикла загружается число повторений цикла. Команда "условный переход по счётчику" может иметь, например, следующий вид:

Эта команда уменьшает на 1содержимое счётчика (здесь регистра с номером R1), и если оно после этого не равно 0, то управление передаётся по адресу, определяемому суммой содержимого регистров Х2 и В2 с содержимым поля D2. В противном случае выход из цикла.

Команда "условный переход по индексу" имеет, например, вид:

Здесь R1 – номер индексного регистра; R3 – номер регистра, хранящего приращение; сумма содержимого регистра В2 с содержимым поля D2 определяет адрес начала цикла; в регистре с номером R3+1 хранится предельное значение индекса.

Команда производит суммирование содержимого регистров R1 и R3. Если новое значение индекса меньше или равно предельному, то это новое значение помещается в регистр R1 и происходит переход к началу цикла (повторение цикла). В противном случае выход из цикла.

Аналогично выполняется проверка окончания цикла в случае обратного условия.