Подробное описание системы команд микропроцессора МС68020 и способов адресации, страница 51

--------------------------------¬

¦                               ¦

------¬  ¦  -------------¬     ------¬   ¦

ROXL:     ¦  C  <--+--+  Операнд   <-----+  X  <---L------     L-------------     L-----В  случае  команды  ROXR  операнд циклически сдвигается вправо на <количество_позиций>. Вытесняемые младшие биты попадают одновременно в биты переноса (С) и расширения (Х) кода условия. Предыдущие значения бита расширения поступают в старшие биты операнда.

-------------------------------¬

¦                              ¦

¦   ------¬    -------------¬  ¦   ------¬

ROXR: L--->  X  +---->  Операнд   +--+--->  C  ¦

L------    L-------------      L-----Коды условия:

X   N   Z   V   C

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

¦ - ¦ * ¦ * ¦ 0 ¦ * ¦

L---+---+---+---+---N       1, если старший бит результата равен 1; иначе 0.

Z       1, если результат равен нулю; иначе 0.

V       всегда 0.

C       равен последнему вытесненному биту операнда. При

<количестве_позиций>=0 равен биту X.

X       равен последнему  вытесненному  биту  операнда.

При <количестве_позиций>=0 не меняется.

Формат команды (для циклического сдвига регистра):

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---T---------¬

¦ 1 ¦ 1 ¦ 1 ¦ 0 ¦Рег/количе-¦L/R¦Размер ¦i/r¦ 1 ¦ 0 ¦ Регистр ¦

¦   ¦   ¦   ¦   ¦ство_позиц ¦   ¦       ¦   ¦   ¦   ¦         ¦

L---+---+---+---+-----------+---+-------+---+---+---+---------Поля команды (для циклического сдвига регистра):

Поле  Рег/количество_позиц определяет <количество_позиций> или регистр, содержащий значение  <количества_позиций>:

Если  i/r=0, то количество_позиций явно указано в данном поле. Значения 0,1,2,...7  представляют  величину циклического сдвига 8,1,2,...7 соответственно.

Если  i/r=1,  количество_позиций содержится в регистре данных, указанном в данном  поле.  Значение  регистра берется по модулю 64.

Поле L/R определяет направление циклического сдвига:

0 - циклический сдвиг вправо.

1 - циклический сдвиг влево.

Поле Размера определяет размер операндов:

00 - байт.

01 - слово.

10 - длинное слово.

Поле i/r Если i/r = 0, количество_позиций задано  непосредственно в команде.

Если i/r = 1, количество_позиций задано в регистре.

Поле Регистра определяет Приемник - циклически сдвигаемый регистр данных.

Формат команды (для циклического сдвига операнда в памяти):

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---T---------------------¬

¦   ¦   ¦   ¦   ¦   ¦   ¦   ¦   ¦   ¦   ¦ Исполнительный адрес¦

¦ 1 ¦ 1 ¦ 1 ¦ 0 ¦ 0 ¦ 1 ¦ 0 ¦L/R¦ 1 ¦ 1 ¦  Мода       Регистр ¦

L---+---+---+---+---+---+---+---+---+---+-----------+---------Поля команды (для циклического сдвига операнда в памяти):

Поле L/R определяет направление циклического сдвига:

0 - циклический сдвиг вправо.

1 - циклический сдвиг влево.

Поле Исполнительного адреса определяет способ адресации

Приемника. Допустимы только способы адресации изменяемой памяти:

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

¦Способ адресации¦Мода¦Регист𠦦Способ адресации¦Мода¦Регистр ¦

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

¦       Dn       ¦ -  ¦   -    ¦¦    (xxx).W     ¦111 ¦  000   ¦

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

¦       An       ¦ -  ¦   -    ¦¦    (xxx).L     ¦111 ¦  001   ¦

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

¦      (An)      ¦010 ¦ном.An  ¦¦   #<данные>    ¦ -  ¦   -    ¦

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

¦      (An)+     ¦011 ¦ном.An  ¦¦                ¦    ¦        ¦

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

¦     -(An)      ¦100 ¦ном.An  ¦¦                ¦    ¦        ¦

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

¦   (d{16},An)   ¦101 ¦ном.An  ¦¦   (d{16},PC)   ¦ -  ¦   -    ¦

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

¦  (d{8},An,Xn)  ¦110 ¦ном.An  ¦¦  (d{8},PC,Xn)  ¦ -  ¦   -    ¦

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

¦   (bd,An,Xn)   ¦110 ¦ном.An  ¦¦   (bd,PC,Xn)   ¦ -  ¦   -    ¦

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

¦([bd,An,Xn],od) ¦110 ¦ном.An  ¦¦ ([bd,PC,Xn],od)¦ -  ¦   -    ¦

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

¦([bd,An],Xn,od) ¦110 ¦ном.An  ¦¦ ([bd,PC],Xn,od)¦ -  ¦   -    ¦

L----------------+----+---------L----------------+----+--------RTD    Возврат и освобождение области параметров  RTD

----------------------------------------------------Операция:       (SP)  > PC; SP + 4 + d  > SP

Синтаксис:      RTD #<смещение>

Атрибуты:       Размер не используется

Описание:

Значение  программного  счетчика  восстанавливается  из стека, его предыдущее значение теряется. Затем знак 16битного смещения распространяется до 32 бит и  полученное значение прибавляется к значению указателя стека.

Коды условия: не изменяются.

Формат команды:

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---T---T---T---T---T---T--¬

¦ 0 ¦ 1 ¦ 0 ¦ 0 ¦ 1 ¦ 1 ¦ 1 ¦ 0 ¦ 0 ¦ 1 ¦ 1 ¦ 1 ¦ 0 ¦ 1 ¦ 0 ¦ 0¦

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

¦                          Смещение                            ¦

L--------------------------------------------------------------Поля команды:

Поле Смещения задает целое в двоично-дополнительном коде, которое после распространения  знака  должно  быть прибавлено к указателю стека.

RTE         Возврат из обработки исключения           RTE

(привилегированная команда)

--------------------------------------------------------Операция:       Если режим супервизора, то    (SP) >SR; SP+2 >SP; (SP) >PC; SP+4 >SP;

восстановить состояние и освободить стек в соответствии с (SP).

иначе TRAP

Синтаксис:      RTE