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

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

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

BIC <Rd>, <Rm>

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

Описание

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

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

Сброс битов (BIC) побитово выполняет операцию AND между содержимым первого регистра и инвертированным содержимым второго регистра. Флаг Z будет установлен, если в результате операции BIC получается ноль. Флаг N устанавливается в зависимости от значения 31-го бита результата операции.

Мнемоника ассемблера

Код

Действие

BIC

1110

Rd = Rd AND NOT Rm

команда сброса битов

Примеры

MOV R1,#05H // загрузить в регистр R1 значение 0101B

// установка в единичное значение нулевого и второго                                        битов

BIC R2,R1 // очистить нулевой и второй бит в регистре R2

BKPTARM

Контрольные точки (breakpoints)

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

BKPT <immediate>

формат команды контрольных точек

Описание

<immediate> – 16-битное значение. Располагается в битах [19:8] и [3:0]. Это значение игнорируется процессором, но может быть использовано отладчиком, для хранения дополнительной информации о контрольной точке.

Используется только в ARM9E и только в режиме ARM.

Действие

R14_abt = address of BKPT instruction + 4

SPSR_abt = CPSR

CPSR[4:0] = 0b10111 /* вход в начало обработчика */

CPSR[5] = 0

CPSR[6] = 1 /* Установка прерывания*/

Если старшая часть вектора сконфигурирована, то PC = 0xFFFF000C, иначе PC = 0x0000000С.

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

Задает режим отладки для микроконтроллера. Позволяет во время отладки ставить контрольные точки (breakpoints).

Примеры

BKPT 67

BLARM

Команда перехода со ссылкой (Branch and Link)

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

B{L}{<cond>} <target_address>

Описание

{L} - используется для указания того, что команда перехода будет осуществлена со ссылкой, в противном случае регистр R14 командой не используется.

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

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

Команда BL выполняет переход со ссылкой по условию <cond> к целевому адресу <target_address>.

Действие

Если условие (<cond>) выполнено, то если L = 1, то LR = адресу инструкции после команды перехода, а PC = PC + (SignExtend(signed_immed_24) << 2).

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

Команда BL используется, чтобы выполнить вызов подпрограммы. Возвращение от подпрограммы достигается, копированием LR в PC.

Примеры

BL faraway // Безусловный переход к "faraway"

BL next ... // и размещение адреса следующий команды (т.е. "next") в регистре ссылки R14 (LR), установив в нем в 1 бит 0.

BL ... // Примечание: фактически в код команды ARM будет занесено смещение, кратное числу полуслов

BL faraway ... // Адрес метки должен быть выровнен по границе одного полуслова.

BLTHUMB

Команда перехода со ссылкой (Branch with Link)

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

BL <target_addr>

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

Описание

<target_addr> - адрес, по которому осуществляется переход.

Эта команда выполняют дальний переход со ссылкой. При формировании кода команды ассемблер выполняет "склейку" из двух 11-битных полей – половин, полученных из двух THUMB команд BL, следующих друг за другом. В итоге формируется 23-битное смещение со знаком, кратное длине одного полуслова, и при этом бит 0 игнорируется.

Команда 1 (H = 0). В первой команде поле смещения содержит старшие 11 бит адреса, по которому будет осуществлен переход. Это поле подвергается смещению влево на 12 бит и складывается с текущим содержимым регистра PC. Результат этого сложения размещается в регистре LR.

Команда 2 (H = 1). Во второй команде поле смещения содержит младшие 11 бит адреса, по которому будет осуществлен переход. Это поле подвергается смещению влево на 1 бит и складывается с уже измененным (при выполнении предыдущей команды) содержимым регистра LR. После чего полный 32-битный адрес перехода (из них 23 бита – смещение), к этому моменту уже хранящийся в регистре LR, копируется в регистр PC. Адрес команды, следующий сразу за этой командой BL, копируется в регистр LR, устанавливая в нем в единицу бит 0. При задании перехода необходимо учитывать результат работы операций предвыборки, что фактически вызовет увеличение регистра PC на 4 байта больше, чем адрес этой команды.

H

Мнемоника ассемблера

Действие

0

BL

LR := PC + OffsetHigh << 12

1

temp := адрес следующей команды

PC := LR + OffsetLow << 1

LR := temp | 1

команда перехода со ссылкой

Примеры

BL faraway // Безусловный переход к "faraway"

next ... // и размещение адреса следующий команды (т.е. "next")в                                  регистре ссылки R14 (LR), установив в нем в 1 бит 0.

...       // Примечание: фактически в код команды THUMB будет                                 занесено смещение, кратное числу полуслов

faraway ... // Адрес метки должен быть выровнен по границе одного                            полуслова

BLX(1) – ARM