
- •Справочник по системе команд микроконтроллера 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)
- •Список литературы
Команда знакового умножения двух 16-ти битных операндов (Signed multyply)
Синтаксис в ассемблере
SMUL<x><y> {<cond>}<Rd> <Rm> <Rs>
Формат команды представлен на рис. 1.
Описание
<cond> – поле условия (см. таблицу 1).
<Rd> – регистр результата (см. таблицу 1).
<Rm> – регистр первого операнда (см. таблицу 1).
<Rs> – регистр второго операнда (см. таблицу 1).
Данная команда выполняет умножение со знаком. Операндами являются два 16-ти битных числа со знаком, получаемые как младшие или старшие 16 разрядов регистров-источников. Оставшиеся части регистров игнорируются. Таким образом, переполнение в результате выполнения команды становится невозможным.
<x> и <y> указывают, берётся ли для операции старшая или младшая часть регистров-источников. <x> соответствует множимому – Rm, <y> – множителю – Rs.
<x> и <y> могут принимать мнемонические значения B и T (bottom и top), что соответствует младшей (биты [15:0]) и старшей (биты [31:16]) половинам регистров. В коде операции для <x> и <y> значениям B и Т соответствуют значения 0 и 1.
Действие
Действие команды таково: (Rd) := (Rm<[15:0]/ [31:16]>) * (Rs<[15:0]/ [31:16]>), если условие (<cond>) выполнено. Переполнение невозможно, поэтому биты CPSR не меняются.
Примеры
SMULBB R1 R2 R3 //перемножаются младшие части регистров R2 и R3, результат помещается в R1.
SMULBT R1 R2 R3 //младшие 16 бит регистра R2 умножаются на старшие 16 бит регистра R3, результат помещается в R1.
SMULTTEQ R5 R3 R11 // Если Z=1, выполняется перемножение старших частей R3 и R11, результат помещается в R5.
SMULW<y> – ARM
Знаковая операция умножения
Синтаксис в ассемблере
SMULW<y> {<cond>} <Rd>, <Rm>, <Rs>
Формат команды представлен на рис. 1.
Описание
<y> – Определяет, какя часть исходного регистра <Rs> используется, подобно умножающему операнду. Если <y> - B, то y == 0 и используется в основании (биты[15:0]) регистра <Rs>. Если <y > - T, то y == 1 и используется в вершине (биты[31:16]) регистра <Rs>.
<cond> – поле условия (см. таблицу 1).
<Rd> – регистр результата (см. таблицу 1).
<Rm> – регистр второго операнда (см. таблицу 1).
<Rs> – Определяет исходный регистр, отобранный - <y>- основание или первая часть, второго умножающего операнда.
Команда SMULW<y>выполняет знаковую операцию умножения. Операция умножения в 32-битовом и 16-битовом данном регистре, с последним взятым с вершины или от основания его части. Вторая часть регистра игнорируется. Первые 32 бита из 48 битов записываются в регистр. Последние 16 битов из 48 битов игнорируются.
Мнемоника ассемблера |
Действие |
SMULW<y> |
if ConditionPassed(cond) then if (y == o) then operand2 = SignExtend(Rs[15:0]) else /* y == 1 */ operand2 = SignExtend(Rs[31:16]) Rd = (Rm ♦ operand2) [47:16] + Rn /*Знаковое умножение */ |
Команда знакового умножения.
Использование
В дополнение к его прямому использованию – умножение целого числа, можно применить в комбинации с QADD, QDADD,и QDSUB, чтобы выполнить умножение, умножение-сложение, умножение-вычитание между числами Q31 и Q15.
Примеры
SMULWB R1 R2 R3 //умножение младших частей регистров R2 и R3, результат записывается в R1.
SMULWT R1 R2 R3 //младшие 16 бит регистра R2 умножаются на старшие 16 бит регистра R3, результат помещается в R1.
STC – ARM