OSDev Wiki
Advertisement
BLX 1 (ARM)

Формат инструкции BLX типа 1

Команда BLX вызывает подпрограмму Thumb из кода ARM по адресу, заданному в коде команды. Адрес возврата к коду ARM сохраняется в регистре LR (R14).

Эта команда является безусловной.

BLX 2 (ARM)

Формат инструкции BLX типа 2

Синтаксис

BLX  target_address

target_address определяет адрес инструкции, на которую выполняется переход. Адрес перехода вычиляется следующим образом:

1. Находящееся в коде команды значение signed_immed_24 расширяется до 30 разрядов.

2. Полученная величина сдвигается влево на 2 бита, в результате чего получается 32-разрядное число со знаком, два младших бита которого равны нулю.

3. В полученном значении бит 1 устанавливается равным биту H кода команды (он определяет, с какого полуслова начнётся исполнение кода Thumb).

4. Итоговое 32-разрядное число прибавляется к текущему значению счётчика команд PC, что обеспечивает выполнение перехода (текущее значение PC равно адресу данной команды BLX плюс 8).

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

ARMv5 и старше.

Исключения

Отсутствуют.

Операция

LR = адрес инструкции, следующей за BLX
CPSR.T = 1
PC = PC + (SignExtend_30(signed_immed_24) << 2) + (H << 1)

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

Для возврата из подпрограммы Thumb к коду ARM можно использовать инструкцию BX R14. Альтернативой является использование команд PUSH и POP:

PUSH  {регистры,R14}
основной код подпрограммы
POP   {регистры,PC}

Примечания

1. Инструкция BLX является безусловной.

2. Бит 24 кода команды (H) используется в качестве бита 1 адреса перехода.

Advertisement