- •Справочник по системе команд микроконтроллера 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)
- •Список литературы
2. Перечень команд микроконтроллера lpc2000 на базе arm-ядра
Далее приведена таблица, которая включает в себя краткое описание команд рассматриваемого микроконтроллера. Рассмотрены режим команды, мнемоника в ассемблере, способы адресации, действие команды, наличие переноса, число циклов и байт.
Таблица 5. Перечень команд микроконтроллера LPC2000 на базе ARM-ядра
** |
Мнемоника |
Адресация |
Содержание |
Су |
Число циклов |
Число байт |
Примечание |
A |
ADD R2,R4,R5 |
П, К |
(R2)← (R4) + (R5) |
– |
1S* |
1 |
Сложение |
A |
ADD Rd, PC, #Imm |
П, Н |
(Rd) ← (PC)+ #Imm |
– |
2S+1N+1I* |
2 |
Сложение со смещением |
A |
ADC R5, R3, R4 |
П, К |
(R5) ← (R3) + (R4) + (Carry) |
+ |
1S* |
1 |
Сложение с переносом |
A |
ADC Rd, PC, #Imm
|
П, Н |
(Rd) ← (PC) + #Imm + (Carry) |
+ |
2S+1N+1I* |
2 |
Сложение с переносом и смещением |
A |
AND R2, R4, R5 |
П, К |
(R2) ← (R4) AND (R5) |
– |
1S* |
1 |
Логическое «И» |
A |
AND Rd, PC, #Imm |
П, Н |
(Rd) ← (PC) AND #Imm |
– |
2S+1N+1I* |
2 |
Логическое «И» со смещением |
T |
AND Rd, Rm |
П |
(Rd) ← (Rd) AND (Rm) |
– |
1 |
1 |
Логическое «И» |
T |
ASR Rd, Rm, #immed_5 |
К с НС |
(Rd) ← (Rm>>immed_5) |
– |
2 |
2 |
Арифм. сдвиг вправо |
T |
ASR Rd, Rs |
К с РС |
(Rd) ← (Rd>>Rs) |
– |
2 |
2 |
Арифм. сдвиг вправо |
A |
B Rn B <метка> B <cond> <метка> |
П, К |
PC ← (Rn) PC ← [метка] PC ← [метка] |
– |
2S + 1N |
1 |
Команда перехода |
T |
B <метка> B<cond> <метка> |
П, К |
PC ← [метка] PC ← [метка] |
– |
2 |
2 |
Условный и безусловный переход |
A |
BIC Rd, Rn,<shifter_operand> |
П, Н |
(Rd) ← (Rn) & (not <shifter_operand>) |
– |
1S |
2 |
Bit Clear поразрядно |
T |
BIC Rd,Rn |
П, К |
(Rd)← (Rd)&((Rn)) |
+ |
1 |
1 |
Bit Clear поразрядно |
A |
BL addr |
Н |
(R14) ← (R15); (R15) ← addr |
– |
2 |
2 |
Branch with Link |
T |
BL addr |
Н |
(R14) ← (R15); (R15) ← addr |
– |
2 |
2 |
Branch with Link |
A |
BLX Rm |
П |
(R14) ← (R15); (R15) ← (Rm) |
– |
2 |
2 |
Branch with Link and Exchange |
A |
BLX addr |
Н |
(R14) ← (R15); (R15) ← addr |
– |
2 |
2 |
|
T |
BLX Rm |
П |
(R14) ← (R15); (R15) ← (Rm) |
– |
2 |
2 |
Branch with Link and Exchange |
T |
BLX addr |
Н |
(R14) ← (R15); (R15) ← addr |
– |
2 |
2 |
|
A |
BX R0 |
П |
|
+ |
2S+1N |
1 |
Перейти и сразу переключить ядро в другой режим |
T |
BX R0 |
П |
|
+ |
2S+1N |
1 |
Перейти и сразу переключить ядро в другой режим |
A |
CDP {<cond>} <coproc>, <opcode_1>, <Rd>, <Rn>, <Rm>, <opcode_2> |
П |
Зависит от кода условия, операции на сопроцессоре и наличия сопроцессора |
– |
1S + bI |
2 |
|
A |
CDP2 <coproc>, <opcode_1>, <Rd>, <Rn>, <Rm>, <opcode_2> |
П |
Зависит от операции на сопроцессоре и наличия сопроцессора |
– |
1S + bI |
2 |
|
A |
CLZ {<cond>} Rd, Rm |
П |
<Rd> ← число нулевых битов до первого единичного бита в регистре <Rm> |
– |
1 |
2 |
число нулевых битов до первого единичного бита |
A |
CMN Rn, <shifter_operand> |
П, Н |
(Rn)+(not <Shifter_operand>) |
+ |
1S |
2 |
Rd не меняется Установка флагов |
T |
CMN R2, R6 |
П |
(R2) + (R6) |
+ |
1 |
1 |
Установить флаги регистра CPSR для Rd + Rs |
A |
CMP Rn, <Shifter_operand> |
П, Н |
(Rn) – (<Shifter_operand>) |
+ |
1S |
2 |
Rd не меняется Установка флагов |
T |
CMP R2, R6 |
П |
(R2) – (R6) |
+ |
1 |
1 |
Установить флаги регистра CPSR для Rd – Rs |
A |
EOR Rd, Rn, <Shifter_operand> |
П |
(Rd) ← (Rd) EOR (Rn+(<Shifter_operand>)) |
– |
1S |
2 |
Исключающее ИЛИ поразрядно |
T |
EOR Rd, Rm |
П |
EOR (Rd), (Rm) |
+ |
1S |
1 |
Mod2 |
|
EOR Rd, Rn, <shifter_operand> |
П |
(Rd) ← (Rd) EOR (Rn+<shifter_operand>) |
– |
2 |
2 |
|
A |
LDC <cond><L> <CRd> <addr> |
Пост-И Пред-И |
(CRd) <- addr |
– |
(n-1)S + 2N + bl |
2 |
Load Coprocessor |
A |
LDC2 <L> <CRd> <addr> |
Пост-И Пред-И |
(CRd) <- addr |
– |
(n-1)S + 2N + bl |
2 |
Load Coprocessor |
A |
LDM <cond> <addr> <Rn>{!}, <registers> |
Пост-И Пред-И |
(Rn) <- addr |
– |
nS + 1N + 1l |
2 |
Load Multiple |
A |
LDM <cond> <addr> <Rn>, <registers_without_pc> |
Пост-И Пред-И |
(Rn) <- addr |
– |
nS + 1N + 1l |
2 |
Load Multiple |
A |
LDM <cond> <addr> <Rn>{!}, <registers_and_pc> |
Пост-И Пред-И |
(Rn) <- addr |
– |
nS + 1N + 1l |
2 |
Load Multiple |
T |
LDMIA Rn! ,{Rb,Rc} |
П |
LDMIA (Rn)!, (registers) |
– |
nS + 1N + 1I |
2 |
Load regs |
T |
LDR Rd, [Rn,#immed_5] |
К |
LDR(Rd),[(Rn), #(immed_5)*4] |
– |
1S + 1N + 1I
|
1 |
Load reg |
T |
LDR Rd,[Rn,Rm] |
К |
LDR (Rd), [(Rn),(Rm)] |
– |
1S + 1N + 1I
|
1 |
Load reg |
T |
LDR Rd, [PC,#immed_8] |
К |
LDR (Rd), [PC,#(immed_8)*4] |
– |
2S + 2N + 1I
|
1 |
Load reg |
T |
LDR Rd, [SP,#immed_8] |
К |
LDR (Rd), [(SP),#(immed_8)*4] |
– |
2S + 2N + 1I
|
1 |
Load reg |
T |
LDRB Rd,[Rn,Rm] |
К с РС |
(Rd[7:0])←((Rb)+(Ro)); (Rd[31:8])←0 |
– |
2 |
3 |
|
T |
LDRB Rd,[Rn,#immed_5] |
К с НС |
(Rd[7:0])←((Rb)+ +#immed_5); (Rd[31:8])←0 |
– |
2 |
3 |
|
A |
LDRD Rd, [Rn] LDRD Rd, [Rn, offset] |
П, К |
(Rd) ← ([Rn]) (Rd) ← ([Rn] + offset) |
– |
2S + 1N +1I |
2 |
Загрузка двойного слова со знаком |
T |
LDRH Rd,[Rn,Rm] |
К с РС |
(Rd[15:0])←((Rb)+(Ro)); (Rd[31:16])←0 |
– |
2 |
3 |
|
T |
LDRH Rd,[Rn, #immed_5*2] |
К с НС |
(Rd[15:0])←((Rb)+ #immed_5*2)*1/2; (Rd[31:16])←0 |
– |
2 |
3 |
|
A |
LDRSB Rd, [Rn] LDRSB Rd, [Rn, offset] |
П, К |
(Rd) ← ([Rn]) (Rd) ← ([Rn] + offset) |
– |
1S+1N+1I |
2 |
Загрузка байта со знаком |
T |
LDRSB <Rd>, [<Rn>, <Rm>] |
К |
(Rd) ← ([Rn]+ [Rm]) |
– |
1 |
2 |
|
A |
LDRSH Rd, [Rn] LDRSH Rd, [Rn, offset] |
П, К |
(Rd) ← ([Rn]) (Rd) ← ([Rn] + offset) |
– |
1S+1N+1I |
2 |
Загрузка полуслова со знаком |
T |
LDRSH Rd, [Rn, Rm] |
П, К |
(Rd) ← SignExtend((Rn) + (Rm))[15 : 0] |
– |
1 |
2 |
|
T |
LSL Rd, Rn, #const5 |
П, Н |
(Rd) ← (Rn)[31 – const5 : 0].0[const5 – 1 : 0] |
+ |
1 |
2 |
const5 – пятиразрядная константа |
T |
LSL Rd, Rs |
П, Н |
(Rd) ← (Rd)[31 – (Rs) : 0].0[(Rs) – 1 : 0] |
+ |
1 |
2 |
|
T |
LSR Rd, Rn, #const5 |
П, Н |
(Rd) ← 0[const5 – 1 : 0]. (Rn)[31 : const5] |
+ |
1 |
2 |
const5 – пятиразрядная константа |
T |
LSR Rd, Rs |
П, Н |
(Rd) ← 0[(Rs) – 1 : 0]. (Rd)[31 : (Rs)] |
+ |
1 |
2 |
|
A |
MCR p6,0,R4,c5,c6
|
П, К |
(c6) ← p6 execute (opcode 0) with (R4) |
– |
1S+(b+1)I+1C* |
2 |
|
A |
MCRR p6,0,R4,R5,c6 |
П, К |
(c6) ← p6 execute (opcode 0) with (R4), (R5) |
– |
1S+(b+1)I+1C* |
2 |
|
A |
MCR2 p6,0,R4,c5,c6 |
П, К |
(c6) ← p6 execute (opcode 0) with (R4) |
– |
1S+(b+1)I+1C* |
2 |
|
A |
MLA{cond}{S} [Rd], [Rm], [Rs], [Rn] |
П |
(Rd) ← (Rm)*(Rs) + (Rn) |
+ |
1S + I(m+1) |
1 |
Умножение накоплением |
T |
MOV R0, #205 |
Н |
(R0) ← 205 |
+ |
1 |
2 |
Пересылка |
T |
MOV R0, R1 |
П |
(R0) ← (R1) |
+ |
2 |
2 |
Пересылка м\у регистрами младшего набора |
T |
MOV R0, R1 |
П |
(R0) ← (R1) |
– |
2 |
2 |
Пересылка м\у регистрами старшегонабора |
A |
MRC{<cond>} <coproc>, <opcode_1>, <Rd>, <CRn>, <CRm> {, <opcode_2>}
|
П, К |
(CRn)←(CRm) |
– |
1S+(b)I+1C |
2 |
|
A |
MRC2 <coproc>, <opcode_1>, <Rd>, <CRn>, <CRm>{, <opcode_2>}
|
П, К |
(CRn)←(CRm) |
– |
1S+(b+1)I+1C |
2 |
|
A |
MRRC {<cond>} <coproc>, <opcode_1>, <Rd>, <Rd2>, cpsource |
П, К |
(Rd)←(cpsource) (Rd2)←(cpsource) |
– |
1S+(b+1)I+1C |
2 |
|
A |
MRS{cond} Rd, SPSR MRS{cond} Rd, CPSR |
П |
(Rd)← (SPSR) (Rd) ← (CPSR) |
+ |
1 |
8 |
Чтение из PSR |
A |
MSR{cond} SPSR_<fields>, Rm MSR{cond} CPSR_<fields>, Rm MSR{cond} SPSR_<fields>, #<immed_8r> MSR{cond} CPSR_<fields>, #<immed_8r> |
П |
(SPSR) ← (Rm) (CPSR) ← (Rm) (SPSR) ← (immed_8r) (CPSR) ← (immed_8r) |
+ |
1 |
8 |
Запись в PSR |
A |
MUL{cond}{S} Rd, Rm, Rs |
П |
(Rd) ← (Rm) * (Rs) |
+ |
1 |
8 |
Умножение |
T |
MUL R1, R2 |
П |
(R1) ← (R1) * (R2) |
+ |
2 |
2 |
перемножение |
A |
MVN{cond}{S} Rd, <shifter_operand> |
П, К |
(Rd)←0 FFFFFFFFH EOR <shifter_operand> |
– |
1 |
2 |
|
T |
MVN R0, R1 |
П |
R0 ← NOT(R1) |
– |
1 |
2 |
Пересылка с инвенрсией |
T |
NEG Rd,Rn |
П |
(Rd) ← 0-(Rn); |
+ |
1S* |
2 |
|
A |
NOP |
П |
MOV #0, (R3) |
– |
1 |
1 |
|
T |
ORR Rd,Rn |
П |
(Rd) ← (Rd) or (Rn) |
+ |
1S* |
2 |
|
A |
ORR{<cond>}{S} <Rd>, <Rn>, <shifter_operand> |
П, К |
(Rd) ← (Rn) OR EOR <shifter_operand> |
– |
1 |
2 |
|
A |
PLD R2 |
П, Н |
Предзагрузка КЭШа |
– |
1 |
1 |
|
T |
POP Rlist |
П, И |
|
– |
nS+1N+1I* |
2 |
|
T |
POP Rlist, PC |
П, И |
|
– |
(n+1)S+2N+1I |
2 |
|
T |
PUSH {R0-R4,LR} |
П |
Поместить в стек регистры R0,R1,R2,R3,R4 и R14 |
– |
1 |
2 |
Сохранение значений в стек |
A |
QADD Rd, Rm, Rn |
П |
(Rd) ← (Rm) + (Rn) |
+ |
1 |
1 |
Сложение нескольких операндов |
A |
QADD Rd, Rm, Rn |
П |
(Rd) ← (Rm) + (Rn)*2 |
+ |
1 |
1 |
Сложение нескольких операндов c удвоением |
A |
QDSUB {<cond>} <Rd> <Rm> <Rn> |
П |
(Rd) ← (Rm) – 2*(Rn) |
– |
2 |
4 |
|
A |
QSUB {<cond>} <Rd> <Rm> <Rn> |
П |
(Rd) ← (Rm) – (Rn) |
– |
2 |
4 |
|
T |
ROR R1, R0 |
П |
Сдвиг R1 вправо на число бит, указанное в R0 |
+ |
1 |
2 |
Циклический сдвиг вправо |
A |
RSB {cond} {S} Rd Rn <shifter_operand> |
П, Н |
(Rd) ← (<shifter_operand>) – (Rn) |
+ |
1 |
4 |
|
A |
RSС {cond} {S} Rd Rn <shifter_operand> |
П, Н |
(Rd) ← (<shifter_operand>) – (Rn) – NOT(флаг переноса) |
+ |
1 |
4 |
|
A |
SBC {cond} {S} Rd Rn <shifter_operand> |
П, Н |
(Rd) ← (Rn) – (<shifter_operand>)– NOT(флаг переноса) |
+ |
1 |
4 |
|
T |
SBC R1, R3 |
П |
R1 ← R1 – R3 - NOT Carry |
+ |
2 |
2 |
Вычитание с учетом регистра переноса |
A |
SMLAL{<cond>}{S}<RdLo>,<RdH1>, <Rm>,<Rs> |
Пост-И, пред-И |
RdHi,RdLo ← (Rm)*(Rs) + RdHi,RdLo |
+ |
1S+I(m+2)* |
2 |
|
A |
SMLAWy {cond} <Rd>, <Rm>, <Rs>,<Rn> |
П |
(Rd) ← (Rn) +((Rm)*(Rs[y]))[47:16] |
– |
nS+1N+1I* |
8 |
Умножение (32 x 16) разрядов с 32 разрядным накоплением. |
A |
SMLAxy {cond} <Rd>, <Rm>, <Rs>,<Rn> |
П |
(Rd) ← (Rn) +(Rm[x])*(Rs[y]) |
– |
nS+2N+1I* |
8 |
умножение (16 x 16) разрядов с 32 разрядным накоплением |
A |
SMUL<x><y> {cond}Rd Rm Rs |
П |
(Rd) ← (Rm <[15:0]/ [31:16]>) * (Rs<[15:0]/ [31:16]>) |
– |
4 |
4 |
|
A |
SMULWy {cond} <Rd>, <Rm>, <Rs> |
П |
(Rd) ← (Rm)*(Rs[y])[47:16] |
– |
nS+1N+1I* |
8 |
Умножение (32 x 16) разрядов |
A |
STC{<cond>}{L} <coproc>, <CRd>, <addressig_mode> |
Пост-И, пред-И |
адрес ← (CRn) |
– |
(n-1)S+2N+bl* |
2 |
|
A |
STC2{<cond>}{L} <coproc>, <CRd>, <addressig_mode> |
Пост-И, пред-И |
адрес ← (CRn) |
– |
(n-1)S+2N+bl* |
2 |
|
A |
STMED SP!,{R0-R3,R14} |
Пост-Д (со стеками) |
(SP)←(R0)..(R3),(R14) |
– |
(n+1)S + 2N |
3 |
|
A |
STMFD SP,{R0-R14}^ |
Пре- Д (со стеками) |
(SP)←(R0)..(R14) |
+ |
(n+1)S + 2N |
3 |
только в привилегированном режиме |
A |
STMIA R0,{reglist} |
Пост-ИНК (без стеков) |
Cохранить все регистры |
– |
(n+1)S + 2N |
2 |
n - число перемещаемых слов |
T |
STMIA Rn!, {reglist} |
П, К |
((Rn))← {reglist} |
– |
(n+1)S + 2N |
2 |
n - число перемещаемых слов |
A |
STR Rd, [Rb, #Imm] |
К с НС |
((Rb)+Imm)←( Rd) |
– |
2N |
2 |
|
A |
STR Rd, [Rb, Ro] |
К с РС |
((Rb)+(Ro))← (Rd) |
– |
2N |
2 |
|
T |
STR Rd, [Rn, #Imm] |
П, И |
((Rn) + #Imm) ← (Rd) |
– |
2N |
2 |
|
T |
STR Rd, [Rn,Rm] |
П, И |
((Rn) + (Rm)) ← (Rd) |
– |
2N |
2 |
|
T |
STR Rd, [PC, #Imm] |
П, И |
((PC) + #Imm) ← (Rd) |
– |
2N |
2 |
|
T |
STR Rd, [SP, #Imm] |
П, И |
((SP) + #Imm) ← (Rd) |
– |
2N |
2 |
|
A |
STRB Rd,[Rb, Ro] |
К с РС |
((Rb)+(Ro))←(Rd[7:0] ) |
– |
2N |
2 |
Передача младшего байта из Rd |
A |
STRB Rd,[Rb, #Imm] |
К с НС |
((Rb)+Imm)←(Rd[7:0]) |
– |
2N |
2 |
Передача младшего байта из Rd |
T |
STRB Rd, [Rb, Ro] |
П, И |
((Rb) + (Ro)) ← (Rd) |
– |
2N |
2 |
Передача младшего байта из Rd |
T |
STRB Rd, [Rb, #Imm] |
П, И |
((Rb) + #Imm) ← (Rd) |
– |
2N |
2 |
Передача младшего байта из Rd |
A |
STRD Rd, [Rn] |
П, И |
(Rn)←(Rd)&(Rd+1) |
– |
2N |
4 |
Сохранение 2х слов |
T |
STRH <Rd>, [<Rn>, #<immed_5>*2] |
К с НС |
(Rd[15:0])->((Rn)+ (immed_5<<1)) |
– |
2N |
1 |
Сохранение мл. полуслова |
T |
STRH <Rd>, [<Rn>, <Rm>] |
К с РС |
(Rd[15:0])->((Rn)+ (Rm)) |
– |
2N |
1 |
Сохранение полуслова |
A |
SUB R2,R4,R5 |
П |
(R2) ← (R4) – (R5) |
+ |
1 |
1 |
Вычитание |
A |
SUB Rd, PC, #Offset3 |
П, Н |
(Rd)← (PC) - #Offset3 |
+ |
2S + 1N + 1I* |
2 |
Вычесть смещение, заданное в #Offset3 из содержимого рег-ра PC |
T |
SUB <Rd>, <Rn>, #<immed_3> |
П, Н |
(Rd)← ((Rn)- immed_3) |
+ |
1S* |
1 |
Вычитание |
T |
SUB <Rd> #<immed_8> |
П, Н |
(Rd)← ((Rd)- immed_8) |
+ |
1S* |
1 |
Вычитание |
T |
SUB <Rd>, <Rn>, <Rm> |
П |
(Rd)← ((Rn)- (Rm)) |
+ |
1S* |
1 |
Вычитание |
T |
SUB SP, #<immed_7>*4 |
Н |
(SP)← ((SP)- (immed_8<<2)) |
+ |
1S* |
1 |
Вычитание |
A |
SWI {<cond>} <immed_24> |
|
(PC) ←0x08; (CPSR)-> (SPSR_svc) |
– |
2S + 1N* |
2 |
Программное прерывание |
T |
SWI <immed_8> |
|
(PC) ←0x08; (CPSR)-> (SPSR_svc) |
– |
2S + 1N* |
1 |
Программное прерывание |
A |
SWP {<cond>} <Rd>, <Rm>, [<Rn>] |
П, К |
(Rd)← [(Rn)]; (Rm)->(Rn) |
– |
2S + 1N + 1I* |
2 |
Обмен между регистрами и памятью словами |
A |
SWP {<cond>}B <Rd>, <Rm>, [<Rn>] |
П, К |
(Rd)← [(Rn)]; (Rm)->(Rn) |
– |
2S + 1N + 1I* |
2 |
Обмен между регистрами и памятью байтами |
A |
TEQ{<cond>} <Rn>, <shifter_operand> |
П, К |
(Rn) EOR(shifter_operand) |
– |
1 |
2 |
|
A |
TST{<cond>}<Rn>, <shifter_operand> |
П, К |
(Rn) + 0FFFFh + 1 |
– |
1 |
2 |
|
T |
TST <Rn>, <Rm> |
П |
<Rn> «И» <Rm> |
– |
1 |
4 |
|
* b – число машинных тактов, необходимых для выполнения пустых тактов сопроцессора, а S, I и C зависят от типа машинных тактов (информация взята с сайта http://www.gaw.ru)
** A – команда в режиме ARM
T – команда в режиме THUMB
П – Прямая адресация
К – Косвенная адресация
И – Индексная
РС - регистровым смещением
НС - непосредственным смещением
Д – декрементная
ИНК – инкрементная