CORTEX M4: путаница в инструкциях BX и BLX и бит (0) LR
Насколько я понимаю, для кортекса M4 регистр адресов для BX и BLX должен иметь бит (0), установленный в 1. Я запутался, как это работает в отношении инструкции BLX, вставляется ли адрес в регистр LR после выполнения BLX инструкция имеет бит (0) установлен в 1? Нужно ли вручную изменять его на 1 до выполнения возврата с помощью инструкции BX?
Другой вариант - использовать: MOV PC, LR, но кажется, что это побеждает назначение инструкций перехода.
1 ответ
У адреса, вставленного в регистр LR после выполнения инструкции BLX, бит (0) установлен в 1?
Да.
Инструкция BLX устанавливает бит (0) LR в 0, если ЦП работал в режиме ARM до перехода, и в 1, если ЦП работал в режиме Thumb.
Поскольку Cortex M4 поддерживает только режим команд Thumb (а не режим ARM), бит (0) всегда будет установлен в 1 с помощью BLX.
Другой вариант - использовать: MOV PC, LR, но кажется, что это побеждает назначение инструкций перехода.
На старых процессорах ARM, которые не имели режима Thumb, MOV PC,LR
инструкция была "официальной" инструкцией возврата.
Недостатком является то, что вы не можете вернуться к функции Thumb из функции ARM и наоборот.
На процессоре, который поддерживает только режим Thumb, вы также можете использовать эту инструкцию.