Искусство схемотехники. Том 3 [Изд.4-е] | страница 6




Режимы адресации. В приведенных выше примерах команд операции выполнялись над константами, содержимым регистров и содержимым ячеек памяти (или портов). Архитектура МП 68000 предусматривает богатый набор «режимов адресации» для определения этих операндов. В табл. 11.3 перечислены 12 режимов адресации, которые рассматриваются фирмой Motorola как 14. Вот что они значат:

Регистровая прямая адресация

Синтаксис: Dn (или An)

Пример: MOVE.W D0,D1

Операндом является содержимое указанного регистра


Непосредственная адресация

Синтаксис: #хххх

Пример: MOVE.B #$FF,D0

Операндом является указанная константа


Абсолютная адресация к памяти

Синтаксис: xxxx.W или xxxx.L

Пример: ADD.W D0JB000.W

Адрес операнда указан как непосредственная константа


Косвенная адресация

Синтаксис: (An)

Пример: SUB.W D0, (А0)

Указанный регистр содержит адрес операнда


Косвенная постинкрементная адресация

Синтаксис: (Аn) +

Пример: MOVE.B (А0) +, (А1) +

Аналогична косвенной, но после выполнения операции An инкрементируется на величину размера


Косвенная предекрементная адресация

Синтаксис: — 1Аn)

Пример: MOVE.W D0,-(A7)

An сначала декрементируется на величину размера, затем выполняется косвенная адресация


Косвенная адресация со смещением

Синтаксис: d>16(An)

Пример: MOVE.L (А0),100(А0)

Адрес операнда определяется как (An) плюс 16-разрядное знаковое смещение d>16


Косвенная индексная адресация со смещением

Синтаксис: d>8(An,Xn.W [или. L]) (Хn может быть либо Dn, либо An)

Пример: MOVE.L 100(A0),100(A0,D7)

Адрес операнда определяется как (An) плюс (Хп) плюс 8-разрядное знаковое смещение d>8


PC-относительная адресация со смещением

Синтаксис: d>16(PC)

Пример: LEA 100(РС), АЗ

Адрес операнда отличается от адреса этой команды на величину 16-разрядного знакового смещения


PC-относительная адресация с индексом и смещением

Синтаксис: d>8(PC,Xn.W или. L)

Пример: MOVE.W 100(PC,D0.W),D1

Адрес операнда отличается от адреса этой команды на величину суммы 8-разрядного знакового смещения и содержимого Хn.


Несколько пояснений: в первых двух режимах не адресуется память; адресуются регистры или непосредственные константы (т. е. константы, включенные в поток команд; они могут быть только источниками, но никогда не приемниками). Все остальные режимы служат для адресации памяти. Абсолютная адресация удобна для обращения к портам ввода- вывода или к отдельным ячейкам памяти.

Косвенная (особенно с постинкрементом или предекрементом) хороша для работы с массивами или стеком; кроме того, если адрес уже находится в адресном регистре, такая адресация быстрее абсолютной, так как при выполнении команды адрес (абсолютный) не требуется извлекать из памяти. PC-относительные режимы адресации особенно удобны при написании «позиционно-независимых» программ, поскольку все адреса определяются относительно самих программных строк; заметьте, что 8- и 16-разрядные смещения представляют собой знаковые целочисленные дополнения до 2, позволяя описывать ячейки, отстоящие от точки отсчета на ±127 или ±32767 байт соответственно. Обратите еще внимание на то, что непосредственные или РС-относительные операнды нельзя модифицировать (они «неизменяемы»).