ARM指令英文全稱及功能
指令格式: 指令{條件}{S} {目的Register},{OP1},{OP2} |
"{ }"中的內容可選。即,可以不帶條件只有目的暫存器,或 只有目的暫存器和運算元1,也可以同時包含所有選項。“S” 決定指令的操作是否影響CPSR中條件標誌位的值,當沒有S時指令不更新CPSR中條件標誌位的值 |
||||||||||||||||||||||||||||||||
助記符 |
英文全稱 |
示例、功能 |
|||||||||||||||||||||||||||||||
跳 轉 指 令 |
B |
Branch 跳轉指令 |
B 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 ;定義結 |