- •Справочник по системе команд микроконтроллера 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)
- •Список литературы
Сохранение не пустого подмножества рон (Store Multiple Increment After)
Синтаксис в ассемблере
STMIA <Rn>!, <registers>
Формат команды представлен на рис. 2.
Описание
<Rn> – выражение, которое определяет номер регистра общего назначения (см. таблицу 1).
! – вызывает обратную запись в базовый регистр. Является обязательным
<registers> – список регистров (см. таблицу 1)
Как минимум один из регистров должен быть включен в данный список. Если все биты bits[0:7] установлены в 0, то результат непредсказуем.
Регистры хранятся в следующей последовательности: регистр с младшим номером записывается в память по начальному адресу (start_adress), в то время как регистр с наибольшим номером записывается в ячейки памяти с наибольшим адресом (end_address).
Start_address – это значение, хранящееся в базовом регистре <Rn>. Последующие адреса формируются посредством прибавления к предыдущему адресу значения 4. Каждому регистру описанному в <registers> соответствует 1 адрес.
Значение end_address на 4 меньше суммы значения базового регистра и количества регистров, описанных в <registers>, умноженного на 4.
По завершению выполнения инструкции начение базового регистра <Rn> увеличивается на 4 столько раз, сколько регистров описано в <registerrs>.
Использование
Инструкция STMIA полезна при сохранении блоков информации. В комбинации с инструкцией LDMIA (Load Myltiple) она предоставляет эффективный механизм блочного копирования.
Примечания
Если регистр <Rn> занесен в <registers> и определена обратная запись, то:
- если <Rn> имеет самый младший номер в списке, то будет сохранено оригинальное значение <Rn>
- в противном случае, сохраненное значение <Rn> - непредсказуемо
Выравнивание
Инструкции STMIA игнорируют два младших значащих бита адреса
Примеры
STMIA R0!,{R6,R7}
// Сохранение значений регистров R6, R7 по адресу, записанному в регистре R0, увеличение значения R0 на 8
STMIA R3!,{R3,R5,R7}
// Сохранение значений регистров R3, R5 и R7 по адресу, записанному в регистре R3, увеличение значения R3 на 12
STR – ARM
Команда сохранения регистра в памяти(Store Register )
Синтаксис в ассемблере
STR {cond} <Rd> , <addressing_mode>
Описание
<cond> – поле условия (см. таблицу 1).
<Rd> – регистр-источник(см. таблицу 1).
<addressing mode> – способ адресации, определяет I, P, U, W, Rn.
Команда STR сохраняет слово из регистра Rd в память по адресу, указанному в <addressing_mode>.
Действие
Команда будет выполнена, если условие (<cond>) истинно. Адрес ячейки памяти, используемой в этой команде, вычисляется посредством сложения/вычитания с некоторым смещением относительно указанного базового регистра. Смещение относительно базового регистра может быть задано либо в виде 12-битной онстанты, указанной в коде команды, или в виде второго регистра-операнда, а само смещение может быть либо добавлено (U=1), либо вычтено (U=0) из базового регистра Rn. Такие модификации смещения могут быть выполнены либо до выполнения пересылки (пред-индексация, P=1) или после нее (постиндексация, P=0).
Бит W позволяет выбрать режим адресации: инкремент или декремент. Модифицированное значение базового адреса либо записывается обратно в него же (W=1), либо остается без изменений (W=0). В случае постиндексной адресации бит W теряет смысл и поэтому обнуляется.
Недопустимо использование регистра R15 в качестве базового регистра (Rn), если в команде передаче данных бит перезаписи W=1 (write-back). Если W=0 и R15 используется в качестве базового регистра, то необходимо помнить, что этот регистр хранит адрес текущей команды.
Недопустимо использование R15 в качестве регистра, определяющего смещение. Если в команде записи регистра в память (STR) регистр R15 используется вместо регистра-источника (Rd), то сохраненное этой командой значение будет равно адресу команды плюс 12 байт.
Использование
Команда STRиспользуется, когда необходимо сохранить слово из регистра в память.
Примеры
STR R1,[R2,R4]! // Сохранить косвенно R1 по адресу в R2+R4
// (оба - регистры) и записать этот // адрес в R2
STR R2,[R1, #0x100] // Записать слово из регистра R2 в память по адресу, полученному сложением содержимого регистра R1 и константы 0100.
STR R2,[R5], #8 // Записать слово из регистра R2 в память по адресу R5, когда R5=R5+8.
STR(1) – THUMB