Скачиваний:
72
Добавлен:
01.05.2014
Размер:
1.22 Mб
Скачать

Команда знакового умножения двух 16-ти битных операндов (Signed multyply)

Синтаксис в ассемблере

SMUL<x><y> {<cond>}<Rd> <Rm> <Rs>

Формат команды представлен на рис. 1.

Описание

<cond> – поле условия (см. таблицу 1).

<Rd> – регистр результата (см. таблицу 1).

<Rm> – регистр первого операнда (см. таблицу 1).

<Rs> – регистр второго операнда (см. таблицу 1).

Данная команда выполняет умножение со знаком. Операндами являются два 16-ти битных числа со знаком, получаемые как младшие или старшие 16 разрядов регистров-источников. Оставшиеся части регистров игнорируются. Таким образом, переполнение в результате выполнения команды становится невозможным.

<x> и <y> указывают, берётся ли для операции старшая или младшая часть регистров-источников. <x> соответствует множимому – Rm, <y> – множителю ­– Rs.

<x> и <y> могут принимать мнемонические значения B и T (bottom и top), что соответствует младшей (биты [15:0]) и старшей (биты [31:16]) половинам регистров. В коде операции для <x> и <y> значениям B и Т соответствуют значения 0 и 1.

Действие

Действие команды таково: (Rd) := (Rm<[15:0]/ [31:16]>) * (Rs<[15:0]/ [31:16]>), если условие (<cond>) выполнено. Переполнение невозможно, поэтому биты CPSR не меняются.

Примеры

SMULBB R1 R2 R3 //перемножаются младшие части регистров R2 и R3, результат помещается в R1.

SMULBT R1 R2 R3 //младшие 16 бит регистра R2 умножаются на старшие 16 бит регистра R3, результат помещается в R1.

SMULTTEQ R5 R3 R11 // Если Z=1, выполняется перемножение старших частей R3 и R11, результат помещается в R5.

SMULW<y> ARM

Знаковая операция умножения

Синтаксис в ассемблере

SMULW<y> {<cond>} <Rd>, <Rm>, <Rs>

Формат команды представлен на рис. 1.

Описание

<y> – Определяет, какя часть исходного регистра <Rs> используется, подобно умножающему операнду. Если <y> - B, то y == 0 и используется в основании (биты[15:0]) регистра <Rs>. Если <y > - T, то y == 1 и используется в вершине (биты[31:16]) регистра <Rs>.

<cond> – поле условия (см. таблицу 1).

<Rd> – регистр результата (см. таблицу 1).

<Rm> – регистр второго операнда (см. таблицу 1).

<Rs> – Определяет исходный регистр, отобранный - <y>- основание или первая часть, второго умножающего операнда.

Команда SMULW<y>выполняет знаковую операцию умножения. Операция умножения в 32-битовом и 16-битовом данном регистре, с последним взятым с вершины или от основания его части. Вторая часть регистра игнорируется. Первые 32 бита из 48 битов записываются в регистр. Последние 16 битов из 48 битов игнорируются.

Мнемоника ассемблера

Действие

SMULW<y>

if ConditionPassed(cond) then

if (y == o) then

operand2 = SignExtend(Rs[15:0])

else /* y == 1 */

operand2 = SignExtend(Rs[31:16])

Rd = (Rm ♦ operand2) [47:16] + Rn

/*Знаковое умножение */

Команда знакового умножения.

Использование

В дополнение к его прямому использованию – умножение целого числа, можно применить в комбинации с QADD, QDADD,и QDSUB, чтобы выполнить умножение, умножение-сложение, умножение-вычитание между числами Q31 и Q15.

Примеры

SMULWB R1 R2 R3 //умножение младших частей регистров R2 и R3, результат записывается в R1.

SMULWT R1 R2 R3 //младшие 16 бит регистра R2 умножаются на старшие 16 бит регистра R3, результат помещается в R1.

STCARM