- •Справочник по системе команд микроконтроллера 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)
- •Список литературы
Команда логического и (and)
Синтаксис в ассемблере
AND<Rd>, <Rm>
Формат команды представлен на рис. 2.
Описание
<Rd> – регистр первого операнда и результата (см. таблицу 1).
<Rm> – регистр второго операнда (см. таблицу 1).
Команда ANDпроизводит операцию логического “И” со значениями регистров <Rd> и <Rm> и записывает результат в регистре <Rd>. В зависимости от результата происходит обновление флагов полей условия (см. таблицу 4).
Действие
(Rd) = (Rd) AND (Rm).
формируются флаги N,Z; флагиC,V춽е задействуются.
Использование
Команда ANDчаще всего используется для распознания одного из битов регистра путем проведения операции «И» с маской, в которой “1” стоит в распознаваемом бите, а ‘0” во всех остальных битах.
Пример
ANDR1,R2
В регистр R1 записывается значение результата выполнения операции логического “И” над регистрамиR1 иR2.
ASR(1) – THUMB
Команда арифметического сдвига вправо (Arithmetic Shift Right)
Синтаксис в ассемблере
ASR <Rd> , <Rm> , #<immed_5>
Формат команды представлен на рис. 2.
Описание
<Rd> – регистр результата (см. таблицу 1).
<Rm> – регистр, содержащий переменную, которую надо сдвинуть (см. таблицу 1).
<immed_5> – определяет величину сдвига, в диапазоне от 1 до 32 (см. таблицу 1). Сдвиг от 1 до 31 кодируется непосредственно, а на 32 в видеimmed_5=0.
Эта разновидность команды ASR выполняет арифметический сдвиг переменной, хранящейся в регистре <Rm>, вправо на число бит, указанное в 5-ти битной константе <immed_5>. Результат записывается в регистр < Rd>.
В зависимости от результата происходит обновление флагов полей условия (см. таблицу 4).
Действие
(Rd) = (Rm) >> #<immed_5>.
формируются флаги N,Z,C: флагVне задействован.
Использование
Команда ASRиспользуется для деления беззнакового числа на константу, равную степени двойки.
Примеры
ASRR2,R5, #27
Арифметический сдвиг вправо на 27 бит содержимого R5 и запись результат в регистрR2.
ASRR2,R0, #31
Получаем 0 или 1 в зависимости от знака R0.
ASR(2) – THUMB
Команда арифметического сдвига вправо (Arithmetic Shift Right)
Синтаксис в ассемблере
ASR <Rd> , <Rs>
Формат команды представлен на рис. 2.
Описание
<Rd> – регистр, содержащий переменную, которую надо сдвинуть и туда же заносится результат (см. таблицу 1).
<Rs> – регистр, содержащий величину сдвига (см. таблицу 1).
Эта разновидность команды ASR выполняет арифметический сдвиг переменной, хранящейся в регистре <Rd>, вправо на число бит, указанное в регистре <Rs>. Результат записывается в регистр < Rd>.
В зависимости от результата происходит обновление флагов полей условия (см. таблицу 4).
Действие
(Rd) = (Rd) >> <Rs>.
формируются флаги N,Z,C: флагVне задействован.
Использование
Команда ASRиспользуется для деления беззнакового числа на константу, равную степени двойки.
Пример
ASRR2,R5
Арифметический сдвиг вправо на R5 бит содержимогоR2 и запись результат в регистрR2.
B – ARM
Переход (Branch)
Синтаксис в ассемблере
B {<cond>} <выражение>

формат команды перехода
Описание
<cond> – поле условия (см. таблицу 1).
<выражение> – выражение для вычисления смещения перехода.
Команда перехода, используется для перехода в определенное место программы, в зависимости от условия (возможен безусловный переход).
Команда будет выполнена, если условие истинно. Все различные условия перечислены в таблице 1.
Команда перехода содержит знаковое 24-битное смещение, дополненное до 2-х. По-сути происходит умножение смещения на 4 и добавление к регистру PC с учетом знака. Таким образом, возможен переход в диапазоне +32 Мбайта.
Переходы за пределы +32 Мбайта должны использовать смещение или абсолютный адрес, который был предварительно загружен в регистр. В этом случае необходимо PC сохранить вручную в регистре R14 (если используется команда "переход со ссылкой").
Адрес, куда осуществляется переход, рассчитывается так:
дополняем 24-битное значение до 32 бит;
сдвигаем результат на 2 бита влево;
прибавляем получившееся число к содержимому РС (который содержит адрес команды перехода) и прибавляем 8.
Адрес метки может быть смещен относительно текущего значения PC в диапазоне ± 32 Мb.
Действие
Если условие (<cond>) выполнено, то
PC = PC + (SignExtend(signed_immed_24) << 2).
Примеры
CMP R1,#10 // сравнить R10 и #10
BEQ val_ok // переход к метке val_ok
val_ok:
val_err:
B val_err // переход к себе же (бесконечный цикл)
B(1) – THUMB
