Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Metoda_beta2_8.doc
Скачиваний:
5
Добавлен:
16.11.2019
Размер:
838.66 Кб
Скачать

4.2 Инструкции и стандартные функции

умножителя

В умножителе (рис. П2) имеется два входных порта Х и Y разрядностью 16 бит и порт вывода результата Р разрядностью 32 бита. Результат разрядностью 32 бита передается в 40-разрядный сумматор/вычитатель, который прибавляет или вычитает новый результат из содержимого регистра умножителя MR (рис. П3) или передает новый результат прямо в МR. Регистр МR имеет разрядность 40 бит и состоит из трех регистров меньшей разрядности: МRО и МR1 разрядностью 16 бит и МR2 разрядностью 8 бит.

Рис. П2. Блок-схема умножителя-накопителя

Умножитель-накопитель реализует следующие функции:

  • R = X*Y, умножение операндов X и Y;

  • R = MR + X*Y, умножение операндов X и Y и сложение результата с содержимым регистра МR;

  • R = MRX*Y, умножение операндов X и Y и вычитание полученного результата из содержимого регистра МR;

  • MR = 0, обнуление содержимого регистра MR.

Источниками-приемниками данных умножителя являются:

  • источники ввода данных в порт X: MX0, MX1, AR, MR0, MR1, MR2, SR0, SR1;

  • источники ввода данных в порт Y: MY0, MY1,MF;

  • направление вывода данных через порт R: MR (MR2, MR1, MR0), MF.

Общий вид инструкции MAC на языке ассемблера, например, умножения с накоплением двух беззнаковых чисел записывается следующим образом:

[IF cond] MR=MR+xop*yop (SS|UU|US|SU|RND);

IF NOT MV MR=MR+MXO*MY0 (UU);

Условное выражение IF NOT MV проверяет флаг переполнения MAC. Если флаг сброшен, исполняется инструкция NOP. Выражение MR=MR+MXO*MY0 – это операция умножения с суммированием. В регистре результата (MR) получается сумма его предыдущего значения с произведением значений входных Х и Y регистров. Модификатор в скобках (UU) сообщает процессору, что операнды беззнаковые.

Режим "знаковый * знаковый" (SS) используется при умножении двух знаковых чисел с одинарной точностью или старших слов двух знаковых чисел с повышенной точностью.

Режимы "беззнаковый * знаковый" (US) и "знаковый *беззнаковый" (SU) используются при умножении старших бит одного знакового числа с повышенной точностью на младшие биты другого, или при умножении знакового числа с одинарной точностью на беззнаковое число с одинарной точностью.

Режим "беззнаковый * беззнаковый" (UU) используется при умножении беззнаковых чисел с одинарной точностью или всех бит, кроме старших, двух знаковых чисел с повышенной точностью.

Режим RND – округление результата (для знаковых операндов).

4.3 Инструкции и основные функции

устройства циклического сдвига

Устройство сдвига (рис. П4) обеспечивает полный набор функций сдвига для 16-разрядных входных значений, в результате чего на выходе получается 32-разрядный результат.

Устройство сдвига выполняет следующие операции:

  • арифметический сдвиг (ASHIFT);

  • логический сдвиг (LSHIFT);

  • нормализация (NORM);

  • определение порядка (EXP);

  • нахождение блочного порядка (EXPADJ).

В скобках указана мнемоника соответствующих им ассемблерных инструкций.

Источниками/приемниками данных для устройства сдвига являются:

  • источники ввода данных: SI, AR, MR0, MR1, MR2, SR0, SR1;

  • направление вывода результатов: SR (SR0, SR1).

Рис. П4. Блок-схема устройства циклического сдвига

Ниже приведены примеры некоторых операций устройства сдвига и реализующих их ассемблерных инструкций.

Пример №1 показывает непосредственный логический сдвиг вправо относительно старших бит SR (SR1):

SI = 0xB6A3; /* Входное значение 10110110 10100011 */

SR = LSHIFT SI BY5 (HI); /* Величина сдвига –5 */

/* Выходное значение SR = 00000101101101010001100000000000*/

Пример №2 – то же самое значение сдвигается в другом направлении относительно младших бит SR:

SI=0xB6A3;

SR=LSHIFT SI BY 5 (LO); /* Величина сдвига +5 */ /*Выходное значение SR=00000000000101101101010001100000 */

Пример №3 соответствует операции непосредственного арифметического сдвига:

SI=0xB6A3;

SR=ASHIFT SI BY –5 (HI);

/* Выход: SR=11111101101101010001100000000000 */

Пример №4 – операция нормализации для входного значения с одинарной точностью, проводится в два этапа:

AR = 0xF6D4; /* Входное значение 1111011011010100 */

SE = EXP AR (HI); /* Определяет порядок, SE устанавливается на –3 */

SR = NORM AR (HI); /* Нормализация : сдвиг значения AR на величину, содержащуюся в SE */

/* Выход SR = 10110110101000000000000000000000 */

Пример №6 – инструкция нормализации, записанная ниже в обобщенной и конкретной форме:

[IF cond] SR=[SR OR] NORM xop (HI | LO);

IF NOT CE SR=SR OR NORM SI (HI);

Условное выражение IF NOT СЕ проверяет условие «если счетчик числа повторений ненулевой». Если условие не выполняется, исполняется инструкция NOP. Приемником для всех операций устройства циклического сдвига является регистр результата SR, кроме операции определения экспоненты (порядка), где приемник – это регистры SE или SB. В этом примере SI (входной регистр) является операндом. Длина и направление сдвига контролируются знаковым числом в регистре SE для всех операций сдвига, кроме немедленного сдвига. Положительные значения приводят к сдвигу влево; отрицательные – к сдвигу вправо. Модификатор «SR OR» (который может быть опущен) производит операцию логическое ИЛИ результата с текущим содержимым регистра SR - это позволяет получить 32-битное значение в SR из 16-битных частей. «NORM» – это оператор, a (HI) - модификатор, который определяет, происходит ли сдвиг относительно верхней (НI) или нижней (LO) 16-битной части SR. Если модификатор «SR ОR» опускается, результат сразу записывается в регистр SR.

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