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

Команда добавление сразу нескольких операндов с удвоением одного из них

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

QADD {<cond>}<Rd>, <Rm>, <Rn>

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

Описание

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

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

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

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

Записывает сумму Rm и Rn*2 в регистр Rd. Оба этих значения рассматриваются как целые знаковые числа.

Изменение состояния флагов: Если происходит переполнение то устанавливается флаг Q. Для считывания состояния этого флага или его сброса можно воспользоваться MRS инструкциями.

Действие

Если условие (<cond>) выполнено, то (Rd) = (Rn)*(Rn) +Rm.

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

Применительно только для ARM9E. КомандаQADDиспользуется, когда необходимо произвести сложение сразу нескольких операндов с удвоением одного из них.

Примеры

QDADD R0, R1, R9

(R0)=(R1)*(R1)+(R9)

QDADDEQR0,R1,R9

Если Z= 1, то (R0)=(R1)*(R1)+(R9).

QDSUBARM

Команда приведённого вычитания с удвоением второго операнда (double saturated substraction)

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

QSUB {<cond>} <Rd> <Rm> <Rn>

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

Описание

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

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

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

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

Команда вычитает из первого операнда удвоенный второй, при этом приводя как результат удвоения, так и конечный к диапазону 32-х битных целых чисел со знаком ( –231x ≤ 231–1). Если приведение происходит, флаг Q текущего слова состояния программы (CPSR) устанавливается в единицу.

Действие

Если условие (<cond>) выполнено, то (Rd) = (Rn) ­– 2*(Rm). Результат приводится к диапазону 32х битных целых чисел со знаком ( –231≤ x ≤ 231–1). Если приведение происходит, флаг Q текущего слова состояния программы (CPSR) устанавливается в единицу.

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

Команда QDSUBиспользуется когда необходимо дважды произвести вычитание одного 32-х битного числа из другого с приведением результата к диапазону операндов.

Примеры

QDSUB R1 R2 R4 //вычитает удвоенное значение регистра R4 из регистра R2 и помещает результат в R1

QDSUB R6 R6 R6 //вычитает удвоенное значение регистра R6 из него же самого и помещает результат в R6: R6:=R6-2*R6=-R6

QDSUBEQ R1 R2 R4 //Если Z установлен, вычитает удвоенное значение регистра R4 из регистра R2 и помещает результат в R1

QSUBARM

Команда приведённого вычитания (saturated substraction)

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

QSUB {<cond>} <Rd> <Rm> <Rn>

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

Описание

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

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

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

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

Команда производит целочисленное вычитание, приводя результат к диапазону 32-х битных целых чисел со знаком ( –231≤ x ≤ 231–1). Если приведение происходит, флаг Q текущего слова состояния программы (CPSR) устанавливается в единицу.

Действие

Если условие (<cond>) выполнено, то (Rd) = (Rn) ­– (Rm). Результат приводится к диапазону 32х битных целых чисел со знаком ( –231≤ x ≤ 231–1). Если приведение происходит, флаг Q текущего слова состояния программы (CPSR) устанавливается в единицу.

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

Команда QSUBиспользуется когда необходимо произвести вычитание двух 32-х битных чисел с приведением результата к диапазону операндов.

Примеры

QSUB R1 R2 R3 //вычитает значение регистра R3 из регистра R2 и помещает результат в R1

QSUBNE R1 R2 R3 //Если Z сброшен, вычитает значение регистра R3 из регистра R2 и помещает результат в R1

ROR – THUMB