Скачиваний:
66
Добавлен:
01.05.2014
Размер:
1.22 Mб
Скачать

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

П – Прямая адресация

К – Косвенная адресация

И – Индексная

РС - регистровым смещением

НС - непосредственным смещением

Д – декрементная

ИНК – инкрементная