OSDev Wiki
Advertisement
BLX 1 (ARM)

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

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

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

Синтаксис[]

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)

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

Первый тип команды BLX используется для организации перехода по фиксированному адресу, находящемуся в пределах от -33554432 до +33554428 байтов от команды перехода. Второй тип позволяет осуществить переход по любому косвенно заданному адресу.

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

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

Примечания[]

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

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

Advertisement