- •Справочник по системе команд микроконтроллера 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)
- •Список литературы
Пересылка (Move)
Синтаксис в ассемблере
MOV <Rd>, #<immed_8>
Формат команды представлен на рис. 2.
Описание
<Rd> – Регистр назначения (см. таблицу 1).
<immed_8> – 8–ми битовое непосредственное значение (в пределах от 0 до 255), пересылаемое в регистр <Rd> (см. таблицу 1).
Данный формат команды MOV (Move) пересылает непосредственное значение в регистр. Флаги условий обновляются в соответствии с результатом.
Действие
(Rd) =immed_8
N Flag = Rd[31]
Z Flag = if (Rd) == 0 then 1 else 0
C Flag не затрагивается
V Flag не затрагивается
Пример
MOV R0, #205 ; R0 := 205
MOV (2) – THUMB
Пересылка (Move)
Синтаксис в ассемблере
MOV <Rd>, <Rn>
Формат команды представлен на рис. 2.
Описание
<Rd> – Регистр назначения (см. таблицу 1).
<Rn> – Регистр, содержащий значение для пересылки (см. таблицу 1).
Этот формат команды MOV используется для пересылки значения из одного регистра младшего набора в другой. Флаги выставляются в соответствии с этим значением.
Действие
(Rd) = (Rn)
N Flag = Rd[31]
Z Flag = if (Rd) == 0 then 1 else 0
C Flag = 0
V Flag = 0
Пример
MOV R0, R1 ; R0 := R1
MOV (3) - THUMB
Пересылка (Move)
Синтаксис в ассемблере
MOV <Rd>, <Rm>
Формат команды представлен на рис. 2.
Описание
<Rd> – Регистр назначения: это может быть любой из регистров от R0 до R15 (его номер кодируется в команде как H1 – старший значащий бит – и Rd – остальные три бита) (см. таблицу 1).
<Rm> – Регистр, содержащий значение для пересылки: это может быть любой из регистров от R0 до R15 (его номер кодируется в команде как H2 – старший значащий бит – и Rm – остальные три бита) (см. таблицу 1).
Этот формат команды MOV используется для пересылки значения из, в или между регистрами старшего набора. В отличие от MOV (2) эта команда не изменяет значения флагов.
Действие
(Rd) = (Rm)
Пример
MOV R0, R1 ; R0 := R1
MRC/MRC2 – ARM
Команда перемещения данных из сопроцессора в arm регистр (Move to arm Register from Coprocessor)
Синтаксис в ассемблере
MRC {<cond>} <coproc>, <opcode_1>, <Rd>, <CRn>, <CRm>{, <opcode_2>}
MRC2 <coproc>, <opcode_1>, <Rd>, <CRn>, <CRm>{, <opcode_2>}
формат команды перемещения данных
Описание
<coproc> - имя сопроцессора (см. таблицу 1).
<cond> – поле условия (см. таблицу 1).
<Rd> – регистр результата (см. таблицу 1).
<CRn> – регистр сопроцессора, содержащий первый операнд (см. таблицу 1).
<CRm> - регистр назначения сопроцессора (см. таблицу 1).
<opcode_1> - команда процессора (см. таблицу 1).
<opcode_2> - команда сопроцессора (см. таблицу 1).
Команда MRC перемещает значение из сопроцессора с номером cp_num в ARM регистр или в заданный флаг.
Если нет сопроцессоров, которые сигнализируют о том, что могут выполнить данную команду, то будет сгенерировано исключение Undefined Instruction (Undefined Instruction exception)
MRC2 – устанавливает поле условия в значение 0b1111. Это дает возможность проектировщикам сопроцессора использовать дополнительное место для кода операции. В этом случае операция должна быть выполнена без задания каких-либо условий.
Использование
1. Если в <Rd> значение R15, то флаги условий устанавливаются из первых четырех битов значения, взятого из сопроцессора обозначенного параметром <coproc> (чтобы обеспечить переход по условиям в зависимости от статуса сопроцессора), остальные 28 бит будут проигнорированы.
Как пример такого использования: перемещение результата сравнения полученного сопроцессором, выполняющим операции с плавающей запятой, во флаги условий ARM.
2. Команда может записать в регистр <Rd> значение из сопроцессора, обозначенного параметром <coproc>
Как пример такого использования: команда преобразование числа с плавающей запятой в целое, выполняемое в сопроцессоре, работающем с числами с плавающей запятой.
Примечание
Только следующие биты выполняемой команды определены в ARM архитектуре: биты[31:24], бит [20], биты [15:8] и бит[4].
Оставшиеся поля используются для совместимости с системами разработки ARM архитектуры.
Генерируемые исключения
Undefined Instruction
Версия архитектуры
Для MRC – 2 и выше
Для MRC2 – 5 и выше
Примеры
;@ * * * MRC * * * AREA cp_move, CODE, READONLY MRC p0, 5, R14, c8, c3, 3 MRC p1, 6, R13, c9, c4, 4 MRC p2, 7, R12, c10, c5, 6 MRC p3, 0, R11, c11, c3, 1 ;@ * * * MRC2 * * * MRC2 p4, 3, R7, c4, c8, 0 MRC2 p5, 4, R8, c5, c9, 1 MRC2 p6, 5, R9, c6, c0, 2 MRC2 p7, 6, R10, c7, c1, 3 END
MRRС – ARM