4 Способы адресации
•Неявная адресация. Источники операндов и приемник результата указываются неявно, обычно с помощью кода операции команды.
КОП Пример. (АС):=(АС)+1.
•Непосредственная адресация. В коде команды задается сам операнд (операнды).
КОП |
Операнд (О) |
Пример. (АС):=(АС)+О. |
|
|
|
•Прямая (абсолютная) адресация. В коде команды задается адрес (А) операнда.
КОП |
А |
|
|
Память |
|
|
АЕ=А |
|
|
|
|
Операнд |
||
|
|
|
|
(АС):=(АС)+М[АЕ].
•Регистровая (прямая регистровая) адресация. В
коде команды задается номер NR регистра, содержащего операнд.
|
|
|
|
Регистры |
|
|
КОП |
NR |
АЕ= NR |
||
|
|
||||
|
|
||||
|
|
|
|
||
|
|
|
Операнд |
||
(АС):=(АС)+R[АЕ]. |
|||||
|
|||||
|
•Косвенная адресация. В коде команды при одноступенчатой косвенной адресации задается адрес (А) ячейки памяти, в которой хранится адрес
операнда (АО). Косвенная адресация может быть многоступенчатой, в том числе и с произвольным числом ступеней.
|
|
|
Память |
КОП |
А |
|
|
|
|
||
|
|
||
|
|
|
|
|
А |
|
|
|
|
|
АО |
|
АЕ=М[А] |
|
|
|
Операнд |
||
|
|
|
|
|
|
|
|
|
|
|
|
(АС):=(АС)+М[М[А]]. (АС):=(АС)+М[…М[А]].
•Косвенная регистровая адресация. В коде
команды задается номер NR регистра, содержащего адресоперанд(А. О) ячейки памяти, в которой хранится
|
|
|
|
|
Память |
|
КОП |
NR |
|
Регистры |
|||
|
||||||
|
|
|
|
|
|
|
|
|
NR |
|
|
|
|
|
|
АО |
|
|||
|
|
|
|
|
||
|
|
|
|
АЕ |
|
|
|
|
|
|
|
||
|
|
Операнд |
||||
|
|
|
АЕ=R[NR] |
|
||
|
|
|
(АС):=(АС)+М[R[NR]].
•Базовая адресация. Исполнительный адрес вычисляется путем суммирования адреса (D) из команды (смещения) и базы (B), которая берется из специального регистра базы (RB) или регистра общего назначения (РОН), выбираемого по номеру, указанному в команде. АЕ=(RB)+D или АЕ=R[NR]+D.
RC |
КОП |
NR |
|
|
D |
|
Память |
|||
Регистры |
|
|
RB |
|
||||||
|
|
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
В |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
B |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Операнд |
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
||
NR |
|
|
|
АЕ=(RB)+D |
|
|||||
|
|
|
|
|||||||
|
|
|
|
|
(АС):=(АС)+М[(RB)+D].
•Относительная адресация. Исполнительный адрес вычисляется путем суммирования адреса (D) из команды (смещения) и содержимого программного счетчика (РС). Обычно поле D интерпретируется как двоичное число в дополнительном коде, что позволяет, задавать как положительное, так и отрицательное смещение.
RC |
КОП |
|
|
D |
|
Память |
|||
Программный |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
РС |
|
|
|
|
|
|
|
|
счетчик |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Операнд |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
АЕ=(РС)+D |
||||||
|
|
|
|
||||||
|
|
|
|
(АС):=(АС)+М[(РС)+D].
•Индексная адресация. Исполнительный адрес вычисляется путем суммирования адреса (А) из команды и индекса (I), который берется из специального регистра индекса (RI) или РОН. Индекс может быть умножен на масштабный множитель m=1,2,4,8. АЕ=(RI)m+A или АЕ=R[NR]m+A .
RC |
КОП |
NR |
A |
|
Память |
|||||
Регистры |
|
|
|
RI |
|
|
|
|
|
|
|
I |
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
I |
|
|
|
|
|
|
|
|
||
|
m |
|
|
|
|
|
|
|||
|
|
|
|
|
Операнд |
|||||
|
|
|
|
|
||||||
|
|
|
|
|
||||||
|
|
|
|
|
||||||
NR |
|
|
|
|
|
|
|
|
|
|
|
|
АЕ=(RI)m+A |
|
|||||||
|
|
|
||||||||
|
|
|
|
|
(АС):=(АС)+М[(RI)m+A], (RI):=(RI)+C.
•Автоиндексация. При индексной адресации осуществляется уменьшение или увеличение содержимого индексного регистра до или после обращения к нему с помощью дополнительной команды. Обычно изменение содержимого регистра происходит на единицу, поэтому целесообразно сделать это «автоматически» микропрограммно в команде, использующей индексную адресацию.
Автоинкрементная |
Автодекрементная |
||
|
|
|
|
Постинкре- |
Преинкре- |
Постдекре- |
Предекре- |
ментная |
ментная |
ментная |
ментная |
АЕ=(RI)+A, |
(RI):=(RI)+1, |
АЕ=(RI)+A, |
(RI):=(RI)-1, |
(RI):=(RI)+1 |
АЕ=(RI)+A |
(RI):=(RI)-1 |
АЕ=(RI)+A |