# Способы адресации команд
Под адресацией команд понимается способ вычисления следующей команды. Принудительная адресация. Адрес следующей команды в самой команды. Недостатки:
- Неперемещаемость программы.
- Команды, с точки зрения длины формата, длинные.
При написании программы в адресном поле следующей команды размещается следующий адрес, что неэффективно. Программист, как правило, располагает команды последовательно, в соседних ячейках памяти. Значит адрес следующей команды вычисляется просто по адресу текущей программы. Для этого в состав процессора вводится специальный узел (программный счетчик PC, СчК, СчАК), обеспечивающий последовательную адресацию команд (естественная адресация). Схема формирования адреса следующей команды: PC := (PC) + lk lk – длина предшествующей команды Однако, при осуществлении ветвления, в программах реализуются циклические участки программы выполняющие обращения к процедурам и подпрограммам, следовательно, естественный порядок выполнения команд, безусловно нарушается. Для этого используются специальные команды – команды передачи управления. Если в командах с естественным порядком нет адресного поля, то в командах передачи управления, адресное поле обязательно, в нем, в общем случае задается адресный код, на основе которого, при выполнении этой команды формируется физический адрес последующей команды.
Способы формирования исполнительных адресов команд различны:
Неявная адресация. По существу адресное поле в команде управления отсутствует. Адрес следующей команды извлекается из фиксированных ячеек или адрес фиксирован. Обычно, неявная адресация используется для фиксированных причин прерывания
Абсолютная адресация. В адресном поле команды передачи управления, указывается полный адрес следующей команды.
Непрямая адресация.
- Относительная адресация – адресация относительно текущего адреса. В адресном поле команды задается относительный адрес перехода. Если память имеет кольцевую структуру, то только сложением можно добиться перехода в любое место памяти. Но если в распоряжении пользователя достаточно много памяти, то в этом нет необходимости. Кроме того, есть множество программ, к которым пользователи доступа не имеют, поэтому реально команды с относительной адресацией имеют упорядоченное смещение. Если величина смещения меньше разрядности адреса и смещение со знаком, то для выполнения сложения требуется дополнительное расширение второго операнда. Такая относительная адресация позволяет иметь короткие команды передачи управления
- Косвенная адресация. В схеме косвенной адресации, память для хранения адресов не применяется. Применяется только косвенная регистровая адресация, где хранят адрес перехода. Косвенная адресация требует короткого адресного поля. Позволяет перемещать программы в любое место памяти. Если еще допустить применение относительной адресации, то исполнительный адрес следующей команды вычисляется по схеме. PC := (reg)+disp. Команда Disp>0 Disp<0
- Стековая адресация. Стековая адресация применяется прежде всего при работе с подпрограммами и обслуживании прерываний. Команды передачи управления со стековой адресацией фактически безадресные. Схема работы стека, как и у данных. Стек в этом случае является универсальным и используется, как для адресации данных так и для команд. Следовательно, возникают сложности распознавания команд и данных.