- •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
|
|
|
Листинг 1: Пример реализации условного выполнения |
|
|
|
инструкций с использованием предикативных суффиксов |
|
|
|
|
cmp r3, |
r4 |
@ |
Сравнить значения регистров r3 и r4 (произойдёт |
addgt r5, |
|
@ |
обновление флагов, cmp всегда обновляет флаги) |
r5, #22 @ |
Если r3>r4, прибавить к r5 число 22, результат записать в r5 |
||
moveq r3, |
#0 |
@ |
А если r3 было равно r4, тогда обнулить r3 |
4Команды обработки данных
К командам обработки данных относятся:
-арифметические операции (сложение, вычитание и их разновидности);
-логические операции («И», «ИЛИ» и др.);
-команды сравнения и проверки;
-команды простой пересылки данных в регистры.
Почти все команды обработки данных могут обновлять или не обновлять значения флагов условий регистра состояния программы в зависимости от наличия или отсутствия суффикса «s» в мнемонике команды. К исключениям относятся команды сравнения (cmp, cmn) и проверки (tst, teq), которые всегда обновляют флаги и не поддерживают добавление суффикса «s».
4.1Условные обозначения
При описании формата записи команд обработки данных на языке ассемблера в последующих разделах будут использоваться следующие условные обозначения:
-op – мнемоника инструкции (например «add», «mov», «cmp»);
-{} — фигурные скобки; указывают, что содержащееся в них выражение не является обязательным и может быть опущено;
-{cond} — необязательный предикативный суффикс для реализации условного выполнения команды (подробнее см. п. 2)
-{s} — суффикс, указывающий, что инструкция при выполнении обновляет флаги условий в регистре состояния программы. Если этот суффикс не указан, то флаги условий не изменяются;
-Rd — операнд назначения, т. е. регистр, в который будет записан результат выполнения команды;
-Rn — первый исходный операнд;
-Rdn — операнд, являющийся первым исходным операндом и операндом назначения одновременно; текущее значение регистра будет использовано при выполнении операции, после чего результат будет записан в тот же регистр;
9
-Operand2 — второй исходный операнд, также называемый универсальным операндом, или «shifter_register» (см. п. 4.2).
Например, формату записи арифметических команд |
|
op{cond}{s} Rd, Rn, Operand2 |
(1) |
соответствует команда |
|
addgts r6, r5, #22, |
(2) |
где «add» — мнемоника команды; «gt» — предикативный суффикс; «s» — суффикс, предписывающий выполнить обновление флагов условий, «r6» — операнд назначения, «r5» — первый исходный операнд, «#22» — второй исходный операнд (он же — «универсальный операнд»);
Примеры команд обработки данных приведены в листинге 2.
|
|
|
Листинг 2. Примеры команд обработки данных |
|
|
|
|
add |
r1, #5 |
@ Добавить 5 к значению регистра r1 |
|
sub |
r0, |
r1 |
@ Вычесть значение регистра r1 из значения регистра r0 |
and |
r3, |
r1, r0 |
@ и сохранить результат в r0 |
@ Произвести операцию «логическое И» над значениями |
|||
orrs |
r4, |
r2 |
@ регистров r1 и r0, сохранив результат в регистре r3 |
@ Произвести операцию «логическое ИЛИ», сохранив результат |
|||
|
|
|
@ в r4 и установив флаги условий в регистре состояния |
cmp |
r4, |
#1 |
@ программы |
@ Сравнить значение r4 с числом 1, выполнив вычитание; |
|||
moveq r1, |
#10 |
@ обновить флаги, но не сохранять результат. |
|
@ Если был установлен флаг Z (т. е. r4 равно 1), |
|||
|
|
|
@ загрузить в r1 число 10. |
4.2Форматы записи универсального операнда
Для записи второго исходного операнда (Operand2) используется один из следующих форматов (см. рис. 1):
#immed8r, |
(3) |
Rm {, shift}, |
(4) |
где immed8r – целое 32-разрядное число, представимое в виде 8-разрядного числа, сдвинутого по кругу на чётное число позиций; Rm — регистр, значение которого является основой для формирования второго исходного операнда; это значение может быть сдвинуто определённым образом, если указать способ сдвига и количества позиций (shift).
10
Способ и количество позиций сдвига shift указывается с использованием одного из 2х форматов:
ShType #n, |
(5) |
ShType Rs, |
(6) |
где «ShType» — вид сдвиговой операции (подробнее см. п. 4.8); «n» — количество позиций, на которое нужно осуществить сдвиг; «Rs» — регистр, значение младшего байта которого используется как величина сдвига.
В листинге 3 приведены примеры команд с различными форматами записи универсального операнда, а также даны комментарии для каждой команды.
Рис. 1: Схема формата записи универсального операнда в командах обработки данных
4.3Форматы записи команд обработки данных
Различные виды команд обработки данных записываются с использованием различных форматов, представленных в таблице 4.
Таблица 4: Форматы записи команд обработки данных
Вид команд |
Мнемоники |
Формат записи |
Арифметические |
add, sub, rsb, |
op{cond}{s} Rd, Rn, Operand2 |
|
adc, sbc, rsc |
op{cond}{s} Rdn, Operand2 |
Логические |
and, orr, eor, |
op{cond}{s} Rd, Rn, Operand2 |
|
bic |
op{cond}{s} Rdn, Operand2 |
Простой пересылки |
mov, mvn |
op{cond}{s} Rd, Operand2 |
Сравнения и проверки |
cmp, cmn, tst, |
op{cond} Rn, Operand2 |
|
teq |
|
4.4 Арифметические операции
Форматы записи арифметических операций:
11
op{cond}{s} Rd, Rn, Operand2 op{cond}{s} Rdn, Operand2
Мнемоника |
Расшифровка |
|
Описание |
|
|
|
|
add |
add |
Сложение |
Складывает первый исходный операнд (Rn / |
|
|
|
Rdn) со вторым (Operand2) и записывает |
|
|
|
результат в операнд назначения (Rd / Rdn). |
sub |
substract |
Вычитание |
Из первого операнда (Rn / Rdn) вычитает |
|
|
|
значение второго операнда (Operand2), |
|
|
|
помещая результат в операнд назначения (Rd / |
|
|
|
Rdn). |
rsb |
reverse |
Обратное |
Из второго операнда вычитает значение |
|
substract |
вычитание |
первого , помещая результат в операнд |
|
|
|
назначения. |
adc |
add with carry |
Сложение с |
Складывает первый исходный операнд со |
|
|
переносом |
вторым операндом и битом переноса (С), |
|
|
|
помещая результат в операнд назначения. |
sbc |
substract with |
Вычитание с |
Из первого операнда вычитает значение |
|
carry |
переносом |
второго, при этом уменьшая результат на |
|
|
|
единицу, если флаг С сброшен. |
rsc |
reverse |
Обратное |
Из второго операнда вычитает значение |
|
substract with |
вычитание с |
первого, при этом уменьшая результат на |
|
carry |
переносом |
единицу, если флаг С сброшен. |
4.5Логические операции
Форматы логических операций:
op{cond}{s} Rd, Rn, Operand2 op{cond}{s} Rdn, Operand2
Мнемоника |
Расшифровка |
Описание |
Комментарии |
|
|
|
|
and |
and |
Побитовое логическое "И" |
|
|
|
|
|
orr |
or |
Побитовое логическое "ИЛИ" |
|
|
|
|
|
eor |
exclusive or |
Побитовое логическое |
|
|
|
"Исключающее ИЛИ" |
|
bic |
bit clear |
Сброс битов по маске. |
Используется для сброса (т. е. |
|
|
(побитовое логическое "И" с |
обнуления) тех разрядов |
|
|
результатом применения |
исходного операнда, которые |
|
|
побитового "НЕ" над вторым |
во втором операнде |
|
|
операндом) |
установлены. |
12