Методы адресации

В большинстве команд адрес состоит из двух частей: указатель метода адресации (3 разряда) и номер РОН, через который адресуется операнд. Есть восемь методов адресации. Если в качестве РОН используется счетчик команд (СК), то из числа этих же восьми методов выделяются четыре, играющие особое значение и имеющие специальные названия.

Важной особенностью системы является введение косвенной адресации — операции двойной штриховки. Это позволяет достичь большей простоты и динамизма в работе со структурами данных. Младший разряд указателя метода адресации определяет косвенную (1) и прямую (0) адресацию. Два других разряда определяют один из четырех типов адресации: регистровый (00), автоинкрементный (01), автодекрементный (10), индексный (11).

Если используется прямая адресация, то при регистровой адресации операнд размещен в регистре, номер которого следует за указателем метода адресации (рис. 1.11,а). Все остальные типы предполагают размещение операнда в памяти, а в регистре размещается его адрес (или часть адреса). При автоинкрементной и автодекрементной адресации (рис. 1.11,6 и е) происходит выборка операнда по адресу, указанному в регистре, и модификация этого регистра (изменение адреса). Если используются байтовые команды, содержимое регистра изменяется на 1, если команды, оперирующие словами, — на 2. При автоинкрементной адресации происходит увеличение адреса после выборки, при автодекрементном — уменьшение адреса до выборки. Эти команды поддерживают организацию циклов с переадресацией (т. е. обработку массивов), а также магазинную (стековую) структуру памяти, широко используемую при организации вложенных процедур (подпрограмм, прерываний, рекурсий) и при обработке строк (например, трансляции арифметических выражений). При индексной адресации (рис. 1.11,г) адрес операнда определяется как сумма содержимого регистра и слова, размещенного вслед за командой. Этот тип адресаций широко распространен и служит для обработки массивов данных. При этом одна и та же команда обрабатывает различные элементы структуры при изменении содержимого регистра (индекса).

Схемы получения операндов

Все эти типы используются и с косвенной адресацией. При этом операнд, полученный в результате описанных преобразований, будет и адресом операнда.

Так как счетчик команд является одним из РОН (R7), он может участвовать в адресации с помощью любого из восьми описанных методов. Четыре метода имеют отдельные названия, отражающие их особенности: относительный (индексный), косвенно-относительный (косвенно-индексный), непосредственный (косвенно-автоинкрементный), абсолютный (косвенно-автоинкрементный).

Относительная адресация является основным методом адресации внутри тела процедуры (т. е. при использовании меток), обеспечивающая перемещаемость процедур в оперативной памяти. При этом методе в слове, следующем за командой, указывается смещение операнда (оно может быть как положительным, так и отрицательным) относительно текущего места программы (рис. 1.12,а). Таким образом, при передаче управления программе она сразу ориентирована в памяти, не требуется загрузка базовых регистров и т. д. Такой способ реализации относительной адресации следует признать весьма эффективным. Непосредственная адресация реализуется оригинально, без явного размещения операнда в команде. Операнд размещается вслед за командой; перед его выборкой счетчик команд (R7) указывает на него (рис. 1.12,6). При автоинкрементном методе после выборки происходит увеличение содержимого R7, и он указывает на следующую команду (или на слово, относящееся ко второму операнду в команде; тогда после выборки второго операнда содержимое R7 еще увеличится, и к окончанию выборки операндов счетчик будет указывать на следующую команду. В отличие от других систем команд, непосредственный операнд является равноправным с остальными, т. е. имеет такие же форматы и может участвовать во всех операциях присваивания наряду с обычными операциями.

Схемы получения операндов

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