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

Пересылка (Move)

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

MOV <Rd>, #<immed_8>

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

Описание

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

<immed_8> – 8–ми битовое непосредственное значение (в пределах от 0 до 255), пересылаемое в регистр <Rd> (см. таблицу 1).

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

Действие

(Rd) =immed_8

N Flag = Rd[31]

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

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

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

Пример

MOV R0, #205 ; R0 := 205

MOV (2) – THUMB

Пересылка (Move)

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

MOV <Rd>, <Rn>

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

Описание

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

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

Этот формат команды MOV используется для пересылки значения из одного регистра младшего набора в другой. Флаги выставляются в соответствии с этим значением.

Действие

(Rd) = (Rn)

N Flag = Rd[31]

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

C Flag = 0

V Flag = 0

Пример

MOV R0, R1 ; R0 := R1

MOV (3) - THUMB

Пересылка (Move)

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

MOV <Rd>, <Rm>

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

Описание

<Rd> – Регистр назначения: это может быть любой из регистров от R0 до R15 (его номер кодируется в команде как H1 – старший значащий бит – и Rd – остальные три бита) (см. таблицу 1).

<Rm> – Регистр, содержащий значение для пересылки: это может быть любой из регистров от R0 до R15 (его номер кодируется в команде как H2 – старший значащий бит – и Rm – остальные три бита) (см. таблицу 1).

Этот формат команды MOV используется для пересылки значения из, в или между регистрами старшего набора. В отличие от MOV (2) эта команда не изменяет значения флагов.

Действие

(Rd) = (Rm)

Пример

MOV R0, R1 ; R0 := R1

MRC/MRC2 – ARM

Команда перемещения данных из сопроцессора в arm регистр (Move to arm Register from Coprocessor)

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

MRC {<cond>} <coproc>, <opcode_1>, <Rd>, <CRn>, <CRm>{, <opcode_2>}

MRC2 <coproc>, <opcode_1>, <Rd>, <CRn>, <CRm>{, <opcode_2>}

формат команды перемещения данных

Описание

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

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

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

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

<CRm> - регистр назначения сопроцессора (см. таблицу 1).

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

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

Команда MRC перемещает значение из сопроцессора с номером cp_num в ARM регистр или в заданный флаг.

Если нет сопроцессоров, которые сигнализируют о том, что могут выполнить данную команду, то будет сгенерировано исключение Undefined Instruction (Undefined Instruction exception)

MRC2 – устанавливает поле условия в значение 0b1111. Это дает возможность проектировщикам сопроцессора использовать дополнительное место для кода операции. В этом случае операция должна быть выполнена без задания каких-либо условий.

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

1. Если в <Rd> значение R15, то флаги условий устанавливаются из первых четырех битов значения, взятого из сопроцессора обозначенного параметром <coproc> (чтобы обеспечить переход по условиям в зависимости от статуса сопроцессора), остальные 28 бит будут проигнорированы.

Как пример такого использования: перемещение результата сравнения полученного сопроцессором, выполняющим операции с плавающей запятой, во флаги условий ARM.

2. Команда может записать в регистр <Rd> значение из сопроцессора, обозначенного параметром <coproc>

Как пример такого использования: команда преобразование числа с плавающей запятой в целое, выполняемое в сопроцессоре, работающем с числами с плавающей запятой.

Примечание

Только следующие биты выполняемой команды определены в ARM архитектуре: биты[31:24], бит [20], биты [15:8] и бит[4].

Оставшиеся поля используются для совместимости с системами разработки ARM архитектуры.

Генерируемые исключения

Undefined Instruction

Версия архитектуры

Для MRC – 2 и выше

Для MRC2 – 5 и выше

Примеры

;@ * * * MRC * * * AREA cp_move, CODE, READONLY MRC    p0, 5, R14, c8, c3, 3 MRC    p1, 6, R13, c9, c4, 4 MRC    p2, 7, R12, c10, c5, 6 MRC    p3, 0, R11, c11, c3, 1 ;@ * * * MRC2 * * * MRC2   p4, 3, R7, c4, c8, 0 MRC2   p5, 4, R8, c5, c9, 1 MRC2   p6, 5, R9, c6, c0, 2 MRC2   p7, 6, R10, c7, c1, 3 END

MRRС – ARM