- •Справочник по системе команд микроконтроллера 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)
- •Список литературы
Загрузить сразу несколько регистров (Load Multiple)
Синтаксис в ассемблере
LDM{<cond>}<addressing_mode> <Rn>{!}, <registers_and_pc>^
Описание
<cond> – поле условия (см. таблицу 1).
<addressing_mode> - определяет P, U, Rn, Вт и 8_bit_word_offset биты инструкции.
<Rn> – регистр первого операнда (см. таблицу 1).
! –определяет будет ли производится запись в базовый регистр, и этот знак не опциональный. ( ! – разрешить запись вычисленного адреса обратно в базовый регистр). Во всех случаях, где не требуется модификация базового адреса (! – отсутствует), в Rn сохранится начальный адрес, кроме случая, когда этот регистр есть в списке передаваемых (<reglist>) в команде множественной загрузки, то тогда содержимое Rn будет перезаписано новым прочитанным значением.
<registers_and_pc > – Список регистров, отделенных запятыми и окруженный {и}. Этот список должен входить в PC, и определяет набор регистров, которые будут загружены командой LDM.
^ - Для команды LDM, которая не загружает PC, это указывает, что регистры в режиме пользователя могут быть загружены.
Действие
if ConditionPassed(cond) then
address = start_address
for i = 0 to 14
if register_list[i] == 1 then
Ri = Memory[address,4]
address = address + 4
CPSR = SPSR
value = Memory[address,4]
if (architecture version 4T, 5 or above) and (T Bit == 1) then
pc = value AND 0xFFFFFFFE
else
pc = value AND 0xFFFFFFFC
address = address + 4
assert end_address = address - 4
Использование
Команда LDM(3) полезна для возвращения из исключения. Она загружает подмножество регистров общего назначения и PC от последовательных местоположений памяти.
Примеры
LDMFD SP!,{R15} ; R15 <- (SP),CPSR не изменяется
LDMFD SP!,{R15}^ ; R15 <- (SP), CPSR <- SPSR_режим
; (только в привилегированном режиме).
LDM/STM – ARM
Команды множественной загрузки
Синтаксис в ассемблере
LDM | STM {cond} <addressing_mode> <Rn>{!}, <registers>{^}
Описание
<cond> – поле условия (см. таблицу 1).
<Rn> – регистр первого операнда (см. таблицу 1).
<registers> – список регистров (см. таблицу 1).
<addressing_mode> определяет один из четырех режимов адресации:
IA (Increment After) Начальный адрес – содержимое базового регистра. Конечный адрес – содержимое базового регистра + (4 * количество регистров, указанных в поле <registers> - 4)
IB (Increment Before) Начальный адрес – содержимое базового регистра + 4. Конечный адрес – содержимое базового регистра + (4 * количество регистров, указанных в поле <registers>)
DA (Decrement After) Начальный адрес – содержимое базового регистра - (4 * количество регистров, указанных в поле <registers>) + 4. Конечный адрес – содержимое базового.
DB (Decrement Before) Начальный адрес – содержимое базового регистра - (4 * количество регистров, указанных в поле <registers>). Конечный адрес – содержимое базового - 4.
Команды множественной загрузки (LDM) загружают некоторые (возможно все) регистры общего назначения данными из памяти. Команды множественного сохранения (STM) записывают данные из регистров общего назначения в память.
Эти команды обрабатывают последовательность адресов. Регистру с минимальным номером соответствует начальный адрес диапазона адресов памяти, а регистру с максимальным номером соответствует конечный адрес диапазона адресов памяти.
Бит P |
Имеет два значения:
P==1 означает что ячейка памяти, адресованная регистромRn, включена в диапазон обработки.
P== 0 означает что ячейка памяти, адресованная регистромRn, находится на одно слово ниже или выше диапазона обработки в зависимости от направления обработки. |
Бит U |
Определяет направление обработки. Вперед (U== 1), или назад (U== 0) |
Бит S |
Для команд загрузки (LDM), которые загружают данные в регистрPC, битSозначает, что регистрCPSRзагружается из регистраSPSR. Для команд загрузки (LDM) которые не модифицируют регистрPCи для всех команд сохранения (STM) битSозначает, что когда процессор находится в привилегированном режиме, то передаются значения банка регистров вместо регистров текущего режима. |
Бит W |
Означает, что базовый регистр модифицируется при передаче данных. Базовый регистр увеличивается (U== 1) или уменьшается (U== 0) для реализации всех вышеперечисленных способов адресации (IA,IB,DA,DB). |
Бит L |
Различает команды загрузки (L== 1) и сохранения (L==0). |
Register_list |
Это поле команды имеет один бит на каждый регистр общего назначения. Bit[0] относится кR0, аBit[15] относится к региструR15(PC). Если в этом поле ни один бит не указан, то результат выполнения команды не определен (UNPREDICTABLE). |
LDMIA – THUMB