- •Система команд микропроцессора
- •Системы счисления
- •Шестнадцатеричная система счисления
- •Десятичная система счисления
- •Перевод чисел из одной системы счисления в другую
- •Перевод в десятичную систему счисления
- •Перевод в двоичную систему счисления Перевод из десятичной системы счисления
- •Перевод из двоичной системы счисления
- •Числа со знаком
- •Перевод из шестнадцатеричной системы счисления
- •Перевод в шестнадцатеричную систему счисления Перевод из десятичной системы счисления
- •Структура машинной команды
- •Способы задания операндов команды
- •Прямая адресация
- •Косвенная базовая (регистровая) адресация
- •Косвенная базовая (регистровая) адресация со смещением
- •Косвенная индексная адресация со смещением
- •Косвенная базовая индексная адресація
- •Косвенная базовая индексная адресация со смещением
- •Функциональная классификация машинных команд
- •Задание по практическому занятию № 3:
- •Часть 1.
- •Часть 2.
Прямая адресация
Это простейший вид адресации операнда в памяти, так как эффективный адрес содержится в самой команде и для его формирования не используется никаких дополнительных источников или регистров. Эффективный адрес берется непосредственно из поля смещения машинной команды (см. рис. 6.5), которое может иметь размер 8, 16, 32 бит. Это значение однозначно определяет байт, слово или двойное слово, расположенные в сегменте данных.
Прямая адресация может быть двух типов:
Относительная прямая адресация. Используется для команд условных переходов, для указания относительного адреса перехода. Относительность такого перехода заключается в том, что в поле смещения машинной команды содержится 8, 16 или 32-битное значение, которое в результате работы команды будет складываться с содержимым регистра указателя команд ip/eip. В результате такого сложения получается адрес, по которому и осуществляется переход.
К примеру:
Несмотря на то, что в команде указана некоторая метка в программе, ассемблер вычисляет смещение этой метки относительно следующей команды (в нашем случае это mov al,2) и подставляет его в формируемую машинную команду jс.
Абсолютная прямая адресация. В этом случае эффективный адрес является частью машинной команды, но формируется этот адрес только из значения поля смещения в команде. Для формирования физического адреса операнда в памяти микропроцессор складывает это поле со сдвинутым на 4 бит значением сегментного регистра. В команде ассемблера можно использовать несколько форм такой адресации. К примеру:
Но такая адресация применяется редко; обычно используемым ячейкам в программе присваиваются символические имена. В процессе трансляции ассемблер вычисляет и подставляет значения смещений этих имен в формируемую им машинную команду в поле смещение в команде (см. рис. 6.5). В итоге получается так, что машинная команда прямо адресует свой операнд, имея, фактически, в одном из своих полей значение эффективного адреса. К примеру:
Мы получим тот же результат, что и при использовании команды
mov ax.dword ptr [0000]
Остальные виды адресации относятся к косвенным. Слово «косвенный» в названии этих видов адресации означает то, что в самой команде может находиться лишь часть эффективного адреса, а остальные его компоненты находятся в регистрах, на которые указывают своим содержимым байт modr/m и, возможно, байт sib.
Косвенная базовая (регистровая) адресация
При такой адресации эффективный адрес операнда может находиться в любом из регистров общего назначения, кроме sp/esp и bp/ebp (это специфические регистры для работы с сегментом стека).
Синтаксически в команде этот режим адресации выражается заключением имени регистра в квадратные скобки [ ]. К примеру, команда mov ах,[есх] помещает в регистр ах содержимое слова по адресу из сегмента данных со смещением, хранящимся в регистре есх.
Так как содержимое регистра легко изменить в ходе работы программы, данный способ адресации позволяет динамически назначить адрес операнда для некоторой машинной команды. Это свойство очень полезно, например, для организации циклических вычислений и для работы с различными структурами данных типа таблиц или массивов.
