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

Команда регистрового обмена с сопроцессором

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

MCRR{<cond>} <coproc>, <opcode>, <Rd>, <Rn>, <CRm>

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

Описание

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

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

<opcode> – код операции (см. таблицу 1).

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

<CRn> – регистр результата.

<CRm> – дополнительный регистр, который используется как регистр результата.

Команда MCRRнаправляет значения регистров <Rd> и <Rn> сопроцессору с номеромcp_num. Если отображено ни одного сопроцессора, которые могут обработать команду, генерируется ошибка Undefined Instruction (команда не определена).

Действие

Если условие (<cond>) выполнено, то значение регистра <Rd> отправляется сопроцессору с номером [cp_num], затем значение регистра <Rn> отправляется сопроцессору с номером [cp_num].

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

MCRRиспользуется для возбуждения операций с сопроцессором, которые зависят от значений двухARMрегистров. Примером может служить операция двойной точности (64-битное представление действительного числа) с числом с плавающей запятой, основанное на двухARMрегистрах с записью результата в один регистр.

Примечания

Поля сопроцессора: архитектурой ARMопределены правила заполнения только для битов [31:8]. Остальные поля заполняются согласно рекомендациям, написанным для совместимости с разработанными системамиARM. Команды сопроцессора, которые не реализованы являются неопределенными.

Порядок передачи

Эти правила определяют как используются значения регистров <Rd> и <Rn> используются. Архитектурой не предусмотрено какой из регистров будет передаваться первым или будут ли они передаваться вместе. Это зависит от конкретной реализации.

Примеры

MCRR p14,1,R7,R8,c12

ARM регистр направляет сопроцессору 14 команду opcode_1 = 1. Исходные данные находятся в регистре R7 и R8, регистр рез

MLAARM

Команда умножения, накопления

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

MLA {<cond>}{S} <Rd>, <Rm>, <Rs>, <Rn>

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

Описание

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

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

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

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

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

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

MLA умножает знаковые или беззнаковые операнды, чтобы получить 32-битовый результат, который будет добавлен к третьему операнду, и записан в регистр предназначения. Флаги условия (состояния) произвольно обновлены, основанные на результате.

Умножает значения от Rm и Rs, добавляет значение от Rn, и размещает наименее существенные 32 частицы результата в Rd.

Примеры

MLAEQS R1,R2,R3,R4

Выполнить по условию EQ: R1 := R2*R3 + R4 и разрешить воздействие на флаги CPSR выполнения (S)

MOVARM

Загрузить в регистр константу

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

MOV{cond}{S} Rd, <shifter_operand>

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

Описание

<cond> – поле условия

<Rd> – регистр результата

<S> – разрешить воздействие на флаги регистра CPSR, если S указано.

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

Копирует значение shifter_operand в Rd. Копирует константу или регистр в регистр.

Если S определен, N, Z флаги обновлены. C флаг может быть обновлен вычислением shifter_operand.

Примеры

MOV R5,#0x20 // загружает в R5 константой по адресу 0x20

MOVR2,R3 // загружает вR2 значение изR3

MOVR4,R5,SHL#4 // загружает вR4 значением изR5

MOV PC,R14 ; Возврат из подпрограммы.

MOV (1) – THUMB