Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Основные сведения о ARM.pdf
Скачиваний:
113
Добавлен:
18.05.2014
Размер:
482.2 Кб
Скачать

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