Формат 16: Переход по условию
Рис. 54. Формат 16
Действие
Команды этой группы выполняют условный переход в зависимости от состояния флагов регистра CPSR. Синтаксис этих команд в ассемблере приведен в таблице 27.
Табл. 27. Команды условного перехода
L |
THUMB ассемблер |
ARM эквивалент |
Действия |
0000 |
BEQ метка |
BEQ метка |
Переход, если установлен Z (равно) |
0001 |
BNE метка |
BNE метка |
Переход, если сброшен Z (не равно) |
0010 |
BCS метка |
BCS метка |
Переход, если установлен C (выше или равно) |
0011 |
BCC метка |
BCC метка |
Переход, если сброшен C (ниже) |
0100 |
BMI метка |
BMI метка |
Переход, если установлен N (минус) |
0101 |
BPL метка |
BPL метка |
Переход, если сброшен N (плюс или равно) |
0110 |
BVS метка |
BVS метка |
Переход, если установлен V (переполнение) |
0111 |
BVC метка |
BVC метка |
Переход, если сброшен V (нет переполнения) |
1000 |
BHI метка |
BHI метка |
Переход, если установлен C и сброшен Z (выше) |
1001 |
BLS метка |
BLS метка |
Переход, если сброшен C или установлен Z (ниже или равно) |
1010 |
BGE метка |
BGE метка |
Переход, если установлен N и установлен V или сброшен N и сброшен V (больше или равно) |
1011 |
BLT метка |
BLT метка |
Переход, если установлен N и сброшен V или сброшен N и установлен V (меньше) |
1100 |
BGT метка |
BGT метка |
Переход, если сброшен Z и либо установлен N и сброшен V, либо сброшен N и установлен V (больше) |
1101 |
BLE метка |
BLE метка |
Переход, если установлен Z, или установлен N и сброшен V, или сброшен N и установлен V (меньше или равно) |
Примечания: Смещение, заданное в командах этого формата, является 9-битным адресом с дополнением до двух (со знаком), поэтому должен быть выровнен по границе одного полуслова (т.е. бит 0 должен быть равен нулю). При этом ассемблер при формировании команды фактически выполнить деление на 2 (#Imm >> 1), чтобы получить верное значение поля 8-битного смещения со знаком.
Команда с кодом условия Cond = 1110 - неопределенная команда, поэтому не должна использоваться. Команда с кодом условия Cond = 1111 фактически является командой программного прерывания SWI (см. формат 17).
Число машинных тактов при выполнении команд
Все команды этого формата эквивалентны командам в режиме ARM согласно таблице 27. Число машинных тактов выполнения этой команды в режиме THUMB идентично с числом тактов выполнения ее в режиме ARM. Примечание: для более подробной информации см. соответствующую главу.
Примеры
CMP R0, #45 ; Перейти к "over", если R0 > 45.
BGT over ; Примечание: фактически в код команды будет занесено смещение
... ; содержащее число полуслов до метки "over"
...
...
over ... ; Адрес метки должен быть выровнен по границе одного полуслова.
|
|