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

Команда перехода со ссылкой и сменой режима (Branch with Link and Exchange)

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

BLX <target_addr>

Описание

<target_address> – выражение для вычисления смещения перехода.

Действие

LR = адресу инструкции после команды перехода, T Flag = 1, а PC = PC + (SignExtend(signed_immed_24) << 2) + (H << 1).

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

Команда BLX используется, чтобы выполнить вызов подпрограммы THUMB из инструкций ARM.

Примеры

BLX R14 // вернуться из подпрограммы

BLX(2) – ARM

Команда перехода со ссылкой и сменой режима (Branch with Link and Exchange)

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

BLX{<cond>} <Rm>

Описание

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

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

Действие

Если условие ConditionPassed(cond) выполнено, то LR = адресу инструкции после команды перехода, а T Flag = Rm[0] и PC = Rm AND 0xFFFFFFFE.

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

Команда BLX используется, чтобы выполнить вызов подпрограммы ARM или THUMB из инструкций ARM.

Примеры

BLX armfunc // вызов ARM функции

LDR R6,=function

BLXR6 // вызов функции

BLXTHUMB

Команда перехода со ссылкой и сменой режима (Branch with Link and Exchange)

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

BLX label

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

Описание

Копирование адреса следующей команды в R14, смена режима на ARM и переход по метке. Переход должен быть в пределах +/- 4 МБ относительно текущей команды.

Примечание: данная мнемоника формирует две 16-ти битные команды.

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

Действие

BLX

PC := (LR + OffsetLow << 1) AND 0xFFFFFFFE

LR := адрес следующей команды

команда перехода со ссылкой и сменой режима

Примеры

BLX func

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

BLX <Rm>

Описание

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

Копирование адреса следующей команды в R14 и переход по адресу, который содержится в Rm. Смена режима на ARM, если Rm[0] = 0.

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

Действие

BLX

LR := адрес команды, следующей за BLX

PC = Rm[31:l] << 1

команда перехода со ссылкой и сменой режима

Примеры

BLX R6

BXARM

Переход и переключение режима ядра (Branch and Exchange)

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

BX{<cond>} <Rm>

Описание

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

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

Действие

Если условие ConditionPassed(cond) выполнено, то T Flag = Rm[0] и PC = Rm AND 0xFFFFFFFE.

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

Команда BX используется для перехода к адресу, содержащемуся в регистре Rm.

Примеры

ADR R0, Into_THUMB + 1 ; Сформировать адрес перехода

; и установить в "1" бит 0, т.е. указать

; на необходимость переключения в режим THUMB

BX R0 ; Перейти и сразу переключить ядро в режим THUMB

CODE16 ; Последующие команды должны

Into_THUMB ; декодироваться в режиме THUMB

.

.

.

ADR R5, Back_to_ARM ; Сформировать адрес перехода

; и очистить бит 0, т.е. указать

; на необходимость возврата в режим ARM

BX R5 ; Перейти и сразу переключить ядро в режим ARM

.

.

.

ALIGN ; Выравнивание по слову

CODE32 ; Последующие команды должны

Back_to_ARM ; декодироваться в режиме ARM

.

BX – THUMB