Поле Условия
В режиме ARM все команды выполняются в зависимости состоянию регистра CPSR и поля условия самой команды. Это поле (биты 31:28) содержит условие, при которых команда будет выполнена. Если флаги C, N, Z и V установлены (сброшены) согласно коду поля условия, то команда будет выполнена, в противном случае эта команда будет проигнорирована.
Всего существуют 16 различных условий, каждое из которых определяется двухсимвольным суффиксом, добавляемым к мнемонике команды. Например, команда переход (Branch - "B" в ассемблере) становится командой перейти, если равно - BEQ (Branch if Equal), которая означает, что переход будет выполнен, если установлен флаг Z.
Практически можно использовать только 15 различных условий, 16-е условие (1111) зарезервировано и не применяется.
При отсутствии в мнемонике команды условия выполнения или установлен суффикс AL, то эта команда будет выполнена безусловно, независимо от состояния флагов условия (регистр CPSR).
Таблица 6. Перечень кодов условий выполнения
Код |
Суффикс |
Флаги |
Значение |
0000 |
EQ |
Z установлен |
Равно |
0001 |
NE |
Z сброшен |
Не равно |
0010 |
CS |
C установлен |
Выше или равно |
0011 |
CC |
C сброшен |
Ниже |
0100 |
MI |
N установлен |
Отрицательный результат |
0101 |
PL |
N сброшен |
Положительный результат либо ноль |
0110 |
VS |
V установлен |
Переполнение |
0111 |
VC |
V сброшен |
Нет переполнения |
1000 |
HI |
C установлен and Z сброшен |
Выше |
1001 |
LS |
C сброшен or Z установлен |
Ниже или равно |
1010 |
GE |
N равно V |
Больше или равно |
1011 |
LT |
N не равно V |
Меньше |
1100 |
GT |
Z сброшен AND (N равно V) |
Больше |
1101 |
LE |
Z установлен OR (N не равно V) |
Меньше или равно |
1110 |
AL |
(проигнорировано) |
Всегда |
|