1. 程式人生 > >ARM指令英文全稱及功能

ARM指令英文全稱及功能

指令格式:  指令{條件}{S} {目的Register},{OP1},{OP2}

"{ }"中的內容可選。即,可以不帶條件只有目的暫存器,或

只有目的暫存器和運算元1,也可以同時包含所有選項。“S” 決定指令的操作是否影響CPSR中條件標誌位的值,當沒有S時指令不更新CPSR中條件標誌位的值

助記符

英文全稱

示例、功能

B

Branch

跳轉指令

Label    ;程式無條件跳轉到標號Label處執行

BL

Branch with Link

帶返回的跳轉指令

BL Label ;當程式無條件跳轉到標號Label處執行時,同時將當前的PC值儲存到R14中

BLX

Branch with Link and exchange帶返回和狀態切換的跳轉指令

BLX  Label ;從ARM指令集跳轉到指令中所指定的目標地址,並將處理器的工作狀態有ARM狀態切換到Thumb狀態,該指令同時將PC的當前內容儲存到暫存器R14中

BX

Branch and exchange

帶狀態切換的跳轉指令

BX  Label;跳轉到指令中所指定的目標地址,目標地址處的指令既可以是ARM指令,也可以是Thumb指令

MOV

Move

資料傳送

MOV R1,R0,LSL#3 ;將暫存器R0的值左移3位後傳送到R1

MVN

Move NOT

資料非傳送

MVN R0,#0 ;將立即數0取反傳送到暫存器R0中,完成後R0=-1

CMP

Compare

比較指令

CMP R1,R0  ;將暫存器R1的值與暫存器R0的值相減,並根據結果設定CPSR的標誌位

CMN

Compare negative

負數比較指令

CMN R1,R0  ;將暫存器R1的值與暫存器R0的值相加,並根據結果設定CPSR的標誌位

TST

Test

位測試指令

TST R1,#0xffe ;將暫存器R1的值與立即數0xffe按位與,並根據結果設定CPSR的標誌位

TEQ

Test equivalence

相等測試指令

TEQ R1,R2 ;將暫存器R1的值與暫存器R2的值按位異或,並根據結果設定CPSR的標誌位

ADD

Add

加法運算指令

ADD R0,R2,R3,LSL#1   ; R0 = R2 + (R3 << 1)

ADC

Add with carry

帶進位加法

ADCS    R2,R6,R10 ; R2 = R6+R10+!C,且更新CPSR的進位標誌位

SUB

Subtract

減法運算指令

SUB  R0,R1,#256   ; R0 = R1 – 256

SBC

Subtract with carry

帶進位減法指令

SUBS R0,R1,R2; R0 = R1 - R2 - !C,並根據結果設定CPSR的進位標誌位

RSB

Reverse subtract

逆向減法指令

RSB R0,R1,R2; R0 = R2 – R1

RSC

Reverse subtract with carry

帶進位逆向減法指令

RSC R0,R1,R2  ; R0 = R2 – R1 - !C

AND

And

邏輯與操作指令

AND R0,R0,#3 ; 該指令保持R0的0、1位,其餘位清零。

ORR

OR

邏輯或操作指令

ORR R0,R0,#3 ; 該指令設定R0的0、1位,其餘位保持不變。

EOR

Exclusive OR

邏輯異或操作指令

EOR R0,R0,#3 ; 該指令反轉R0的0、1位,其餘位保持不變。

BIC

Bit clear

位清除指令

BIC R0,R0,#0b1011 ; 該指令清除 R0 中的位 0、1、和 3,其餘的位保持不變。

CLZ

Count left zero

計算運算元最高階0的個數

MUL

Multiply

32位乘法指令

MUL R0,R1,R2  ;R0 = R1 × R2

MLA

Multiply and accumulate

32位乘加指令

MLAS R0,R1,R2,R3 ;R0 = R1 × R2 + R3,同時設定CPSR中的相關條件標誌位

SMULL

Signed multiply long

64位有符號數乘法指令

SMULL   R0,R1,R2,R3  ;R0 = (R2 × R3)的低32位 R1 = (R2 × R3)的高32位

SMLAL

Signed mul l and accumulate l

64位有符號數乘加指令

SMLAL   R0,R1,R2,R3  ;R0 =(R2 × R3)的低32位+R0; R1 =(R2 × R3)的高32位+ R1

UMULL

Unsigned multiply long

64位無符號數乘法指令

UMULL   R0,R1,R2,R3  ;R0 = (R2 × R3)的低32位;R1 =(R2 × R3)的高32位

UMLAL

Unsigned mul&accumulate lon

64位無符號數乘法指令

UMLAL   R0,R1,R2,R3  ;R0 =(R2 × R3)的低位+R0;R1 =(R2 × R3)的高32位+R1

PSR

訪問

MRS

Move PSR to register

程式狀態暫存器到通用暫存器的資料傳送指令

MRS R0,CPSR ;傳送CPSR的內容到R0

MSR

Move register to PSR通用暫存器到程式狀態暫存器的資料傳送指令

MSR CPSR_c ,R0 ;傳送R0的內容到SPSR,但僅僅修改CPSR中的控制位域

載入/

儲存

指令

LDR

Load word

字資料載入指令

LDR R0,[R1,R2]! ;將儲存器地址為R1+R2的字資料讀入R0,並將新地址R1+R2寫入R1。

LDRB

Load byte

位元組資料載入指令

LDRB R0,[R1,#8] ;將儲存器地址為R1+8的位元組資料讀入R0,並將R0的高24位清零

LDRH

Load half word

半字資料載入指令

LDRH  R0,[R1] ;將儲存器地址為R1的半字資料讀入暫存器R0,並將R0的高16位清零

LDM

Load multiple

批量資料載入指令

LDMFD  R13!,{R0,R4-R12,PC} ;將堆疊內容恢復到暫存器(R0,R4到R12,LR)

STR

Store

字資料儲存指令

STR R0,[R1],#8 ;將R0中的字資料寫入R1為地址的儲存器中,並將新地址R1+8寫入R1

STRB

Store byte

位元組資料載入儲存指令

STRB R0,[R1,#8]  ;將暫存器R0中的位元組資料寫入以R1+8為地址的儲存器中

STRH

Store half word

半字資料儲存指令

STRH R0,[R1,#8] ;將暫存器R0中的半字資料寫入以R1+8為地址的儲存器中

STM

Store multiple

批量資料儲存指令

STMFD R13!,{R0,R4-R12,LR}    ;將暫存器列表中的暫存器(R0,R4到R12,LR)存入堆疊

資料

交換

SWP

Swap word

字資料交換指令

SWP R0,R1,[R2] ;R2所指的字資料傳送到R0,同時R1的資料傳送到R2所指的單元

SWPB

Swap byte

位元組資料交換指令

SWPB R0,R1,[R2] ;R2所指的位元組資料傳送到R0,R0高24位清零,同時R1低8位送R2所指單元。

LSL

Logic shift left

邏輯左移操作

MOV  R0, R1, LSL#2(ASL#2) ;將R1中的內容左移兩位後傳送到R0中,低位用0填充

ASL

Arithmetic shift left

算術左移操作

LSR

Logic shift right

邏輯右移操作

MOV R0, R1, LSR#2 ;將R1中的內容右移兩位後傳送到R0中,左端用零來填充

ASR

Arithmetic shift right

算術右移操作

MOV R0, R1, ASR#2 ;將R1中的內容右移兩位後傳送到R0中,左端用第31位的值來填充

ROR

Rotate right

迴圈右移操作

MOV R0, R1, ROR#2   ;將R1中的內容迴圈右移兩位後傳送到R0中

RRX

Rotate right extended

帶拓展的迴圈右移操作

左端用進位標誌位C來填充

協處

理器

CDP

Data operations

協處理器數操作指令

LDC

Load

協處理器資料載入指令

STC

Store

協處理器資料儲存指令

MCR

Move to coproc fr ARM reg

處理器暫存器到協處理器暫存器的資料傳送指令

MRC

M to ARM reg fr coprocessor

協處理器暫存器到處理器暫存器的資料傳送指令

PSR field

F (Flags field mask byte)

S (Stats field mask byte)

X (Extension field mask byte)

C (control field mask byte)

CPSR

31

30

29

28

27

26

25

24

23

22

21

20

19

18

17

16

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

意義

N

Z

C

V

Q

DNZ (RAZ) 系統擴充套件用

I

F

T

M4

M3

M2

M1

M0

CPSR

各位

詳細

意義

N

當前指令運算結果為負時,N = 1; 結果為非負時,N = 0

Z

運算結果為0,Z=1;否則Z=0

C

上溢位、進位C=1;下溢位、借位C=0

V

加減法V=1表示符號位溢位

I

I=1時,禁止IRQ中斷

F

F=1時,禁止FIQ中斷

T

T=0,ARM指令;T=1,Thumb指令

M[4:0]

0b10000

User

0b10001

FIQ

0b10010

IRQ

0b10011

Supervisor

0b10111

Abort

0b11011

Undefined

0b11111

System

指令

格式

31

30

29

28

27

26

25

24

23

22

21

20

19

18

17

16

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

Cond

Opcode

S

Rn

Rd

Shift_operand

opcode

指令操作符編碼

S

決定指令的操作是否影響CPSR的值

Rd

目標暫存器編碼

Rn

包含第一個運算元的暫存器編碼

Shift_oprand

表示第二個運算元

Cond

指令執行的條件編碼,詳細如下所示

EQ

Z=1

Equal

NE

Z=0

Not equal, or unordered

CS/HS

C=1

Carry set / Unsigned higher or same

Great than or equal, or unordered

CC/LO

C=0

Carry clear / Unsigned lower

Less than

MI

N=1

Negative

Less than

PL

N=0

Positive or zero

Greater than or equal , or unordered

VS

V=1

Overflow

Unordered

VC

V=0

No overflow

Not unordered

HI

C=1且Z=0

Unsigned higher

Greater than, or unordered

LS

C=0或Z=1

Unsigned lower or same

Less than or equal

GE

N=1且V=1 或N=0且V=0

Signed greater than or equal

Greater than or equal

LT

N=1且V=0 或N=0且V=1

Signed less than

Less than , or unordered

GT

Z=0或N=V

Signed greater than

Great than

LE

Z=1或N!=V

Signed less than or equal

Less than or equal , or unordered

AL

Always (normally omitted)

並行

指令

字首

S

Signed arithmetic modulo 28 or 216 ,sets CPSR GE bit

Q

Signed saturating arithmetic

SH

Signed arithmetic, halving results

U

Unsigned arithmetic modulo 28 or 216 ,sets CPSR GE bit

UQ

Unsigned saturating arithmetic

UH

Unsigned arithmetic ,halving results

批量

傳輸

地址

模式

Block load / store

Stack pop / push

IA

Increment after

FD

Full descending

IB

Increment before

ED

Empty descending

DA

Decrement after

FA

Full ascending

DB

Decrement before

EA

Empty ascending

ARM

指令

定址

方式

立即定址

ADD R0,R0,#0x3f

R0←R0+0x3f

暫存器定址

ADD R0,R1,R2

R0←R1+R2

間接定址

ADD R0,R1,[R2]

R0←R1+[R2]

變址定址

LDR R0,[R1,#4]

R0←[R1+4]

LDR R0,[R1,#4]!

R0←[R1+4]、R1←R1+4

LDR R0,[R1] ,#4

R0←[R1]、R1←R1+4

LDR R0,[R1,R2]

R0←[R1+R2]

多暫存器定址

LDMIA R0,{R1,R2,R3,R4}

R1←[R0];R2←[R0+4];R3←[R0+8];R4←[R0+12]

偽指令及偽操作

符號

定義

GBLA / LCLA

定義一個全域性 / 區域性的數字變數,並初始化為0

GBLL / LCLL

定義一個全域性 / 區域性的邏輯變數,並初始化為F(假)

GBLS / LCLS

定義一個全域性 / 區域性的字串變數,並初始化為空

SETA / SETL / SETS

給一個數學 / 邏輯 / 字串變數賦值

RLIST

對一個通用暫存器列表定義名稱,訪問次序為根據暫存器的編號由低到高,與排列次序無關

資料

定義

DCB(=)/ DCW(DCWU)

分配一片連續的位元組 / 半字儲存單元並用指定的資料初始化

字尾U表示不要求對齊

DCFS(DCFSU)/DCFD(DCFDU)

分配一片連續的(單 / 雙精度的浮點數)字儲存單元並用指定的資料初始化

DCQ(DCQU)/ DCD(DCDU)

用於分配一片以雙字 / 字為單位的連續的儲存單元並用指定的資料初始化

DCDO

分配字記憶體但願,初始化為標號基於靜態基址暫存器R9的偏移量

DCI

和DCD類似,不同處在於DCI記憶體中的資料被標識為指令

SPACE(%)

DataSpace   SPACE   100 ;分配連續100位元組的儲存單元並初始化為0

MAP(^)

MAP 0x100,R0   ;定義結