Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
KOMAROV.DOC
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
1.32 Mб
Скачать

1.17.5. Команды alu

А) СЛОЖЕНИЕ/СЛОЖЕНИЕ С ПЕРЕНОСОМ

С

[IF cond]

AR

= xop

+ yop

;

AF

+ C

+ yop + C

+ constant

+ constant + C

интаксис
:

Допустимые:

регистры xop регистры yop условия cond

AX0 MR2 AY0 EQ LE AC

AX1 MR1 AY1 NE NEG NOT AC

AR MR0 AF GT POS MV

SR1 GE AV NOT MV

SR0 LT NOT AV NOT CE

Допустимые константы: 0, 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32767, -2, -3, -5, -9, -17, -33, -65, - 129, -257, -513, -1025, -2049, -4097, -8193, -16385, -32768.

Примеры: IF EQ AR = AX0 + AY0 + C;

AR = AR + 512;

Описание: Если команда выполняется (условие отсутствует или ве­р­нуло TRUE), то процессор производит сложение первого операнда источника со вторым операндом источником, а также битом АС, если в команде присутствует символ С. Результат сохраняется в регистре назначения. Операнды и константа содержатся в регистрах, которые определены в команде.

Операция xop + constant не может использоваться в многофункциональных командах.

Флаги состояния:

ASTAT:

7

6

5

4

3

2

1

0

SS

MV

AQ

AS

AC

AV

AN

AZ

-

-

-

-

*

*

*

*

AZ – устанавливается, если результат равен нулю и сбрасывается в противном случае. AN – устанавливается, если результат отрицательный и сбрасывается в противном случае. AV – устанавливается, если случилось арифметическое переполнение и сбрасывается в противном случае. AC – устанавливается, если есть перенос и сбрасывается в противном случае.

Б) вычитание X-y/вычитание X-y с заемом

С

[IF cond]

AR

= xop

- yop

;

AF

- yop + C – 1

+ C – 1

- constant

- constant + C - 1

интаксис
:

Допустимые: регистры xop, регистры yop, условия cond и константы см. п. 1.17.5.А.

Пример: IF GE AR = AX0 – AY0;

Описание: Если команда выполняется (условие отсутствует или ве­р­нуло TRUE), то процессор производит вычитание второго операнда источника из первого операнда источника, а также прибавляет АС – 1, если в команде присутствует терм С – 1. Результат сохраняется в регистре назначения. Терм (С – 1) позволяет поддерживать операцию заема при вычитании чисел длиной более 16 бит. Операнды и константа содержатся в регистрах, которые определены в команде.

Операция xop - constant не может использоваться в многофункциональных командах.

Флаги состояния: см. п. 1.17.5.А.

В) ВЫЧИТАНИЕ Y-X/ВЫЧИТАНИЕ Y-X С ЗАЕМОМ

[IF cond]

AR

=

yop -

xop

;

AF

xop + C – 1

- xop + C – 1

- xop + constant

- xop + constant + C – 1

Синтаксис:

Допустимые: регистры xop, регистры yop, условия cond и константы см. п. 1.17.5.А.

Пример: IF GT AR = AY0 – AX0 + C – 1;

Описание: Если команда выполняется (условие отсутствует или ве­р­нуло TRUE), то процессор производит вычитание второго операнда источника из первого операнда источника, а также прибавляет АС – 1, если в команде присутствует терм С – 1. Результат сохраняется в регистре назначения. Терм (С – 1) позволяет поддерживать операцию заема при вычитании чисел длиной более 16 бит. Операнды и константа содержатся в регистрах, которые определены в команде.

Операция xop - constant не может использоваться в многофункциональных командах.

Флаги состояния: см. п. 1.17.5.А.

Г) AND, OR, XOR

[IF cond]

AR

= xop

AND

yop

;

AF

OR

constant

XOR

Синтаксис:

Допустимые: регистры xop, регистры yop, условия cond и константы см. п. 1.17.5.А.

Примеры: IF POS AR = MR0 AND 8192;

AR = AX0 XOR AY0;

Описание: Если команда выполняется (условие отсутствует или ве­р­нуло TRUE), то процессор производит побитную логическую операцию И/ИЛИ/ИСКЛЮЧАЮЩЕЕ ИЛИ между первым операндом источником и вторым операндом источником. Результат сохраняется в регистре назначения. Операнды и константа содержатся в регистрах, которые определены в команде.

Операция xop AND/OR/XOR constant не может использоваться в многофункциональных командах.

Флаги состояния:

ASTAT:

7

6

5

4

3

2

1

0

SS

MV

AQ

AS

AC

AV

AN

AZ

-

-

-

-

0

0

*

*

AZ – устанавливается, если результат равен нулю и сбрасывается в противном случае. AN – устанавливается, если результат отрицательный и сбрасывается в противном случае. AV – всегда сбрасывается. AC –всегда сбрасывается.

Д) ПРОВЕРКА БИТА, УСТАНОВКА БИТА, ОЧИСТКА БИТА, ИНВЕРСИЯ БИТА

[IF cond]

AR

=

TSTBIT n OF xop

;

AF

SETBIT n OF xop

CLRBIT n OF xop

TGLBIT n OF xop

Синтаксис:

Допустимые: регистры xop и условия cond см. п. 1.17.5.А.

Допустимые значения n: 0 – 15.

Примеры: IF LE AF = TSTBIT 5 OF AR;

AR = TGLBIT 13 OF AX0;

Описание: Если команда выполняется (условие отсутствует или ве­р­нуло TRUE), то процессор производит следующее:

  • Если выполняет TSTBIT, то производит операцию логического И между содержимым регистра источника и 1 в выбранном бите n;

  • Если выполняет SETBIT, то производит операцию логического ИЛИ между содержимым регистра источника и 1 в выбранном бите n;

  • Если выполняет CLRBIT, то производит операцию логического И между содержимым регистра источника и 0 в выбранном бите n;

  • Если выполняет TGLBIT, то производит операцию логического ИСЛЮЧАЮЩЕГО ИЛИ между содержимым регистра источника и 1 в выбранном бите n.

Перечисленные команды не могут выполняться в многофункциональном режиме.

Следующий пример показывает, как произвести переход на метку set, если установлен пятый бит AR.

AF = TSTBIT 5 OF AR;

IF NE JUMP set

Флаги состояния: см. п. 1.17.5.А.

Е) ПЕРЕСЫЛКА/ОЧИСТКА

[IF cond]

AR

= PASS

xop

;

AF

yop

constant

Синтаксис:

Допустимые: регистры xop, регистры yop и условия cond см. п. 1.17.5.А.

Допустимые константы: -1, 0, 1

2, 3, 4, 5, 7, 8, 9, 15, 16, 17, 31, 32, 33, 63, 64, 65, 127, 128, 129, 255, 256, 257, 511, 512, 513, 1023, 1024, 1025, 2047, 2048, 2049, 4095, 4096, 4097, 8191, 8192, 8193, 16383, 16384, 16385, 32766, 32767

-2, -3, -4, -5, -6, -8, -9, -10, -16, -17, -18, -32, -33, -34, -64, -65, -66, -128, -129, -130, -256, -257, -258, -512, -513, -514, -1024, -1025, -1026, -2048, -2049, -2050, -4096, -4097, -4098, -8192, -8193, -8194, -16384, -16385, -16386, -32767, -32768

Примеры: IF GE AR = PASS AY0; {пересылка содержимого AY0 в AR}

AR = PASS 0; {очистка AR}

AR = PASS 8191; {загрузка AR константой 8191}

Описание: Если команда выполняется (условие отсутствует или ве­р­нуло TRUE), то процессор производит пересылку содержимого регистра источника или константы в регистр приемник. Операнды и константа содержатся в регистрах, которые определены в команде.

В отличие от функционально идентичных команд пересылки данных (см. п. 1.17.4), команда PASS xop/yop/-1/0/1 устанавливает некоторые флаги (см. ниже). Если операндами команды являются константы, отличные от -1, 0, 1, то состояние флагов ASTAT не определено.

Команда PASS xop/yop/-1/0/1 может использоваться в многофункциональных командах. Константы, отличные от –1, 0, 1, не могут использоваться в многофункциональных командах.

Флаги состояния: см. п. 1.17.5.Г.

Ж) ОТРИЦАНИЕ ЗНАКА ОПЕРАНДА

[IF cond]

AR

= -

xop

;

AF

yop

Синтаксис:

Допустимые: регистры xop, регистры yop и условия cond см. п. 1.17.5.А.

Пример: IF LT AR = - AY0;

Описание: Если команда выполняется (условие отсутствует или ве­р­нуло TRUE), то процессор производит пересылку содержимого регистра источника в регистр приемник с инверсией знака операнда. Операнды содержатся в регистрах, которые определены в команде.

Флаги состояния:

ASTAT:

7

6

5

4

3

2

1

0

SS

MV

AQ

AS

AC

AV

AN

AZ

-

-

-

-

*

*

*

*

AZ – устанавливается, если результат равен нулю и сбрасывается в противном случае. AN – устанавливается, если результат отрицательный и сбрасывается в противном случае. AV – устанавливается, если операнд = 0х8000 и сбрасывается в противном случае. AC – устанавливается, если операнд равен нулю и сбрасывается в противном случае.

З) ИНВЕРСИЯ БИТОВ ОПЕРАНДА

[IF cond]

AR

= NOT

xop

;

AF

yop

Синтаксис:

Допустимые: регистры xop, регистры yop и условия cond см. п. 1.17.5.А.

Пример: IF NE AF = NOT AX0;

Описание: Если команда выполняется (условие отсутствует или ве­р­нуло TRUE), то процессор производит пересылку содержимого регистра источника в регистр приемник с инверсией всех битов операнда. Операнды содержатся в регистрах, которые определены в команде.

Флаги состояния: см. п. 1.17.5.Г.

И) АБСОЛЮТНОЕ ЗНАЧЕНИЕ

[IF cond]

AR

= ABS

xop

;

AF

[IF cond]

AR

=

yop + 1

;

AF

Синтаксис:

Допустимые: регистры xop и условия cond см. п. 1.17.5.А.

Пример: IF NEG AF = ABS AX0;

Описание: Если команда выполняется (условие отсутствует или ве­р­нуло TRUE), то процессор производит пересылку содержимого регистра источника в регистр приемник с формированием абсолютной величины операнда. Операнды содержатся в регистрах, которые определены в команде.

Флаги состояния:

ASTAT:

7

6

5

4

3

2

1

0

SS

MV

AQ

AS

AC

AV

AN

AZ

-

-

-

*

0

*

*

*

AZ – устанавливается, если результат равен нулю и сбрасывается в противном случае. AN – устанавливается, если хор = 0х8000 и сбрасывается в противном случае. AV – устанавливается, если хор = 0х8000 и сбрасывается в противном случае. AC – всегда сбрасывается. AS – устанавливается, если операнд источник отрицательный и сбрасывается в противном случае.

К) ИНКРЕМЕНТ

Синтаксис:

Допустимые: регистры yop и условия cond см. п. 1.17.5.А.

Пример: IF GT AF = AF + 1;

Описание: Если команда выполняется (условие отсутствует или ве­р­нуло TRUE), то процессор производит пересылку содержимого регистра источника в регистр приемник с увеличением на 1 значения операнда. Операнды содержатся в регистрах, которые определены в команде.

Флаги состояния: см. п. 1.17.5.А.

Л) ДЕКРЕМЕНТ

[IF cond]

AR

=

yop – 1

;

AF

Синтаксис:

Допустимые: регистры yop и условия cond см. п. 1.17.5.А.

Пример: IF EQ AR = AY1 – 1;

Описание: Если команда выполняется (условие отсутствует или ве­р­нуло TRUE), то процессор производит пересылку содержимого регистра источника в регистр приемник с уменьшением на 1 значения операнда. Операнды содержатся в регистрах, которые определены в команде.

Флаги состояния: см. п. 1.17.5.А.

М) ДЕЛЕНИЕ

Синтаксис: DIVS yop, xop

DIVQ xop

Допустимые:

регистры xop регистры yop

AX0 MR2 AY1

AX1 MR1 AF

AR MR0

SR1

SR0

Описание: Эти команды выполняют деление yop на xop. Команды DIVS, DIVQ являются примитивами, поскольку при их выполнении формируется только один разряд частного: знак – при выполнении команды DIVS и остальные разряды – при выполнении команды DIVQ. Поэтому деление с одинарной точностью (32-битное делимое, 16-битные делитель и частное) требует 16 циклов. Возможно деление с более высокой точностью.

Деление может быть знаковым и беззнаковым, в любом случае операнды должны быть одного типа: знаковые или беззнаковые. Для подготовки деления необходимо старшую часть делимого загрузить в любой допустимый yop регистр (AY1 или AF), младшую часть делимого загрузить в AY0, а делитель загрузить в любой хор.

Далее операция деления выполняется с помощью примитивов деления DIVS, DIVQ. Повторные выполнения DIVQ реализуют алгоритм деления с помощью условного сложения/вычитания без восстановления остатка. После окончания деления частное формируется в AY0.

Для выполнения знакового деления необходимо сначала однократно выполнить команду DIVS, чтобы сформировать знак частного. Далее необходимо выполнить команду DIVQ столько раз, сколько бит осталось в частном (для выполнения знакового деления с одинарной точностью команду DIVQ необходимо выполнить 15 раз).

Для выполнения беззнакового деления необходимо старшую часть делимого загрузить в AF, затем сбросить бит AQ регистра ASTAT (при этом сформируется положительный знак частного). Далее выполнить команду DIVQ столько раз, сколько битов содержит частное (для выполнения беззнакового деления необходимо 16 раз выполнить команду DIVQ).

В конце выполнения команд DIVS, DIVQ очередной бит частного запоминается в бите AQ регистра ASTAT. Остаток формируется в AF, но он нуждается в коррекции.

Флаги состояния:

ASTAT:

7

6

5

4

3

2

1

0

SS

MV

AQ

AS

AC

AV

AN

AZ

-

-

*

-

-

-

-

-

AQ – формируется командами DIVS и DIVQ.

Н) ФОРМИРОВАНИЕ ФЛАГОВ ALU

Синтаксис: NONE = <ALU>;

ALU – может быть любой безусловной командой кроме DIVS и DIVQ.

Примеры: NONE = AX0 – AY0;

NONE = PASS SR0;

Описание: Процессор выполняет команду ALU, формирует флаги состояния, а результат игнорирует. Команда позволяет тестировать содержимое регистров источников без изменения содержимого регистров AR и AF.

Примечание: кроме команд DIVS и DIVQ недопустимо использовать также следующие команды ALU:

  • сложение (xop + constant);

  • вычитание X – Y (xop – constant);

  • вычитание Y – X (- xop + constant);

  • AND, OR, XOR (xop  constant);

  • PASS constant (отличные от –1, 0, 1);

  • TSTBIT, SETBIT, CLRBIT, TGLBIT.

Флаги состояния: см. п. 1.17.5.А.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]