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

Умножение (Multiply)

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

MUL{<cond>}{S} <Rd>, <Rm>, <Rs>

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

Описание

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

S – если бит S в команде будет установлен в 1, то команда обновит CPSR установив флаги N и Z, в зависимости от результатов умножения.

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

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

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

Команда MUL (Multiply) используется для умножения знаковых или без знаковых переменных для получения 32 разрядного результата. Условные флаги могут быть изменены в зависимости от результата.

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

Действие

MUL

if ConditionPassed(cond) then

Rd = (Rm * Rs)[31:0]

if S == 1 then

N Flag = Rd[31]

Z Flag = if Rd == 0 then 1 else 0

C Flag = unaffected /* See "C flag" note */

V Flag = unaffected

Примеры

MUL R0, R1, R2; //Умножение R1 на R2 и запись результата в R0

MULTHUMB

Умножение (Multiply)

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

MUL <Rd>, <Rm>

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

Описание

<Rd> – Содержит значение перемножаемое со значением в регистре <Rm>, а также является регистром назначения для результата (см. таблицу 1).

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

Команда MUL (Multiply) перемножает знаковые или беззнаковые переменные для получения 32 – х битового результата. Флаги изменяются в соответствии с результатом.

Действие

(Rd) = (Rm) * (Rd[31:0])

N Flag = Rd[31]

Z Flag = if Rd == 0 then 1 else 0

C Flag не затрагивается

V Flag не затрагивается

Пример

MUL R1, R2 ; R1 = R1 * R2

MVN – ARM

Пересылка инверсии (Move Not)

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

MVN{<cond>}{S}<Rd>,<shifter_operand>Формат команды представлен на рис. 1.

Описание

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

S– устанавливаетS-бит ­– бит условия (см. таблицу 1).

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

<shifter_operand> – второй операнд (см. таблицу 3).

Команда загрузки регистра отрицательной константой (MVN) передаёт инверсное содержимое регистра {S}(заданное слово или 4-х разрядную 16-ричную константу) в <Rd>, т.е. для каждого бита {S} в 1 соответствующий бит в <Rd> будет равен 0.

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

Используется для записи отрицательного значения в регистр.

Примеры

MVN Ra, Ra RSB Ra, Ra, #0

MVN – THUMB

Пересылка с инверсией (Move not)

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

MVN <Rd>, <Rm>

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

Описание

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

<Rm> – Регистр, содежащий значение, дополнение до единиц которого записывается в <Rd> (см. таблицу 1).

Команда MVN (Move NOT) используется для дополнения значения регистра, часто для формирования битовой маски. Флаги изменяются в соответствии с результатом.

Действие

(Rd) =NOT(Rm)

N Flag = Rd[31]

Z Flag = if (Rd) == 0 then 1 else 0

C Flag не затрагивается

V Flag не затрагивается

Пример

MVN R0, R1 ; R0 := NOT(R1)

NEGTHUMB