При непосредственной адресации (НА) в адресном поле команды вместо адреса содержится непосредственно сам операнд. Этот способ может применяться при выполнении арифметических операций, операций сравнения, а также для загрузки констант в регистры.
При прямой или абсолютной адресации (ПА) адресный код прямо указывает номер ячейки памяти, к которой производится обращение (рис. 4.20).
Рис. 4.20. Прямая адресация
Косвенная адресация
При косвенная адресация (КА) в адресном поле команды (органиченном) указывается адрес ячейки, которая содержит полноразрядный адрес операнда (рис. 4.21). Запись (Ак) означает содержимое ячейки, адрес которой указан в
Рис. 4.21. Косвенная адресация
скобках.
Рис. 4.22. Регистровая адресация
Регистровая адресация (РА) напоминает прямую адресацию. Различие состоит в том, что адресное поле инструкции указывает не на ячейку памяти, а на регистр процессора (рис. 4.22).
Рис. 4.23. Косвенная регистровая адресация
Косвенная регистровая адресация (КРА) представляет собой косвенную адресацию, где исполнительный адрес операнда хранится не в ячейке основной памяти, а в регистре процессора. Соответственно, адресное поле команды указывает не на ячейку памяти, а на регистр (рис. 4.23).
При адресации со смещением исполнительный адрес формируется в результате суммирования содержимого адресного поля команды с содержимым одного или нескольких регистров процессора (рис. 4.24).
Ниже рассматриваются основные способы адресации со смещением, каждый из которых, впрочем, имеют собственное название.
Рис. 4.24. Адресация со смещением
Относительная адресация
Рис. 4.25. Относительная адресация
При относительной адресации (ОА) для получения исполнительного адреса операнда содержимое поля Ак команды складывается с содержимым счетчика команд (рис. 4.25). Таким образом, адресный код в команде представляет собой смещение относительно адреса текущей команды.
В базовой регистровой адресации (БРА) регистр, называемый базовым, содержит полноразрядный адрес, а поле Ас – смещение относительно этого адреса. Ссылка на базовый регистр может быть явной или неявной. В некоторых ВМ имеется специальный базовый регистр и его использование является неявным, то есть поле R в команде отсутствует (рис. 4.26).
Рис. 4.26. Базовая регистровая адресация
с базовым регистром
Более типичен случай, когда в роли базового регистра выступает один из регистров общего назначения (РОН), тогда его номер явно указывается в поле R команды (рис. 4.27).
Рис. 4.27. Базовая регистровая адресация
с использованием одного из РОН
Рис. 4.28. Индексная адресация с индексным регистром
Индексная адресация
При индексной адресации (ИА) поле Ас содержит адрес ячейки памяти, а регистр (указанный явно или неявно) – смещение относительно этого адреса.
Этот способ адресации похож на базовую регистровую адресацию. Вычисление исполнительного адреса операнда производится идентично (рис. 4.28, 4.29).
В большинстве ВМ увеличение или уменьшение содержимого индексного регистра до или после обращения к нему осуществляется автоматически как часть машинного цикла. Такой прием называется автоиндексированием.
Рис. 4.29. Индексная адресация
с использованием одного из РОН
Страничная адресация
Рис. 4.30. Страничная адресация
Страничная адресация (СТА) предполагает разбиение адресного пространства на страницы. Страница определяется своим начальным адресом, выступающим в качестве базы. Старшая часть этого адреса хранится в специальном регистре – регистре адреса страницы (РАС). В адресном коде команды указывается смещение внутри страницы, рассматриваемое как младшая часть исполнительного адреса. Исполнительный адрес образуется конкатенацией (присоединением) Ас к содержимому РАС, как показано на рис. 4.30. На рисунке символ || обозначает операцию конкатенации.