- •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
add |
r3, r1, r2 |
@ r3 = (-32000)+(-768) = -32768 = 0xffff8000 |
|
ldr |
r1, =result |
@ Загрузить адрес сохранения результата |
|
strh |
r3, [r1] |
@ Переслать результат в оперативную память |
|
... |
|
|
|
.section .data |
|
||
result: |
|
0 |
|
.hword |
|
7Команды умножения
7.1Условные обозначения
При описании формата записи команд умножения на языке ассемблера будут использоваться следующие условные обозначения:
-op – мнемоника инструкции (например «mul», «mla»);
-{} – фигурные скобки; указывают, что содержащееся в них выражение не является обязательным и может быть опущено;
-{cond} – необязательный предикативный суффикс для реализации условного выполнения команды (подробнее см. п. 2);
-{s} – суффикс, указывающий, что инструкция при выполнении обновляет флаги условий в регистре состояния программы;
-Rd – операнд назначения; хранит результат умножения;
-Rm, Rs – операнды-множители;
-Rn – суммируемый операнд (аккумулятор);
-RdHi, RdLo – регистры, содержащие старшее и младшее слово результата;
-RdAHi, RdALo – регистры, содержащие суммируемый операнд(аккумулятор) до выполнения инструкции, а также хранящие результат после выполнения.
7.2Простое умножение
Листинг 8. Виды команд простого умножения
Вид команд |
Мнемоники |
Формат записи |
|
|
|
Перемножение |
mul |
op{cond}{S} Rd, Rm, Rs |
Перемножение с суммированием |
mla |
op{cond}{S} Rd, Rm, Rs, Rn |
Команда простого умножения (mul) позволяет перемножить два 32разрядных числа и сохранить младшие 32 бита результата в операнд назначения.
25
Перемножение с суммированием (mla) позволяет перемножить два 32разрядных числа, прибавить к произведению суммируемый операнд (Rn) и сохранить младшие 32 бита полученного результата в операнд назначения.
В случае, если указан суффикс «S» происходит установка флагов N и Z в соответствии с результатом, флаг «V» не изменяется, состояние флага «C» становится неопределённым.
7.3«Длинное» умножение
Команды длинного умножения позволяют перемножить два 32-разрядных числа, которые могут рассматриваться как числа со знаком или без. Результатом умножения является 64-разрядное число. Поскольку все регистры микроконтроллера являются 32х-разрядными, то для сохранения 64 бит результата используется два 32х-разрядных регистра, явно указываемые в команде.
В случае, если указан суффикс «S» происходит установка флагов N и Z в соответствии с результатом, состояние флагов «V» и «C» становится неопределённым.
|
|
|
|
|
Таблица 12: Форматы записи команд умножения |
|
|
|
|
|
|
Вид команд |
|
Мнемоники |
|
Формат записи |
|
|
|
|
|
|
|
Длинное перемножение |
umull, smull |
|
op{cond}{S} RdLo, RdHi, Rm, Rs |
||
Длинное перемножение с |
umlal, smlal |
|
op{cond}{S} RdALo, RdAHi, Rm, Rs |
||
суммированием |
|
|
|
||
|
|
|
|
Таблица 13: Описание команд длинного умножения |
|
|
|
|
|
|
|
Мнемоника |
Расшифровка |
Описание |
|
|
|
|
|
|
|
||
umull |
Unsigned |
|
Исходные операнды (Rm, Rs) рассматриваются как 32х- |
||
|
multiply long |
|
разрядные числа без знака. Младшее слово результата |
||
|
|
|
умножения сохраняется в RdLo, а старшее – в RdHi. |
||
smull |
Signed |
|
Исходные операнды (Rm, Rs) рассматриваются как 32х- |
||
|
multiply long |
|
разрядные числа со знаком. Младшее слово результата |
||
|
|
|
умножения сохраняется в RdLo, а старшее – в RdHi. |
||
umlal |
Unsigned |
|
Исходные операнды (Rm, Rs) рассматриваются как 32х- |
||
|
multiply- |
|
разрядные числа без знака. 64-разрядный результат |
||
|
accumulate |
|
умножения прибавляется к 64-разрядному беззнаковому |
||
|
long |
|
числу, содержащемуся в RdALo и RdAHi. |
||
smlal |
Signed |
|
Исходные операнды (Rm, Rs) рассматриваются как 32х- |
||
|
multiply- |
|
разрядные числа со знаком. 64-разрядный результат |
||
|
accumulate |
|
умножения прибавляется к 64-разрядному числу со знаком, |
||
|
long |
|
содержащемуся в RdALo и RdAHi. |
26