Поддержка механизма модульности. Уровни доступа. Слова расширения. Использование команд CAS/CAS2 в системных программах, страница 5

MC68000,  т.е. такая кодировка обеспечивает совместимость снизу вверх. Использование любой другой  кодировки  MC68020  означает потерю  совместимости сверху вниз. Этого следует всячески избегать, так как на ранних моделях процессоров  корректность  слов расширения  не  проверяется. Необходимость соблюдения предосторожностей для обеспечения совместимости сверху вниз иллюстрируется на следующих двух примерах.

Пример 1. Сравнение  косвенной  адресации  по адресному регистру с индексированием на MC68020 и MC68000

программа                       программа для MC68000                     для MC68020

исходный текст на языке ассемблера

MOVE.L OFFSET(A0,D0.L),D1       MOVE.L (OFFSET,A0,D0.L*4),D1

машинный код

2230                              2230

08XX                              0CXX

Как видно из машинного кода, две команды различаются лишь в одном бите (бит 10 в слове расширения), хотя исходные тексты различаются довольно сильно. Если бы команда  MC68020  выполнялась на  MC68000,  то  процессор  интерпретировал  бы ее как команду

MC68000 и извлек бы неверный операнд; исключение при этом  возбуждено бы не было.

Пример 2. Сравнение косвенной адресации по  адресному  регистру с индексированием на MC68020 и MC68000

программа                       программа для MC68000                     для MC68020

исходный текст на языке ассемблера

MOVE.L OFFSET(A0,D0.L),D1       MOVE.L ([OFFSET,A0,D0.L*4]),D1

машинный код

2230                              2230

08XX                              0D21

XXXX

Сравнение машинного кода обеих команд в этом примере демонстрирует еще более неуловимую ситуацию  в  случае,  когда  код  для

MC68020 выполняется на MC68000. В данном примере MC68000 проигнорирует  биты  8-10  первого слова расширения и интерпретирует команду  как "MOVE.L $21(A0,D0.L),D1", а затем ошибочно использует второе слово расширения как первое слово следующей  команды.  Таким  образом,  правильная  последовательность  разбиения входного потока на отдельные команды  будет  нарушена,  и  последствия  окажутся  непредсказуемыми. Может случиться, что процессором будет осуществлена выборка запрещенной команды и  возникшее  программное  исключение  будет перехвачено операционной системой, но может случиться и так,  что  неправильная  команда выполнится  без всякого извещения о том, что ошибочно использован способ адресации, реализованный только в MC68020.

Если  желательно  избежать  подобной неприятности, пользователь может любую программу, использующую средства, специфичные именно для MC68020, предварять командой "TRAPF".  Этой  командой  в процессоре  MC68020 не выполняется никаких действий, однако при попытке выполнить ее в процессорах MC68000, MC68008, MC68010  и

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

Рис.D-5. Слова расширения в случае способа  индексируемой/косвенной адресации операнда

MC68020, короткий формат

15  14  13  12  11  10   9   8   7   6   5   4   3   2   1   0

----T-----------T---T-------T---T-----------------------------¬

¦D/A¦  регистр  ¦W/L¦масштаб¦ 0 ¦        смещение             ¦

L---+-----------+---+-------+---+-----------------------------MC68020, полный формат

15  14  13  12  11  10   9   8   7   6   5   4   3  2   1   0

----T-----------T---T-------T---T---T---T-------T---T---------¬

¦D/A¦  регистр  ¦W/L¦масштаб¦ 1 ¦BS ¦IS ¦разм.BD¦ 0 ¦  I/IS   ¦

+---+-----------+---+-------+---+---+---+-------+---+---------+

¦               базовое смещение (0,1 или 2 слова)            ¦

+-------------------------------------------------------------+

¦               внешнее смещение (0,1 или 2 слова)            ¦

L-------------------------------------------------------------Обозначения полей на Рис.D-5:

Поле         Определение регистр         номер индексного регистра

D/A             тип индексного регистра:

0=Dn

1=An

W/L             словный/двухсловный размер индекса:

0= слово с распространенным знаком

1= длинное слово масштаб           масштабирующий множитель:

00=1

01=2

10=4

11=8

BS              подавление базирования:

0=базовый регистр добавляется

1=базовый регистр игнорируется

IS              подавление индексного регистра:

0=индексный операнд вычислить и добавить

1=индексный операнд игнорировать разм.BD         размер базового смещения:

00=зарезервировано

01=смещение нулевой длины

10=словное смещение

11=двухсловное смещение

I/IS            селектор индексирования/косвенности:

определяет совместно с битом 6  (IS)  способ индексируемой/косвенной адресации операнда

------T---------T---------------------------------------------¬

¦ IS  ¦  I/IS   ¦                 адресация                   ¦

+-----+---------+---------------------------------------------+

¦  0  ¦   000   ¦ без  использования  памяти  для  вычисления ¦

¦     ¦         ¦ косвенного адреса                           ¦

¦  0  ¦   001   ¦ косвенная с преиндексированием и со  смеще- ¦

¦     ¦         ¦ нием нулевой длины                          ¦

¦  0  ¦   010   ¦ косвенная с преиндексированием и со словным ¦

¦     ¦         ¦ смещением                                   ¦

¦  0  ¦   011   ¦ косвенная с преиндексированием и с  длинным ¦

¦     ¦         ¦ смещением                                   ¦

¦  0  ¦   100   ¦ зарезервировано                             ¦

¦  0  ¦   101   ¦ косвенная с постиндексированием и со смеще- ¦

¦     ¦         ¦ нием нулевой длины                          ¦

¦  0  ¦   110   ¦ косвенная с постиндексированием и со  слов- ¦

¦     ¦         ¦ ным смещением                               ¦

¦  0  ¦   111   ¦ косвенная с постиндексированием и с длинным ¦

¦     ¦         ¦ смещением                                   ¦

¦  1  ¦   000   ¦ без  использования  памяти  для  вычисления ¦

¦     ¦         ¦ косвенного адреса                           ¦

¦  1  ¦   001   ¦ косвенная через память с смещением  нулевой ¦

¦     ¦         ¦ длины                                       ¦

¦  1  ¦   010   ¦ косвенная через память со словным смещением ¦

¦  1  ¦   011   ¦ косвенная через память с длинным смещением  ¦

¦  1  ¦ 100-111 ¦ зарезервировано                             ¦