- •Справочник по системе команд микроконтроллера 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)
- •Список литературы
Команда умножения числа со знаком и с накоплением
(Signed Multiply Accumulate Long)
Синтаксис в ассемблере
SMLAL{<cond>}{S}<RdLo>, <RdH1>, <Rm>,<Rs>
Формат команды представлен на рис. 1.
Описание
{<cond>} – поле условия (см. таблицу 1)
{S} – устанавливает S-бит – бит условия (см. таблицу 1)
<RdLo>, <RdH1> -выражения, которые определяют номер регистра общего назначения
<Rm> - определяет регистр сопроцессора, содержащий второй операнд (см. таблицу 1)
<Rs> - определяет регистр сопроцессора, содержащий первый операнд
SMLAL <x> <y> выполняет умножение с накоплением чисел со знаком.
Команда умножения c накоплением используют два 32-битных регистра, которые умножаются друг на друга, и к полученному результату добавляется 64-битное слагаемое: RdHi,RdLo := Rm*Rs + RdHi,RdLo. Младшие 32 бита добавляемого к результату умножения слагаемого вычитываются их регистра RdLo, а старшие 32 бита - из регистра RdHi. После чего младшие 32 бита результата заносятся в регистр RdLo, а старшие 32 бита - в регистр RdHi.
|
Мнемоника ассемблера |
Действие |
|
SMLAL{cond}{S}RdLo,RdHi,Rm,Rs |
RdHi,RdLo := Rm*Rs + RdHi,RdLo |
Команда умножения числа со знаком и накоплением
Примеры
SMLAL Rd,Rt,Rm,Rn ; переполнение при умножении с ; накоплением чисел со знаком с 32- ; битным результатом
TEQ Rt,Rd, ASR#31 ; От 4 до 7 (включительно) машинных ; тактов
BNE overflow ; +1 такт при переполнении регистра
SMLAW<y> – ARM
Знаковая операция умножения и сложения
Синтаксис в ассемблере
SMLAW<y> {<cond>} <Rd>, <Rm>, <Rs>, <Rn>
Формат команды представлен на рис. 1.
Описание
<y> – Определяет, какя часть исходного регистра <Rs> использует, как второй умножающий операнд. Если <y> - B, то y == 0 и используется в основании (биты[15:0]) регистра <Rs>. Если <y > - T, то y == 1 и используется в начале (биты[31:16]) регистра <Rs>.
<cond> – поле условия (см. таблицу 1).
<Rd> – регистр результата (см. таблицу 1).
<Rs> – Определяет исходный регистр, отобранный - <y> - основание или первая часть, второго умножающего операнда.
<Rn> – регистр первого операнда (см. таблицу 1).
<Rm> – регистр второго операнда (см. таблицу 1).
Команда SMLAW<y> выполняет знаковую операцию умножения и сложения. Операция умножения применяется в 32-битовом и 16-битовом данном регистре, с последним взятым с вершины или от основания его части. Вторая часть регистра игнорируется. Первые 32 бита из 48 битов добавляются к 32 битам с помощью операции сложения и результат записывается в регистр. Последние 16 битов из 48 битов игнорируются. Выходя за пределы при операции сложения ставим флаг Q в CPSR. При умножении не происходит переполнения, потому что используются 32 бита из 48.
|
Мнемоника ассемблера |
Действие |
|
SMLAW<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 /*Знаковоеумножение */ if OverflowFrom((Rm * operand2)[47:16] + Rn) the Q Flag = 1
|
Команда знакового умножения и сложения.
Использование
В дополнение к его прямому использованию – умножение и сложения целого числа, есть более быстрая альтернатива следующих команд Q31 x Q15 + Q31 —> Q31 синтезируемых от SMULW<y> и QDADD. Обстоятельства, при которых это условие возможно и выгодно, очень схоже с SMLA<x><y> командой.
Примеры
Следующий листинг производит точечный продукт четырех Ql5 чисел к R0 и R1 четырьмя числами Q15 в R2 и R3:
SMLAWB R4, RO, R2, Rm, Rn
QADD R4, R4, R4
SMLAWT R5, RO, R2, Rm, Rn
QDADD R4, R4, R5
SMLAWB R5, Rl, R3, Rm, Rn
QDADD R4, R4, R5
SMLAWT R5, Rl, R3, Rm, Rn
QDADD R4, R4, R5
SMUL<x><y> – ARM
