
- •Справочник по системе команд микроконтроллера 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)
- •Список литературы
Переход и переключение режима ядра
Синтаксис в ассемблере
BX {cond} <Rn>
Формат команды представлен на рис. 2.
Oписание
<cond> – поле условия (см. таблицу 1).
<Rn> – регистр первого операнда (см. таблицу 1).
Эта команда будет выполнена, если условие истинно. Машинный код команды:
Мнемоника ассемблера |
Код |
Действие |
BX{cond} Rn |
1100 |
Выполнить переход (со сменой состояния ядра) по адресу Rn |
Команда выполняет переход, копируя содержимое регистра общего назначения Rn в программный счетчик PC. Во время перехода происходит очистка конвейера команд и передача управления по адресу, определенному регистром Rn. Бит 0 регистра Rn определяет режим работы ядра после выполнения перехода: ARM (Rn[0] = 0) или THUMB(Rn[0] = 1).
Примечание: Если R15 используется в качестве операнда, поведение команды неопределенно.
Результат выполнения команды BX PC в THUMB режиме с невыровненным по границе слова адресом непредсказуем, поэтому не следует применять ее в таком виде.
Примеры
ADR R0, Into_THUMB + 1 ; Сформировать адрес перехода
; и установить в "1" бит 0, т.е. указать
; на необходимость переключения в режим THUMB
BX R0 ; Перейти и сразу переключить ядро в режим THUMB
CODE16 ; Последующие команды должны
Into_THUMB ; декодироваться в режиме THUMB
ADR R5, Back_to_ARM ; Сформировать адрес перехода
; и очистить бит 0, т.е. указать
; на необходимость возврата в режим ARM
BX R5 ; Перейти и сразу переключить ядро в режим ARM
ALIGN ; Выравнивание по слову
CODE32 ; Последующие команды должны
Back_to_ARM ; декодироваться в режиме ARM
CDP, CDP2 – ARM
Сообщение сопроцессору (Coprocessor Data Processing)
Синтаксис в ассемблере
CDP {<cond>} <coproc>, <opcode_1>, <CRd>, <CRn>, <CRm>, <opcode_2>
CDP2 <coproc>, <opcode_1>, <CRd>, <CRn>, <CRm>, <opcode_2>
Формат команды обработки данных сопроцессором
Описание
<cond> – поле условия (см. таблицу 1).
<coproc> – имя сопроцессора (см. таблицу 1).
<opcode_1> – команда процессора (см. таблицу 1).
<opcode_2> – команда сопроцессора (см. таблицу 1).
<CRn> – регистр сопроцессора (см. таблицу 1).
<CRd> – регистр сопроцессора (см. таблицу 1).
<CRm> – регистр сопроцессора (см. таблицу 1).
Команда CDP (Coprocessor Data Processing) сообщает сопроцессору, чей номер cp_num, выполнить операцию, которая независима от ARM регистров и памяти. Если не было обнаружено сопроцессоров, которые могли выполнить операцию, генерируется неопределенное командное исключение.
Эта команда будет выполнена, если условие истинно. Все различные условия ее выполнения перечислены в таб. 1 ниже.
Команда этого класса используется для того, чтобы указать сопроцессору на необходимость выполнения его некоторой внутренней команды. Ядро ARM7TDMI не ожидает окончания выполнения команды и не получает ее результатов. Сопроцессор может иметь в своем составе некую очередь команд, требующих выполнения, и при этом их выполнение может производиться одновременно с выполнением других команд ядра ARM7TDMI, т.е. фактически обеспечивается одновременная параллельная работа обоих процессоров.
CDP2 – Приводит к тому, что поле условия команды устанавливается в 0b1111. Это обеспечивает дополнительное место для кода команды, так что возможно выполнение большего числа команд сопроцессора. Итоговая инструкция выполняется безусловно.
Число машинных тактов
Команда CDP выполняется за 1S + bl, где b – число машинных тактов, необходимых для выполнения пустых тактов сопроцессора, S и I зависят от типа машинных тактов.
Версия архитектуры
CDP в версии 2 и выше.
CDP2 в версии 5 и выше.
Использование
Команда CDP используется для выполнения команд сопроцессора, которые непосредственно не выполняются над значениями в ARM-регистрах или в основной памяти. Например, это команда умножения чисел с плавающей запятой для сопроцессора с плавающей точкой.
Замечания
Поля сопроцессора
Биты команды [31:24], [11:8] и [4] являются архитектурно определенными.
Невыполненные инструкции сопроцессора
Поддержка сопроцессора является необязательной, несмотря на архитектуру. В реализации может быть ограниченный набор команд сопроцессора, или может не быть команд сопроцессора вовсе. Любая команда сопроцессора, которая не была реализована, приводит к неопределенной “ловушке” команды (undefined instruction trap).
Примеры
CDP p1,10,c1,c2,c3 ; Запрос на выполнение сопроцессором #1
; для выполнения команды с кодом 10
; CR2 и CR3 – операнды, CR1 – результат.
CLZ – ARM