- •Справочник по системе команд микроконтроллера lpc2000 на базеArm-ядра
- •Введение
- •1. Общие сведения
- •Обработка данных
- •Региcтры cpsr/sprs
- •2. Перечень команд микроконтроллера lpc2000 на базе arm-ядра
- •3. Подробное описание команд микроконтроллера lpc2000 на базе arm-ядра
- •Команда сложения с переносом (Addition with carry)
- •Команда сложения с переносом (Addition with carry)
- •Команда сложения (Addition)
- •Операция сложения без учета флага переноса (Addition)
- •Операция сложения без учета флага переноса (Addition)
- •Операция сложения без учета флага переноса (Addition)
- •Операция сложения без учета флага переноса (Addition)
- •Операция сложения без учета флага переноса (Addition)
- •Команда логического и (And)
- •Команда логического и (and)
- •Команда арифметического сдвига вправо (Arithmetic Shift Right)
- •Команда арифметического сдвига вправо (Arithmetic Shift Right)
- •Переход (Branch)
- •Команда перехода по условию (Branch)
- •Команда безусловного перехода (Branch)
- •Команда сброса битов (Bit Clear)
- •Команда сброса битов (Bit Clear)
- •Контрольные точки (breakpoints)
- •Команда перехода со ссылкой (Branch and Link)
- •Команда перехода со ссылкой (Branch with Link)
- •Команда перехода со ссылкой и сменой режима (Branch with Link and Exchange)
- •Команда перехода со ссылкой и сменой режима (Branch with Link and Exchange)
- •Команда перехода со ссылкой и сменой режима (Branch with Link and Exchange)
- •Переход и переключение режима ядра (Branch and Exchange)
- •Переход и переключение режима ядра
- •Сообщение сопроцессору (Coprocessor Data Processing)
- •Подсчет нулевых битов (Count Leading Zeros)
- •Сравнение с отрицанием (Compare Negative)
- •Сравнение (Compare)
- •Установить флаги регистра cpsr для Rd – Rs.
- •Логическое побитовое «исключающее или» (Exclusive or)
- •Логическое побитовое «исключающее или» (Exclusive or)
- •Загрузить в сопроцессор из памяти (Load Coprocessor)
- •Загрузить в сопроцессор из памяти (Load Coprocessor)
- •Загрузить сразу несколько регистров (Load Multiple)
- •Загрузить сразу несколько регистров (Load Multiple)
- •Загрузить сразу несколько регистров (Load Multiple)
- •Команды множественной загрузки
- •Команда множественной загрузки( Load Multiple Increment)
- •Команда записи слова в регистр (Load Register)
- •Команда однократной передачи данных (Load Register)
- •Команда однократной передачи данных (Load Registr)
- •Команда однократной передачи данных (Load Registr)
- •Команда однократной передачи данных (Load Registr)
- •Команда записи байта в регистр (Load Register Byte)
- •Загрузка байта в регистр из памяти (Load register byte value from memory)
- •Загрузка двойного слова со знаком (Load Reister Doubleword)
- •Команда записи полуслова в регистр (Load Register Halfword)
- •Команда записи полуслова в регистр (Load Register Halfword)
- •Загрузка байта со знаком (Load Register Signed Byte)
- •Команда загрузки знакового байта (Load Register Signed Byte)
- •Загрузка полуслова со знаком (Load Register Signed Halfword)
- •Загрузка регистра полусловом со знаком (Load Register Signed Halfword)
- •Логический сдвиг влево (Logical Shift Left)
- •Логический сдвиг влево (Logical Shift Left)
- •Логический сдвиг вправо (Logical Shift Right)
- •Логический сдвиг вправо (Logical Shift Right)
- •Команда регистрового обмена с сопроцессором
- •Команда регистрового обмена с сопроцессором
- •Команда регистрового обмена с сопроцессором
- •Команда умножения, накопления
- •Загрузить в регистр константу
- •Пересылка (Move)
- •Пересылка (Move)
- •Пересылка (Move)
- •Команда перемещения данных из сопроцессора в arm регистр (Move to arm Register from Coprocessor)
- •Команда перемещения данных из сопроцессора в два регистра arm одновременно
- •Запись psr в регистр общего назначения (Move psr to General-purpose Register)
- •Запись в регистр состояния (Move to Status Register from arm Register)
- •Умножение (Multiply)
- •Умножение (Multiply)
- •Пересылка инверсии (Move Not)
- •Пересылка с инверсией (Move not)
- •Команда инвертирования (Negate)
- •Нет операции (No oPeration)
- •Логическое или (or)
- •Команда логического или (Or)
- •Команда перезагрузки кэша (a cache preload instruction)
- •Команда презагрузки кэша
- •Команда извлечения из стека (pop)
- •Размещение регистров в вершине стека
- •Команда добавление сразу нескольких операндов
- •Команда добавление сразу нескольких операндов с удвоением одного из них
- •Команда приведённого вычитания с удвоением второго операнда (double saturated substraction)
- •Команда приведённого вычитания (saturated substraction)
- •Циклический сдвиг вправо (Rotate Right Register)
- •Команда обратного вычитания (reverse substract)
- •Команда обратного вычитания с заемом (Reverse substract with carry)
- •Команда вычитания с заемом (Substract with carry)
- •Вычитание с переносом (Subtract with Carry)
- •Команда умножения числа со знаком и с накоплением
- •Команда умножения числа со знаком и накоплением
- •Знаковая операция умножения и сложения
- •Команда знакового умножения двух 16-ти битных операндов (Signed multyply)
- •Знаковая операция умножения
- •Команда обмена данными с сопроцесcором
- •Команда обмена данными с сопроцессором
- •Команда обмена данными с сопроцесcором
- •Команда обмена данными с сопроцессором
- •Команда группового хранения (Store Multiple )
- •Соответствия между мнемониками и состояниями битов команд
- •Сохранение не пустого подмножества рон (Store Multiple Increment After)
- •Команда сохранения регистра в памяти(Store Register )
- •Сохранение в памяти 32-х разрядных данных из рон (Store Register)
- •Сохранение в памяти 32-х разрядных данных из рон (Store Register)
- •Сохранение в памяти 32-х разрядных данных из рон (Store Register)
- •Команда сохранения регистра в памяти(Store Register Byte ) (байта)
- •Сохранение в памяти 8-ми разрядных данных из рон (Store Register)
- •Запоминание 2х слов (Stores two words).
- •Команда передачи полуслова между Lo регистром и памятью.
- •Команда сохранения значения регистра (Store Register Halfword)
- •Вычитание (Subtraction).
- •Команда вычитания (Subtract)
- •Команда программного прерывания (Software Interrupt)
- •Команда программного прерывания (Software Interrupt)
- •Команда обмена (Swap)
- •Команда обмена (Swap Byte)
- •Побитовая проверка на равенство (Test Equivalence)
- •Проверка битов (test)
- •Команда сравнения (Test)
- •Список литературы
Команда сброса битов (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
BKPT – ARM
Контрольные точки (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
BL – ARM
Команда перехода со ссылкой (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 ... // Адрес метки должен быть выровнен по границе одного полуслова.
BL – THUMB
Команда перехода со ссылкой (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
