Микропроцессор Intel 486

2.3. Система команд и методы адресации

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

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

Система команд и методы адресации – два тесно взаимосвязанных между собой понятия. С одной стороны, ни одной конкретной команды нельзя сформировать без использования того или иного метода адресации; с другой стороны, эти методы "не работают" вне конкретных команд.

Перечислим название методов адресации и дадим их краткую характеристику.

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

Непосредственная адресация. Операнд(ы) располагаются в самой команде, в ее последних байтах. Эти байты, как правило, находятся во внутренней очереди команд процессора, поэтому доступ к ним осуществляется также достаточно быстро.

Прямая адресация. В составе команды находится не сам операнд, а его адрес. Это простейший способ обратиться к данным, находящимся в ОЗУ.

Косвенно-регистровая адресация. В этом случае адрес операнда размещается в одном из регистров. Как правило, для этого используются регистры SI, DI, BX, BP. Содержимое регистра можно изменять (например, в цикле), при этом одна и та же команда будет оперировать различными ячейками памяти.

Базовая адресация. В этом случае адрес операнда (исполнительный адрес) получается как сумма содержимого регистров BX или BP и числовой константы, называемой смещением (displacement). Если использован регистр ВХ, то будет происходить обращение к сегменту данных в ОЗУ, а если регистр ВР – то к сегменту стека. Такой вид адресации можно, например, использовать для доступа к элементу некоего массива, номер которого заранее известен: регистр ВХ указывает на начало массива, а смещение представляет собой номер элемента.

Индексная адресация манипулирует содержимым сегмента данных и во всех микропроцессорах фирмы Intel по существу аналогична базовой. Адрес операнда вычисляется как сумма содержимого регистров SI или DI и смещения.

Базово-индексная адресация (а также – базово-индексная со смещением). Адрес операнда здесь образуется из суммы содержимого регистров ВХ (или ВР), регистров SI (или DI) и необязательного смещения (displacement).

Стековая адресация является разновидностью неявной. Операнд находится в стеке, на вершину которого указывает регистр SP.

Неявная (или подразумеваемая) адресация используется, например, при обращении к отдельным флагам или регистру флагов в целом, а также в командах обработки строк (цепочек данных) типа MOVS, SCAS и т.п.

Относительная адресация в микропроцессорах фирмы Intel не применяется к командам обработки данных, а используется лишь в командах переходов, вызовов подпрограмм и управления циклами. Адрес перехода образуется как смещение относительно текущего содержимого счетчика команд.

ВНИМАНИЕ! Следует особо отметить, что термин "смещение" при работе с микропроцессорной системой может пониматься в двух разных смыслах. Во-первых, это смещение в составе логического адреса памяти, то есть фактически расстояние от начала сегмента до конкретного (адресуемого) байта; во-вторых, это смещение в соответствующих методах адресации, то есть величина, прибавляемая к содержимому базового регистра. В первом случае используется английское слово OFFSET, во втором – слово DISPLACEMENT, часто сокращаемое до DISP.


Назад Содержание Вперёд