- •Справочник по системе команд микроконтроллера 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)
- •Список литературы
Циклический сдвиг вправо (Rotate Right Register)
Синтаксис в ассемблере
ROR <Rd>, <Rs>
Формат команды представлен на рис. 2.
Описание
<Rd> – Содержит значение для сдвига, а также регистр результата (см. таблицу 1).
<Rs> – Содержит значение сдвига.
Команда ROR (Rotate Right Register) используется для обеспечения циклического сдвига значения одного регистра на указанное в другом регистре число циклов. Биты, вышедшие за границы справа вставляются на освободившееся место слева. Флаги изменяются в соответствии с результатом.
Действие
ifRs[7:0] == 0then
CFlagне затрагивается
Rd не затрагивается
else if Rs[4:0] == 0 then
C Flag = Rd[31]
Rd= не затрагивается
else/*Rs[4:0] > 0 */
C Flag = Rd[Rs[4:0] - 1]
(Rd) = (Rd) Rotate_Right Rs[4:0]
N Flag = Rd[31]
Z Flag = if (Rd) == 0 then 1 else 0
V Flag не затрагивается
Пример
ROR R1, R0 ; Сдвиг R1 вправо на число бит, указанное в R0,
; результат поместить в R1 и установить флаги условий.
RSB – ARM
Команда обратного вычитания (reverse substract)
Синтаксис в ассемблере
RSB {<cond>} {S} <Rd> <Rn> <shifter_operand>
Формат команды представлен на рис. 1.
Описание
<cond> – поле условия (см. таблицу 1).
S– устанавливаетS-бит – бит условия (см. таблицу 1).
<Rd> – регистр результата (см. таблицу 1).
<Rn> – регистр первого операнда (см. таблицу 1).
<shifter_operand> – второй операнд (см. таблицу 3).
Команда обратного вычитания уменьшает значение 2-го операнда на значение регистра Rn и помещает результат в регистр Rd.
Если бит S команды равет 1, могут изменятся флаги С и V текущего слова состояния. Возможны два значения:
Если результат записывается в R15, вместо текущего слова состояния (CPSR) записывается сохранённое (SPSR).
В остальных случаях изменяются только флаги С и V если был произведен заем или переполнение (соотетственно).
Действие
Если условие (<cond>) выполнено, то (Rd) := (shifter_operand) – (Rn). Далее, если S = 1 и R15 задействован как Rd, тогда CPSR = SPSR, иначе (S = 1, R15 не задействован как Rd) тогда формируются флаги N, Z, C, V.
Использование
Команда RSBиспользуется когда необходимо произвести вычитание числа, хранящегося в одном из регистров из числа, которое может быть регистром с сдвигом (Rm), или 8-битной константой с циклическим сдвигом (Imm) (в зависимости от значения бита "I"[25] в команде). Более подробную информацию смотри в таблице 3.
Примеры
RSB R7 R4 R12 // в R7 записывается результат вычитания R4 из R12
RSBS R2 R1 R0 // вычитает R1 из R0 и помещает результат в R2 (воздействует на флаги CPSR)
RSB R3 R5 R5, LSL #2 //вычитает из учетверённого значения R5 значение R5 и записывает результат в R3: R3 = R5*4-R5 = R5*3
RSBEQ R2 R1 R0 // Если Z = 1, вычитает R1 из R0 и помещает результат в R2
RSC – ARM
Команда обратного вычитания с заемом (Reverse substract with carry)
Синтаксис в ассемблере
RSС {cond} {S} <Rd> <Rn> <shifter_operand>
Формат команды представлен на рис. 1.
Описание
<cond> – поле условия (см. таблицу 1).
S– устанавливаетS-бит – бит условия (см. таблицу 1).
<Rd> – регистр результата (см. таблицу 1).
<Rn> – регистр первого операнда (см. таблицу 1).
<shifter_operand> – второй операнд (см. таблицу 3).
Команда обратного вычитания с заемом уменьшает значение 2-го операнда на значение регистра Rn и инвертированное значение флага переноса, а потом помещает результат в регистр Rd.
Если бит S команды равет 1, могут изменятся флаги С и V текущего слова состояния. Возможны два значения:
Если результат записывается в R15, вместо текущего слова состояния (CPSR) записывается сохранённое (SPSR).
В остальных случаях изменяются только флаги С и V если был произведен заем или переполнение (соотетственно).
Действие
Если условие (<cond>) выполнено, то (Rd) := (shifter_operand) – (Rn) –NOT(флаг переноса). Далее, еслиS= 1 иR15 задействован какRd, тогдаCPSR=SPSR, иначе (S= 1,R15 не задействован какRd) тогда формируются флагиN,Z,C,V.
Использование
Команда RSС используется когда необходимо произвести вычитание с учётом заема числа, хранящегося в одном из регистров из числа, которое может быть регистром с сдвигом (Rm), или 8-битной константой с циклическим сдвигом.
Примеры
RSC R7 R4 R12 // в R7 записывается результат вычитания R4 из R12
RSCS R2 R1 R0 // вычитает R1 из R0 с учётом флага заема и помещает результат в R2 (воздействует на флаги CPSR)
RSC R3 R5 R5, LSL #2 //вычитает из учетверённого значения R5 значение R5 с учётом флага заема и записывает результат в R3: R3 = R5*4-R5 = R5*3
RSCGE R2 R1 R0 // Если N = V, вычитает R1 из R0 и помещает результат в R2
SBC – ARM