Базовая команда перехода (В) позволяет выполнить переход в диапазоне до 32 Мбайт как вперед, так и назад. Модифицированная команда перехода с сохранением адреса (BL) выполняет туже операцию и сохраняет в регистре связи (R14 – LR) текущее состояние PC, увеличенное на четыре (из-за особенностей организации конвейера команд).
Команда перехода с сохранением адреса используется в качестве команды вызова подпрограмм, сохраняющей адрес возврата в регистре связи. Для возврата из подпрограмм можно использовать обычную команду перехода, выполняющую переход по адресу, находящемуся в регистре связи.
Используя флаги условий, можно выполнять условные вызовы подпрограмм.
Существует еще две команды перехода: «переход со сменой состояния» (ВХ) и «переход со сменой состояния и сохранением адреса» (ВLX).Эти команды осуществляют те же операции, что и предыдущие команды, но при этом еще и выполняют переключение с набора команд ARM и Thumb и обратно.
Это единственный способ, который необходимо использовать для изменения используемого набора команд, т.к. непосредственные манипуляции с флагом Т регистра состояния CPSR могут привести к непредсказуемым результатам.
Команды обработки данных
Обобщенный формат всех команд обработки данных приведен на рисунке 5.3.
Рисунок 5.3 Формат команд обработки данных
В процессоре ARM7 имеется многорегистровое устройство циклического сдвига (barrel shifter), позволяющее при выполнении команды сдвигать значение второго операнда на величину до 32-битов.
Бит S используется для управления флагами условий. Если этот бит установлен, флаги условий изменяются в соответствии с результатом выполнения команды. Если этот бит сброшен, состояние флагов условий не изменяется. Если при установленном бите S в качестве регистра результата указан счетчик команд (R15), производится копирование содержимого регистра состояния CPSR в регистр SPSR. Эта возможность используется для восстановления PC и переключения в исходный режим в конце обработки исключительных ситуаций. Выполнение такой команды не возможно в режиме User, т.к. в этом режиме регистр SPSR отсутствует, результат выполнения этой операции невозможно предсказать.
Эти особенности предоставляют богатый набор команд обработки данных, которые позволяют создавать очень эффективный программный код. Но эта же особенность создает определенные сложности при разработки компиляторов.
Копирование регистров
Процессор ARM7 поддерживает команды загрузки/сохранения, позволяющие пересылать знаковые и беззнаковые числа разного размера (слово – 32 бита, полуслово – 16 байт, байт – 8 бит) в заданных регистрах.
Данные команды способны равнозначно воздействовать на весь регистровый банк процессора, за счет чего имеется возможность загрузить 32-битное слово непосредственно в РС, осуществляя переход в пределах всего адресного пространства процессора. Если конечный адрес лежит вне диапазона команды перехода, то его можно непосредственно загрузить в счетчик команд.