
-
Адресация машинных команд
Исполняемый в текущий момент времени код программы обычно располагается в оперативной памяти, которая является адресной. Адресное расположение кодов команд в памяти ставит в соответствие каждой хранимой единице информации специальное число, которое называется физическим адресом расположения. Размер наименьшей физической адресуемой единицы информации байт. Наиболее часто встречающееся количество байт в форматах машинных команд образуют слово. Кроме того, при адресации машинных команд используются производные от слова, кратные байту: полуслово, двойное слово, учетверённое слово и, по необходимости, другие.
В некоторых случаях длина слова может соответствовать разрядности энергонезависимой памяти.
Форматы машинных команд содержат указатели на операнды адресные коды в команде (Ак), которые не связаны с физическими исполнительными адресами расположения самих кодов команд в памяти при текущем выполнении программы. Для определения расположения кодов команд (данных) в памяти необходимо вычислить исполнительный адрес кода команды (Аи) или исполнительный адрес размещения данных.
Рассмотрим основные способы адресации в машинных командах.
1. Непосредственная адресация. Используется в двухадресных командах, где операнд источника (неприменимо для операнда приемника) содержит число, которое будет участвовать при исполнении этой команды. При непосредственной адресации число для действия расположено после кода операции и характеристики операнда приёмника, что вместе и составляет код команды. Команды с непосредственной адресацией входят в группу команд с константой, причём константа хранится в коде команды в памяти программ. Исполнительный адрес расположения константы соответствует физическому адресу расположения кода исполняющейся команды.
2. Прямая адресация к памяти. Данный способ адресации указывает исполнительный адрес физической ячейки памяти, где расположены данные, над которыми производятся вычисления. Прямая адресация используется для характеристик как операнда источника, так и операнда приёмника. Физический адрес ячейки памяти, над данными которой выполняется действие, расположен в коде команды. Прямая адресация может использоваться как для двухадресных команд, так и для одноадресных.
3. Прямая регистровая адресация. При прямой регистровой адресации данные для вычислений располагаются во внутренних регистрах микропроцессора, а номер регистра указывается в коде команды. Прямая регистровая адресация используется как для двухадресных команд, так и для одноадресных. Команды регистровой адресации входят в группу команд укороченной адресации. Безадресные команды используют неявную регистровую адресацию для выполнения известного действия над регистром.
4. Косвенная регистровая адресация к памяти. При косвенной регистровой адресации данные для вычислений располагаются в произвольной ячейке памяти, адрес которой хранится во внутреннем регистре микропроцессора. В коде команды указывается номер регистра, в котором хранится адрес ячейки памяти, где расположены данные для вычислений. Косвенная регистровая адресация может использоваться как для двухадресных команд, так и для одноадресных. Команды косвенной регистровой адресации входят в группу команд укороченной адресации.
5. Индексная регистровая адресация к памяти. При индексной регистровой адресации данные для вычислений располагаются в произвольной ячейке памяти, адрес которой хранится во внутреннем регистре микропроцессора, при этом номер регистра, в котором указывается регистр, где расположен адрес ячейки памяти, указывается в коде команды. Индексная регистровая адресация может использоваться как для двухадресных команд, так и для одноадресных. Команды косвенной регистровой адресации входят в группу команд укороченной адресации.
6. Относительная адресация к памяти. Исполнительный физический адрес операнда, где расположены данные, над которыми требуется выполнить действие, вычисляется суммированием адреса, указанного в регистре, и константы, расположенной в коде команды, относительно сегмента данных. В общем случае в качестве регистра базы используется любой регистр микропроцессора.
7. Прямая индексная адресация к памяти. Исполнительный физический адрес операнда, где расположены данные, над которыми требуется выполнить действие, вычисляется суммированием содержимого индексного регистра и смещения указанного в регистре общего назначения внутри выбранного сегмента данных. В общем случае в качестве регистров используются любые регистры микропроцессора.
8. Относительная индексная адресация к памяти. Исполнительный физический адрес операнда, где расположены данные, над которыми требуется выполнить действие, вычисляется суммированием содержимого индексного регистра и регистра базы, а также необязательного смещения в коде команды внутри выбранного сегмента данных. В общем случае в качестве регистров используются любые регистры микропроцессора. Относительная индексная адресация является наиболее сложной структурой для организации доступа к физической ячейке памяти и в большинстве случаев используется для характеристики операнда источника двухадресных команд.
9. Автоинкрементная (автодекрементная) адресация к памяти. Аналогична косвенной регистровой адресации, за исключением того, что после выполнения автоинкрементной операции содержимое регистра увеличивается на единицу, а перед выполнением автодекрементной операции уменьшается на единицу. Выполнение операции в цикле позволяет выполнить идентичные действия над массивом данных.
10. Поразрядная адресация к памяти. Позволяет выполнять действие над одним разрядом (битом) данных, которые могут быть расположены как в регистре, так и в ячейке памяти, при этом разряд, подвергающийся воздействию, указывается либо в другом регистре, либо константой в коде команды.
По необходимости возможна организация произвольной комбинации сочетания способов адресации операндов источника и приёмника (табл. 5.1).
Таблица 5.1
Таблица сочетания способов адресации операндов к памяти
Адресация приёмника |
Адресация источника |
|||||||||
Непосредственная |
Прямая |
Прямая регистровая |
Косвенная регистровая |
Индексная регистровая |
Относительная |
Прямая индексная |
Относительная индексная |
Автоинкрементная (автодекрементная) |
Поразрядная |
|
Непосредственная |
|
|
|
|
|
|
|
|
|
|
Прямая |
+ |
+ |
+ |
+ |
+ |
|
|
|
|
|
Прямая регистровая |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
Косвенная регистровая |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
Индексная регистровая |
|
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
|
Относительная |
|
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
|
Прямая индексная |
|
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
|
Относительная индексная |
|
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
|
Автоинкрементная (автодекрементная) |
|
+ |
+ |
+ |
|
|
|
|
|
|
Поразрядная |
+ |
+ |
+ |
+ |
|
|
|
|
|
|
Вывод. Представленные в табл. 5.1 сочетания способов адресации операндов источника и приёмника позволяют организовать расширенные возможности для доступа и обработки данных, расположенных в определённой закономерности (матрицы, динамические и статические векторы, таблицы, списки, словари и т.д.), при наименьших затратах аппаратных средств для схемотехнического проектировании микропроцессора. По необходимости возможна организация произвольного сочетания способов адресации операндов источника и приёмника.