Описание процессора i8086 для программиста


Адреса переходов - часть 2


Часто отклонение, используемое при относительной адресации, называют смещением. Однако это может привести к путанице, поскольку термин “смещение” при программировании для микропроцессора 8086 используется в первую очередь для обозначения одной из двух частей логического адреса (см. подраздел 2.2.2 “Сегментация”). Термин “отклонение”, правда, тоже используется – для обозначения одного из компонентов эффективного адреса операнда, расположенного в памяти (см. параграф “Операнды в памяти” этого подраздела), однако значение этого термина оказывается в данном случае ближе к относительной адресации, поскольку и в том, и в другом случае отклонение фактически показывает, на сколько байтов в ту или иную сторону отстоит адресуемая ячейка от базового адреса, т.е. адреса следующей инструкции в команде относительного перехода или суммы содержимого регистров, используемых при формировании эффективного адреса операнда[4].

При прямой адресации код команды содержит полный адрес следующей выполняемой команды в формате “сегмент : смещение”, причём сначала располагается смещение, а потом – селектор сегмента. Прямая адресация используется инструкциями JMP

и CALL, позволяя передать им управление любой команде в памяти вычислительной машины.

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

При косвенной адресации, доступной только инструкциям CALL и JMP, возможно выполнение как ближних, так и дальних переходов. В коде команды задаётся либо регистровый операнд (только для ближнего перехода), либо операнд в памяти (для ближнего или дальнего перехода), причём способ определения этого операнда не отличается от принятого для команд обработки данных (см. параграфы “Регистровые операнды” и “Операнды в памяти” этого подраздела).

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

Если выполняется дальний переход, адрес следующей инструкции занимает два слова памяти: в первом хранится смещение, а во втором – селектор сегмента, которые загружаются соответственно в регистры IP и CS. Сама команда перехода задаёт адрес первого их этих слов (операнд в памяти).

Косвенной данный вид адресации назван по той причине, что код инструкции определяет не сам адрес перехода, а только его местоположение.




- Начало -  - Назад -  - Вперед -