ФЭНДОМ


Все версии архитектуры ARM поддерживают команду перехода B, обеспечивающую переход в пределах 32 Мбайт вперёд или назад. Кроме того, поскольку счётчик команд PC является одним из регистров общего назначения, переход может быть выполнен записью в него нового значения, дальность перехода при этом не ограничена. Условные и безусловные переходы выполняются одними и теми же командами, поскольку все они включают в свой состав поле кода условия.

Для вызова подпрограмм используется специальная разновидность обычной команды перехода Bинструкция BL. Она также осуществляет переход в пределах 32 Мбайт вперёд или назад, но дополнительно заносит адрес возврата в регистр связи LR (R14). Специальной команды для возврата из подпрограммы не предусмотрено; для этого может использоваться, например, команда пересылки MOV PC, LR.

В вариантах архитектуры, поддерживающих систему команд Thumb (ARMv4T и последующие) появилась инструкция BX, предназначенная для перехода к выполнению кода Thumb. Она копирует в PC содержимое заданного регистра общего назначения и дополнительно устанавливает младший бит PC, что является признаком работы в режиме Thumb. Кроме того, для перехода от кода ARM к коду Thumb может использоваться и прямая загрузка PC значением из памяти или другого регистра.

Для вызова из кода ARM подпрограмм, использующих систему команд Thumb, может использоваться комбинация из команды, заносящей в LR правильный адрес возврата, и собственно инструкции BX. Начиная с процессоров версии ARMv5, появились команды BLX первого и второго типов, обеспечивающие занесение в LR адреса возврата и переход к подпрограмме Thumb, причём адрес перехода может либо задаваться смещением, что обеспечит переход в пределах 32 Мбайт вперёд или назад (подобно команде BL), либо находиться в каком-либо регистре общего назначения (подобно инструкции BX).

В процессорах версии ARMv5, не имеющих поддержки Thumb, перечисленные выше инструкции, позволяющие переключиться в режим Thumb, могут всё-таки присутствовать и обеспечивать переход в режим Thumb. В этом случае после переключения произойдёт прерывание по неопределённой инструкции.

В процессорах, начиная с ARMv6, а также в J-версиях ARMv5 присутствует команда BXJ, обеспечивающая переход к выполнению кода Java.

Список команд перехода

  • B, BL — переход или переход с возвратом
  • BLX первого и второго типов — переход с возвратом к коду Thumb
  • BX — переход к коду Thumb
  • BXJ — переход к коду Java
Материалы сообщества доступны в соответствии с условиями лицензии CC-BY-SA , если не указано иное.