Команда 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 адреса перехода.