Чтение онлайн

на главную - закладки

Жанры

Искусство схемотехники. Том 3 (Изд.4-е)
Шрифт:

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

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

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

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

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

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

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

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

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

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

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

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

An

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

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

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

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

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

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

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

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

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

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

Синтаксис: d16(PC)

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

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

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

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

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

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

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

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

11.03. Представление команд на машинном языке

Как уже упоминалось выше, язык ассемблера, использованный нами в примерах, не является «объектным кодом», фактически выполняемым микропроцессором. Скорее это мнемоническое представление, удобное для написания программ. Последовательность команд языка ассемблера, составляющая программу, должна быть преобразована в последовательность двоичных байт, выполняемых процессором. Как и в случае МП 8086,

каждая команда языка ассемблера МП 68000 преобразуется (ассемблируется) в несколько байт машинного кода. Код операции (коп) всегда занимает 2 байт, но в тех случаях, когда требуется определить режимы адресации, к нему могут добавляться дополнительные слова (двухбайтовые). В зависимости от вида операции и режимов адресации команда может иметь длину от 2 до 10 байт. Например, команда

ADD.W (A1) +,D3

ассемблируется в код минимальной длины (2 байта), именно (D6 59)н, причем и номера регистров, и режимы адресации указываются (вместе с кодом операции) в самой 2-байтовой команде. С другой стороны, команда MOVE.W $FFFF,$A0000 ассемблируется в 8-байтовый код, а именно (33 FC FF FF 00 0А 00 00)н, причем в первых двух байтах указываются операция и режимы адресации, в следующих двух байтах — непосредственная константа, а в последних четырех байтах — абсолютный адрес (длинный) приемника.

ЦП, естественно, по самой своей конструкции умеет интерпретировать этот результирующий машинный код. Рассмотрение структуры машинного кода конкретной команды может помочь вам в понимании логики работы ЦП. На рис. 11.2 развернута структура самой употребительной команды МП 68000 MOVE.

Рис. 11.2. Структура команды MOVE.

Пройдемся по ней. Два лидирующих нуля идентифицируют (почти) команду, как операцию MOVE; следующие два бита определяют размер операндов, как это показано на рисунке. Любопытно отметить, что поскольку комбинация бит 00 не используется для описания размера, код 0000ххх…хх не входит число кодов команды MOVE (однако не думайте, что этот код пропадает — фирма Motorola использует его для других команд). Следующие 6 бит описывают режим адресации и регистр (если таковой используется) операнда-приемника, а последние 6 бит заключают ту же информацию об операнде-источнике; на рис. 11.2 показано, как кодируется эта информация. Заметьте, что последние 5 режимов адресации, не использующие регистр, разделяют между собой оставшийся номер режима (111) и различаются «фальшивыми» номерами регистра. Если режим адресации какого-либо из операндов требует дополнительной информации (непосредственные данные, абсолютные адреса, смещения), к коду команды добавляются дополнительные байты, как это показано на рис. 11.2.

Любопытно заметить, что МП 68000 расходует 1/4 х 3/4 = 19 % всех возможных кодов команд на команду MOVE, предоставляя все сочетания режимов адресации и для источника, и для приемника. Фирма Motorola не могла быть столь же расточительной для остальных 50 с лишком команд табл. 11.1, и возможности их адресации пришлось урезать.

К примеру, если использовать фирменное обозначение <еа> для полного набора команд, то можно образовать команды ADD < еа >, Dn или

ADD Dn, <еа>

но не все варианты полного сочетания

ADD <еа>, <еа>

В реальной жизни вы всегда пользуетесь ассемблером (который работает на компьютере или микропроцессорной «системе разработки») для выполнения черной работы по конструированию этих команд. Однако, чтобы убедиться, что мы действительно поняли суть дела, попробуем свои силы в «ручном ассемблировании». Закодируем команду

MOVE.W #$3FFF,(A1) +

Поделиться:
Популярные книги

Черный Маг Императора 6

Герда Александр
6. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
7.00
рейтинг книги
Черный Маг Императора 6

Барон Дубов

Карелин Сергей Витальевич
1. Его Дубейшество
Фантастика:
юмористическое фэнтези
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Барон Дубов

Наука и проклятия

Орлова Анна
Фантастика:
детективная фантастика
5.00
рейтинг книги
Наука и проклятия

Уязвимость

Рам Янка
Любовные романы:
современные любовные романы
7.44
рейтинг книги
Уязвимость

Ваше Сиятельство 10

Моури Эрли
10. Ваше Сиятельство
Фантастика:
боевая фантастика
технофэнтези
фэнтези
эпическая фантастика
5.00
рейтинг книги
Ваше Сиятельство 10

Служанка. Второй шанс для дракона

Шёпот Светлана
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Служанка. Второй шанс для дракона

Камень. Книга восьмая

Минин Станислав
8. Камень
Фантастика:
фэнтези
боевая фантастика
7.00
рейтинг книги
Камень. Книга восьмая

О, Путник!

Арбеков Александр Анатольевич
1. Квинтет. Миры
Фантастика:
социально-философская фантастика
5.00
рейтинг книги
О, Путник!

Солнце мертвых

Атеев Алексей Григорьевич
Фантастика:
ужасы и мистика
9.31
рейтинг книги
Солнце мертвых

Зайти и выйти

Суконкин Алексей
Проза:
военная проза
5.00
рейтинг книги
Зайти и выйти

Часограмма

Щерба Наталья Васильевна
5. Часодеи
Детские:
детская фантастика
9.43
рейтинг книги
Часограмма

Избранное. Компиляция. Книги 1-11

Пулман Филип
Фантастика:
фэнтези
героическая фантастика
5.00
рейтинг книги
Избранное. Компиляция. Книги 1-11

Надуй щеки!

Вишневский Сергей Викторович
1. Чеболь за партой
Фантастика:
попаданцы
дорама
5.00
рейтинг книги
Надуй щеки!

Крутой маршрут

Гинзбург Евгения
Документальная литература:
биографии и мемуары
8.12
рейтинг книги
Крутой маршрут