- •1 Общие сведения
- •1.1 Типы данных
- •1.2 Регистры общего назначения
- •1.3 Регистр состояния программы
- •1.4 Набор инструкций ARM
- •2 Флаги условий
- •3 Предикаты выполнения команды
- •4 Команды обработки данных
- •4.1 Условные обозначения
- •4.2 Форматы записи универсального операнда
- •4.3 Форматы записи команд обработки данных
- •4.4 Арифметические операции
- •4.5 Логические операции
- •4.6 Операции простой пересылки
- •4.7 Операции сравнения и проверки
- •4.8 Сдвиговые операции при формировании второго операнда
- •4.8.1 Арифметический сдвиг вправо
- •4.8.2 Логические сдвиги
- •4.8.3 Циклический сдвиг вправо
- •4.8.4 Циклический сдвиг вправо на одну позицию с переносом
- •4.9 Примеры
- •5 Команды передачи управления
- •5.1 Условные обозначения
- •5.2 Форматы записи команд передачи управления
- •5.3 Переход на метку
- •5.4 Переход по адресу в регистре
- •5.5 Вызов подпрограммы
- •5.6 Вызов подпрограммы по адресу в регистре
- •5.7 Вызов подпрограммы со сменой набора инструкций
- •6 Команды доступа к памяти (пересылки данных)
- •6.1 Условные обозначения
- •6.2 Форматы записи выражения, формирующего адрес, и виды адресации
- •6.3 Режимы пересылки
- •6.4 Особенности использования различных команд пересылки
- •6.5 Примеры использования команд пересылки
- •7 Команды умножения
- •7.1 Условные обозначения
- •7.2 Простое умножение
- •7.3 «Длинное» умножение
- •8 Псевдоинструкции
- •8.1 Псевдоинструкция ldr
5Команды передачи управления
5.1Условные обозначения
При описании формата команд передачи управления на языке ассемблера будут использоваться следующие условные обозначения:
-op – мнемоника инструкции (например «b», «bl»);
-{} – фигурные скобки; указывают, что содержащееся в них выражение не является обязательным и может быть опущено;
-{cond} – необязательный предикативный суффикс для реализации условного выполнения команды перехода (подробнее см. п. 2);
-label – метка в тексте программы;
-Rm – регистр, содержащий адрес, по которому будет сделан переход.
5.2Форматы записи команд передачи управления
Выполнение большинства команд, например таких, как в листинге 3, происходит последовательно (сверху вниз по тексту). Выполнив одну команду процессор переходит на следующую. Однако на практике часто встречаются ситуации, когда требуется прервать такое последовательное выполнение и сразу перейти по некоторому известному адресу в памяти. Команды, которые позволяют осуществить такой переход, называются командами перехода или командами передачи управления. Различные виды команд передачи управления представлены в табл. 6.
Для большинства команд передачи управления допускается использование предикативных суффиксов (т. е. с выполнением при соблюдении определённого условия), что позволяет реализовать условные переходы.
Таблица 6: Виды команд передачи управления
Вид команды |
|
Мнемоники |
Формат |
|
|
|
|
Переход на метку |
|
b |
op{cond} label |
Переход по адресу в регистре |
|
bx |
op{cond} Rm |
Вызов подпрограммы |
|
bl |
op{cond} label |
Вызов подпрограммы по адресу |
в |
blx |
op{cond} Rm |
регистре |
|
|
|
Вызов подпрограммы со сменой набора |
blx |
op label |
|
инструкций |
|
|
|
16
5.3Переход на метку
Простой переход на метку производится с помощью команды «b» (от англ. «branch» – «ответвление»). Меткой называется заданное программистом место
втексте программы на языке ассемблера. Компилятор автоматически определяет адрес, на котором находится метка и использует затем его везде, где
висходном тексте использовалась эта метка. Метка не занимает никакой объём памяти программы, поэтому адрес, который получится из метки будет, по сути, адресом первой инструкции, следующей за меткой. Так, в листинге 4 первая команда перехода произведёт передачу управления на инструкцию, записанную
вследующей строчке после метки label.
5.4Переход по адресу в регистре
Для перехода по адресу содержащемуся в регистре используются команды «bx» (от англ. «branch and exchange»).
При использовании перехода по адресу в регистре следует помнить, что адрес, содержащийся в регистре должен быть выравнен по границе инструкции (т. е. должен быть кратен 4 для набора инструкций ARM).
Дополнительной функцией данной инструкции является возможность смены набора инструкций ARM на набор инструкций Thumb. Если младший бит адреса, содержащегося в регистре, будет установлен (т. е. адрес будет нечётным), то при переходе произойдёт изменение набора инструкций.
5.5Вызов подпрограммы
Вызов подпрограммы производится с помощью команды «bl» (от англ. «branch with link» — «ответвление со ссылкой»). При выполнении команды bl в регистр r14 (LR) автоматически записывается адрес инструкции, следующей за инструкцией перехода. Это позволяет осуществить возврат из подпрограммы.
Если вызванная подпрограмма сама не вызывает других подпрограмм, то для возврата достаточно будет сделать переход по адресу, лежащему в регистре LR с помощью команды «bx» (см. листинг 4 и п. 5.4). Если вызываемая подпрограмма сама вызывает другие подпрограммы, то значение регистра LR должно быть где-то сохранено (например, в стеке) этой подпрограммой, т. к. иначе вызов вложенной подпрограммы приведёт к записи в LR нового адреса возврата и старый будет утерян.
17