- •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
Левый сдвиг на n позиций соответствует умножению сдвигаемого числа на 2n, а правый – делению сдвигаемого числа на 2n, если рассматривать сдвигаемое число как беззнаковое.
4.8.3 Циклический сдвиг вправо
При циклическом сдвиге вправо разряды, уходящие за пределы разрядной сетки справа, попадают в освобождающиеся позиции слева.
4.8.4 Циклический сдвиг вправо на одну позицию с переносом
При циклическом сдвиге на одну позицию с переносом, освобождающаяся позиция слева заполняется значением флага переноса С из регистра состояния программы. А младший разряд, уходящий за пределы разрядной сетки копируется в флаг переноса С, но только если в команде использован суффикс S.
4.9Примеры
|
Листинг 3. Примеры команд с различными форматами |
|
|
|
записи универсального операнда: |
|
|
|
sub |
r3, r2, r1, lsl #4 |
@ Сдвинуть значение r1 влево на 4 позиции, |
|
|
@ вычесть его из r2 и поместить результат в r3. |
|
|
@ Универс. операнд — по выражениям (4) и (5). |
mov |
r2, r5, asr r6 |
@ Значение r1 не меняется. |
@ Поместить в r2 содержимое регистра r5, |
||
|
|
@ арифметически сдвинутого вправо на количество |
|
|
@ позиций, содержащееся в младшем байте регистра r6 |
|
|
@ Универсальный операнд сформирован по выражениям |
ands |
r1, r2, r3 |
@ (4) и (6). Значение r5 не меняется. |
@ Прибавить к значению регистра r2 значение |
||
|
|
@ регистра r3 и сохранить результат в регистре r1; |
|
|
@ обновить флаги условий. |
|
|
@ Универсальный операнд записан в соответствии |
orr |
r1, r2, #0xFF000000 |
@ с выражением (4) без указания сдвиговой операции |
@ Выполнить операцию «логическое ИЛИ» между |
||
|
|
@ значением регистра r2 и числом 0xFF000000, |
|
|
@ записав результат в регистр r1. |
add |
r1, r2, r5, lsl #3 |
@ Универсальный операнд — по выражению (3). |
@ Сдвинуть значение r5 влево на 3 позиции, |
||
|
|
@ прибавить к r2 и поместить результат в r1. |
sub |
r2, r3, r5, lsr r6 |
@ Универс. операнд — по выражениям (4) и (5) |
@ Сдвинуть значение r5 вправо на значение |
||
|
|
@ младшего байта регистра r6, вычесть из r3 |
|
|
@ и сохранить результат в r2. |
|
|
@ Универс. операнд — по выражениям (4) и (6) |
15