Скачиваний:
66
Добавлен:
01.05.2014
Размер:
1.22 Mб
Скачать

Команда перехода по условию (Branch)

Синтаксис в ассемблере

B <cond> <target_address>

Формат команды представлен на рис. 2.

Описание

<cond> – поле условия (см. таблицу 1).

<target_address> – выражение для вычисления смещения перехода. Адрес перехода рассчитывается так :

  1. сдвигаем 8-битное смещение со знаком на один бит влево;

  2. дополняем результат до 32 бит

  3. прибавляем его к содержимому РС (который содержит адрес команды перехода)

адрес метки может быть смещен относительно текущего значения PC в диапазоне ± 256 байт.

Команда перехода, используется для перехода в определенное место программы, в зависимости от условия.

Действие

Если условие (<cond>) выполнено, то

(PC) = (PC) + ((signed_immed_8) << 1)

Использование

Команда В используется для условного перехода к целевому адресу.

Результат перехода за границу 32-битового адресного непредсказуем.

Команда с кодом условия Cond = 1110 - неопределенная команда, поэтому не должна использоваться.

Команда с кодом условия Cond = 1111 фактически является командой программного прерывания SWI

Пример

CMP R0, #45

BGT Over

Over

Перейти к “Over”, еслиR0 > 45

B(2) – THUMB

Команда безусловного перехода (Branch)

Синтаксис в ассемблере

B<target_address>

Формат команды представлен на рис. 2.

Описание

<target_address> – выражение для вычисления смещения перехода. Адрес перехода рассчитывается так :

  1. сдвигаем 11-битное смещение со знаком на один бит влево;

  2. дополняем результат до 32 бит

  3. прибавляем его к содержимому РС (который содержит адрес команды перехода)

адрес метки может быть смещен относительно текущего значения PC в диапазоне ± 2048 байт

Команда перехода, используется для перехода в определенное место программы без какого-либо условия.

Действие

(PC) = (PC) + ((signed_immed_11) << 1)

Использование

Команда В используется для безусловного перехода к целевому адресу.

Результат перехода за границу 32-битового адресного непредсказуем.

Пример

hereBhere

Бесконечный цикл. Код такой команды: 0xE7FE

Bjimmy

Jimmy

Перейти к адресу метки “jimmy”

Примечание: фактически в код команды будет занесено смещение, содержащее число полуслов до метки “jimmy”. Адрес метки должен быть выровнен по границе полуслов.

BICARM

Команда сброса битов (Bit Clear)

Синтаксис в ассемблере

BIC {<cond>}{S}  <Rd>, <Rn>, <shifter_operand>

формат команды обнуления

Описание

<cond> – поле условия (см. таблицу 1).

S– устанавливаетS-бит ­– бит условия (см. таблицу 1).

<Rd> – регистр результата (см. таблицу 1).

<Rn> – регистр первого операнда (см. таблицу 1).

<shifter_operand> – второй операнд (см. таблицу 3).

Логическая операция выполняет логические побитовые операции на всех битах операнда или операндов. Если бит команды "S" будет установлен, то состояние флага "V" в регистре CPSR не изменится; флаг переноса "C" будет установлен исходя из результата многорегистрового циклического сдвига (или останется без изменений, если операция изменения сдвига – LSL #0). Флаг "Z" будет установлен, только если результат – все нули, и флаг "N" будет установлен в зависимости от значения бита 31 результата операции.

Действие

Если условие {<cond>} выполнено, то (Rd) = (Rn)ANDNOT(shifter_operand). Далее, еслиS= 1 иR15 задействован какRd, тогдаCPSR=SPSR, иначе (S= 1,R15 не задействован какRd) тогда формируются флагиN,Z,C,V.

Использование

Команда BICможет быть использована для обнуления нужных бит регистра.

Примеры

BIC R0,R0 #0x1F

BICTHUMB