Уже на заре развития вычислительной техники был найден простой выход из проблемы размещения программ и структур данных в ограниченной памяти - введение системы способов адресации.
Наиболее простым способом указания адреса является включение его в состав (структуру) команды. Но обычно весьма удобными и эффективными являются «манипуляции» адресом, имеющие, в основном, следующие цели:
- разрешить команде осуществлять доступ к ячейке памяти, адрес которой вычисляется во время прогона (реализации) программы; тем самым облегчается доступ к массивам, спискам и т.п.;
- допустить работу с адресами в форме, наиболее подходящей для таких широко применяемых структур данных, как стеки и одномерные массивы;
- указывать полный адрес памяти наименьшим количеством разрядов (делать команду короче);
- вычислять адреса относительного местоположения команды, чтобы обеспечить загрузку программы в любую область памяти без изменения программы.
В конечном итоге способы адресации обеспечивают расширение функциональных возможностей машины, прежде всего по объему и форме хранения данных, и, иногда, повышение производительности. Существуют и особые случаи, диктующие изменения различных способов адресации, например, память с «провалами», т.е. память, в которой физически отсутствует часть адресов.
<120>
Необходимо различать понятия «адресный код» и «исполнительный адрес».
Адресный код (Ак) – это тот код, который содержится в адресной части команды. Исполнительным же адресом (Аи) является тот фактический адрес (номер) ячейки ОЗУ, в которой размещаются данные, над которыми и выполняется заданное кодом операции преобразование. Можно несколько абстрактно записать:
Последнее выражение справедливо и для команд передачи управления. В этом случае по исполнительному адресу в ЗУ размещается фактический адрес передачи управления.
Операнд является содержимым некоторой ячейки с исполнительным адресом:
О = < Аи >.
В настоящее время в ЭВМ имеется большой набор типов адресации.
Причем существует определенный разнобой в наименованиях этих типов. Попытаемся в них разобраться.
Прежде всего, выделяют два основных принципа адресации: прямой и косвенный.
При прямом принципе адресации исполнительный адрес берется непосредственно из команды, либо вычисляется с использованием значения, указанного в команде, и содержимого какого-либо регистра СОЗУ (ячейки ОЗУ). Прямой адрес может быть «неполным».
При косвенном принципе предполагается, что в команде содержится косвенный адрес, т.е. адрес ячейки, в которой содержится исполнительный адрес, либо содержатся данные, используемые для вычисления исполнительного адреса. В общем случае возможно существование нескольких «вложений», когда по косвенному адресу команды располагается еще один косвенный адрес и т.д.
<121>
Существующие типы адресации и их характеристики:
1) Абсолютная (иногда ее и называют прямой). Это самая простая и понятная, так как
Аи = Ак.
Существуют понятия «короткая» и «длинная» абсолютные адресации: «короткая» отличается тем, что использует в адресном коде неполное количество разрядов и старшим разрядом адреса присваиваются значения, равные «знаку» (содержимому знакового разряда) адресного кода (характерно для использования переменной длины адресной части).
Рис. 3.1.3.01.
2) Регистровая (абсолютная регистровая). Операнд хранится в одном из регистров СОЗУ; обычно в этом случае адрес (номер) регистра входит в КОП, а иногда вводится и в аббревиатуру команды.
Рис. 3.1.3.02.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.