Команда 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)
Использование
Для возврата из подпрограммы Thumb к коду ARM можно использовать инструкцию BX R14. Альтернативой является использование команд PUSH и POP:
PUSH {регистры,R14} основной код подпрограммы POP {регистры,PC}
Примечания
1. Инструкция BLX является безусловной.
2. Бит 24 кода команды (H) используется в качестве бита 1 адреса перехода.