- •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
-четыре флага состояния АЛУ, отражающие результаты выполнения арифметических и логических операций: «Negative», «Zero», «Carry», «Overflow» (обозначаются для краткости как N, Z, C, V); эти же флаги также называются флагами условий;
-поле, определяющее режим работы процессора;
-поле, определяющее используемый в данный момент набор инструкций;
-бит, определяющий используемый режим порядка следования байтов в операциях пересылки;
-флаги управления запретом прерываний;
-другие данные.
1.4Набор инструкций ARM
Все команды из набора инструкций ARM условно разбиты на несколько групп:
-команды обработки данных;
-команды переходов (ветвлений);
-команды доступа к памяти / пересылки данных (т. е. загрузки и сохранения);
-команды умножения;
-команды пересылки значения регистра состояния программы;
-команды сопроцессора;
-команды генерации исключительных ситуаций (исключений);
-псевдо-инструкции;
-и др.
2Флаги условий
Флаги условий (они же – флаги состояния АЛУ) являются механизмом, позволяющим реализовать условное выполнение инструкций в зависимости от характеристик результата, полученного при выполнении некоторой предшествующей инструкции. Некоторые команды могут обновлять эти флаги (N, Z, C, V) в регистре состояния программы (CPSR). Каждый из флагов является определённым признаком результата, полученного при выполнении инструкции. Краткое описание приведено в табл. 1.
Некоторые инструкции всегда обновляют флаги условий. Для большинства остальных необходимо к мнемонике команды добавить суффикс «s».
6
|
|
|
Таблица 1. Флаги N, Z, C, V регистра состояния программы |
|||
|
|
|
|
|
|
|
Флаг |
Название |
Назначение |
|
|
|
|
N |
Negative |
Отражает значение старшего бита результата. Если флаг установлен, |
||||
|
|
то старший бит результата равен единице, что для знакового |
||||
|
|
представления чисел в формате дополнительного кода |
||||
|
|
свидетельствует об отрицательном результате. Если флаг сброшен, |
||||
|
|
то результат не отрицателен. |
|
|
|
|
Z |
Zero |
Признак нулевого результата. Если в результате выполнения |
||||
|
|
инструкции получился ноль, флаг устанавливается. В противном |
||||
|
|
случае сбрасывается. Является признаком равенства операндов при |
||||
|
|
выполнении инструкций сравнения или вычитания. |
|
|||
C |
Carry |
Флаг переноса. Для арифметических операций и операций |
||||
|
|
сравнения флаг устанавливается, если при выполнении операции |
||||
|
|
произошёл перенос в разряд за пределы разрядной сетки. В |
||||
|
|
противном случае флаг сбрасывается. Сюда относятся операции |
||||
|
|
сравнения, сложения, а также вычитания (учитывая реализацию |
||||
|
|
вычитания как сложения с числом, представленном в формате |
||||
|
|
дополнительного кода). |
|
|
|
|
|
|
Для не арифметических операций с использованием сдвига значение |
||||
|
|
флага устанавливается равным последнему биту, сдвинутому за |
||||
|
|
пределы разрядной сетки. |
|
|
|
|
|
|
Практически для всех других операций флаг переноса не |
||||
|
|
изменяется. |
|
|
|
|
V |
Overflow |
Флаг |
переполнения. |
Устанавливается, |
если |
результат |
|
|
арифметической операции не уместился в диапазон допустимых |
||||
|
|
значений. При этом исходные операнды и результат |
||||
|
|
рассматриваются как знаковые числа, представленные в формате |
||||
|
|
дополнительного кода. |
|
|
|
3Предикаты выполнения команды
Флаги состояний позволяют осуществить условное выполнение программы («ветвление») за счёт того, что практически для любой команды можно указать, что она должна выполняться только при выполнении определённого условия (предиката) и игнорироваться в случае невыполнения этого условия. Предикат команды формируется из набора состояний определённых флагов. Т. е. команда выполняется, если флаги, определяемые предикатом находятся в определённом состоянии.
Для того, чтобы в тексте программы указать необходимое условие, к мнемонике команды нужно добавить соответствующий двухбуквенный суффикс условия, приведённый в таблице 2. Среди всех суффиксов условий суффикс AL соответствует безусловному выполнению команды, и его можно не указывать.
Фрагмент программы с использованием условного выполнения инструкций приведён в листинге 1.
7
|
|
Таблица 2. Суффиксы условий |
|
|
|
|
|
Суффикс |
Расшифровка |
Значение |
Значения флагов, |
условия |
|
|
при которых |
|
|
|
условие верно |
EQ |
Equal |
Равно |
Z=1 |
|
|
|
|
NE |
Not equal |
Не равно |
Z=0 |
|
|
|
|
CS/HS |
Carry set/unsigned |
Флаг переноса установлен / Больше |
C=1 |
|
higher or same |
или равно в беззнаковом |
|
|
|
представлении |
|
CC/LO |
Carry clear/unsigned |
Флаг переноса не установлен / |
C=0 |
|
lower |
Меньше в беззнаковом представлении |
|
MI |
Minus/negative |
Отрицательный результат |
N=1 |
PL |
Plus/positive or zero |
Положительный или нулевой |
N=0 |
|
|
результат |
|
VS |
Overflow set |
Произошло переполнение |
V=1 |
VC |
Overflow clear |
Не произошло переполнение |
V=0 |
|
|
|
|
HI |
Unsigned higher |
Больше в беззнаковом представлении |
C=1 И Z=0 |
|
|
|
|
LS |
Unsigned lower or |
Меньше или равно в беззнаковом |
C=0 И Z=1 |
|
same |
представлении |
|
GE |
Signed greater or |
Больше или равно в знаковом |
N = V |
|
equal |
представлении |
|
LT |
Signed less than |
Меньше в знаковом представлении |
N ≠ V |
|
|
|
|
GT |
Signed greater than |
Больше в знаковом представлении |
Z = 0 И N = V |
|
|
|
|
LE |
Signed less or equal |
Меньше или равно в знаковом |
Z = 1 ИЛИ N ≠ V |
|
|
представлении |
|
AL |
Always |
Безусловное выполнение |
Не имеют значения |
|
|
|
|
Предикативные суффиксы, предназначенные для выполнения проверок на неравенства приведены также в таблице 3.
Таблица 3. Предикативные суффиксы, реализующие операции проверки на неравенство
Операция \ представление |
Знаковое |
Беззнаковое |
|
операндов |
|||
|
|
||
> |
GT |
HI |
|
≥ |
GE |
CS/HS |
|
< |
LT |
CC/LO |
|
≤ |
LE |
LS |
8