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

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

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

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

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

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

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

L----------------+----+---------L----------------+----+--------LINK         Связь и резервирование места в стеке       LINK

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

SP  > An; SP + d  > SP

Синтаксис:      LINK An,<смещение>

Атрибуты:       Размер=(Слово,Длинное слово)

Описание:

Текущее  значение указанного адресного регистра помещается в стек. Затем в адресный регистр загружается  значение продвинутого указателя стека. Наконец, к указателю  стека добавляется <смещение>. При работе со словами смещение находится в слове, следующем за словом команды и берется с распространенным знаком. При работе с длинными словами смещение находится в длинном слове, следующем  за  операционным словом. Содержимое адресного регистра занимает в стеке длинное слово. Для резервирования места в стеке используется отрицательное смещение.

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

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

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

¦ 0 ¦ 1 ¦ 0 ¦ 0 ¦ 1 ¦ 1 ¦ 1 ¦ 0 ¦ 0 ¦ 1 ¦ 0 ¦ 1 ¦ 0 ¦ Регистр ¦

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

¦                 Смещение в формате слова                    ¦

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

¦ 0 ¦ 1 ¦ 0 ¦ 0 ¦ 1 ¦ 0 ¦ 0 ¦ 0 ¦ 0 ¦ 0 ¦ 0 ¦ 0 ¦ 1 ¦ Регистр ¦

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

¦      Смещение в формате длинного слова (старшее слово)      ¦

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

¦      Смещение в формате длинного слова (младшее слово)      ¦

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

Поле Регистра задает адресный  регистр,  через  который организуется связь.

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

ЗАМЕЧАНИЕ:

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

LSL , LSR           Логический сдвиг             LSL , LSR

---------------------------------------------------------Операция:       Приемник сдвигается_на <количество_позиций>  >

> Приемник

Синтаксис:      LSd Dx,Dy

LSd #<данные>,Dy

LSd <иа>

где d - направление, R или L

Атрибуты:       Размер=(Байт,Слово,Длинное слово)

Описание:

Биты  Приемника сдвигаются в указанном направлении (L влево, R - вправо). Бит переноса (код условия С)  устанавливается  равным  последнему вытесненному при сдвиге биту операнда. При сдвиге регистра данных <количество_позиций> задается одним из двух способов:

1. Непосредственно в команде, в диапазоне 1 - 8.

2. В регистре данных (содержимое  регистра  берется  по модулю 64).

Размер  операндов - байт, слово и длинное слово. Содержимое  памяти  может быть сдвинуто только на 1 бит; при этом размером операнда может быть только слово.

В случае команды LSL операнд сдвигается влево на <количество_позиций>. Вытесняемые старшие биты попадают  одновременно  в  биты  переноса и расширения (С и Х) кода условия, младшие биты заполняются нулями.

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

¦  C  <--T--+  Операнд   <------+  0  ¦

L------  ¦  L-------------      L-----LSL:               ¦

------¬  ¦

¦  X  <--L-----В случае команды LSR операнд сдвигается вправо на  <количество_позиций>.  Вытесняемые  младшие  биты попадают одновременно в биты С и Х кода  условия,  старшие  биты заполняются нулями.

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

LSR:      ¦   0  +----->  Операнд   +--T--->  C  ¦

L-------     L-------------  ¦   L-----¦

¦   ------¬

L--->  X  ¦

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

X   N   Z   V   C

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

¦ * ¦ * ¦ * ¦ 0 ¦ * ¦

L---+---+---+---+---N       1, если результат отрицательный; иначе 0.

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

V       всегда 0.

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

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

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

<количестве_позиций>=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¦ 0 ¦ 1 ¦ Регистр ¦

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

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