OSDev Wiki
Advertisement

Основная масса инструкций архитектуры ARM содержит поле cond, занимающее старшие четыре разряда кода команды и задающее условие, при котором данная команда будет выполнена. Кодирование условий этим полем показано в следующей таблице.

Код
Мнемоника
Значение
Состояние флагов
0000
EQ
Равно Z установлен
0001
NE
Не равно Z сброшен
0010
CS/HS
Имеется перенос/беззнаковое больше или равно C установлен
0011
CC/LO
Нет переноса/беззнаковое меньше C сброшен
0100
MI
Знак «минус» N установлен
0101
PL
Знак «плюс» N сброшен
0110
VS
Переполнение V установлен
0111
VC
Нет переполнения V сброшен
1000
HI
Беззнаковое больше C установлен, а Z сброшен
1001
LS
Беззнаковое меньше или равно C сброшен и/или Z установлен
1010
GE
Знаковое больше или равно N и V равны друг другу
1011
LT
Знаковое меньше N и V не равны друг другу
1100
GT
Знаковое больше Z сброшен, а N и V равны друг другу
1101
LE
Знаковое меньше или равно Z установлен и/или N и V не равны друг другу
1110
AL
Безусловное исполнение Не имеет значения
1111
Безусловная инструкция Не имеет значения

В программе на языке ассемблера мнемоники условий задаются непосредственно за мнемоникой операции. Например, если инструкция пересылки MOV должна быть выполнена только в случае, когда флаг Z=1, она будет записана следующим образом: MOVEQ.

Если инструкция должна выполняться всегда независимо от состояния флажков, к её мнемонике может быть добавлен код условия AL либо код условия вообще опускается: MOVAL или MOV.

Если старшие четыре разряда кода команды содержат код 1111, это означает, что данный код команды относится к группе безусловно исполняемых инструкций, которые впервые появились в архитектуре ARMv5. Такие процессоры, обнаружив эту комбинацию, декодируют инструкции особым образом.

В процессорах более ранних архитектур декодирование команд логически начиналось с анализа разрядов 27:25, а поле cond не учитывалось. Поэтому комбинация 1111 в этом поле для в остальном формально корректных инструкций приведёт к непредсказуемым последствиям: исключение по недопустимой команде гарантированно возникает лишь в том случае, когда в поле cond присутствует допустимый код (0000–1110), но неверны другие разряды кода команды.

Advertisement