- •Справочник по системе команд микроконтроллера 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 Increment)
Синтаксис в ассемблере
LDMIA <Rn>!, <registers>
Формат команды представлен на рис. 2.
Описание
<Rn> – регистр первого операнда (см. таблицу 1).
<registers> – список регистров (см. таблицу 1).
Команда LDMIA(Load Multiple Increment After) загружает непустое подмножество, или возможно все, регистры общего назначения последовательно из памяти.
! –определяет будет ли производится запись в базовый регистр, и этот знак не опциональный. ( ! – разрешить запись вычисленного адреса обратно в базовый регистр). Во всех случаях, где не требуется модификация базового адреса (! – отсутствует), в Rn сохранится начальный адрес, кроме случая, когда этот регистр есть в списке передаваемых (<reglist>) в команде множественной загрузки, то тогда содержимое Rn будет перезаписано новым прочитанным значением.
Хотя бы один регистр должен быть загружен. Если биты от 7 до 0 все выставлены в 0, то результат НЕ ОПРЕДЕЛЕН.
Регистры загружаются в соответствии с их номерами: в регистр с наименьшим номером загружаются данные из памяти по наименьшему адресу (начальный адрес), и так далее, что в регистр с наибольшим номером загружаются данные из памяти по наибольшему адресу (конечный адрес).
Начальный адрес – значение базового регистра <Rn>. Последующие адреса формируются путем инкрементирования предыдущего адреса на 4. Каждый адрес генерируется для каждого регистра, определенного в списке <registers>.
Значение конечного адреса на 4 меньше, чем сумма значения базового регистра и четырехкратного количества регистров, содержащихся в <registers>.
Получается, что значение базового регистра <Rn> инкрементируется четырехкратным количеством регистров, содержащихся в <registers>.
Поддерживаются только с младшие слова регистров: (R0 - R7).
Действие
Рассмотрим общий случай: LDMIA Rn!,{Rb,Rc}. Действие будет следующим: (Rb)<-(Rn);(Rc)<-(Rn+4);Rn:=Ra+2*4.
Использование
Команда LDMIA используется, когда необходимо загрузить непустое подмножество, или возможно все, регистры общего назначения последовательно из памяти.
Примеры
LDMIAR0!,{R2-R4,R7}
В регистры R2,R3,R4,R7 последовательно записываются значения из памяти, а именно: R2<-(R0);R3<-(R0+4);R4<-(R0+8);R7<- (R0+12) ;R0:=R0+16.
LDMIA R1,{R0-R2}
Происходит следующее: address:=R1;R0<-(address);R1<-(address+4);R2<-(address+8).
LDR – ARM
Команда записи слова в регистр (Load Register)
Синтаксис в ассемблере
LDR {<cond>} <Rd>, <addressing mode>
Формат команды представлен на рис. 1.
Описание
<cond> – поле условия (см. таблицу 1).
<Rd> – регистр результата (см. таблицу 1).
<addressingmode> – способ адресации, определяетI,P,U,W,Rnиaddr_modeбиты команды.
Команда LDR загружает слово из памяти по адресу, вычисленному с помощью <addressing mode>, и записывает его в регистр Rd. Если адрес не равен длине слова, то:
Для системы памяти Little-Endian циклический сдвиг вправо на 8 значения битов [1:0] адреса , заставляет адресованный байт занять место последнего значащего байта регистра.
Для системы памяти Big-Endian сдвиг заставляет адресованный байт занять биты [31:24] или биты [15:8] регистра, в зависимости от того, какое значение 0 или 1 соответственно имеет бит [0] адреса.
Если PC определен как регистр <Rd>, команда загружает слово, которое обрабатывается как адрес, а затем обращается по этому адресу. В ARM архитектуре версий 5 и выше, после этого обращения, бит [0] загруженного значения, определяет в каком из двух режимов: ARM или THUMB продолжится выполнение команды, даже если команда BX (loaded_value) была выполнена. В ранних версиях архитектуры биты [1:0] загруженного значения игнорируются и выполнение команды продолжается в режиме ARM, даже если команда MOV PC, (loaded_value) была выполнена.
Примеры
LDRR1, [R0]
в регистр R1 записывается значение хранящееся по адресу R0.
LDRR8, [R3, #4]
в регистр R8 записывается значение хранящееся по адресу R3 + 4.
LDRR8, [R3, -#4]
в регистр R8 записывается значение хранящееся по адресу R3 - 4.
LDRR8, [R3,R5]
в регистр R8 записывается значение хранящееся по адресу R3 +R5.
LDRR8, [R3],R2
в регистр R8 записывается значение хранящееся по адресу R3, затемR3 =R3 +R2.
LDR(1) – THUMB