如下為參考ARM網頁(http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0204ic/Cjafgdih.html ) 有關 ARM、Thumb 和 ThumbEE 指令的匯總,僅供參考
(除非另有說明,否則 ThumbEE 指令與 Thumb 指令完全相同)
| 助記符 | 簡單說明 |
頁碼 |
體系結搆 |
|---|---|---|---|
ADC,ADD |
帶進位加法,加法 | ADD、SUB、RSB、ADC、SBC 和 RSC | 全部 |
ADR |
加載相對程序或相對寄存器地址(短范圍) | ADR | 全部 |
ADRL 偽指令 |
加載相對程序或相對寄存器地址(中等范圍) | ADRL 偽指令 |
x6M |
AND |
邏輯“與” | AND、ORR、EOR、BIC 和 ORN | 全部 |
ASR |
算朮右移 | ASR、LSL、LSR、ROR 和 RRX | 全部 |
B |
跳轉 | B、BL、BX、BLX 和 BXJ | 全部 |
BFC,BFI |
位域清零和插入 | BFC 和 BFI |
T2 |
BIC |
位清零 | AND、ORR、EOR、BIC 和 ORN | 全部 |
BKPT |
斷點 |
BKPT |
5 |
BL |
帶鏈接的跳轉 | B、BL、BX、BLX 和 BXJ | 全部 |
BLX |
帶鏈接的跳轉,更改指令集 | B、BL、BX、BLX 和 BXJ |
T |
BX |
跳轉,更改指令集 | B、BL、BX、BLX 和 BXJ |
T |
BXJ |
跳轉,更改為 Jazelle | B、BL、BX、BLX 和 BXJ | J,x7M |
CBZ, CBNZ |
比較,如果為(非)零,則跳轉 | CBZ 和 CBNZ |
T2 |
CDP |
協處理器數據處理操作 | CDP 和 CDP2 |
x6M |
CDP2 |
協處理器數據處理操作 | CDP 和 CDP2 | 5,x6M |
CHKA |
檢查數組 | CHKA |
EE |
CLREX |
清除獨占 | CLREX | K,x6M |
CLZ |
計算前導零數目 | CLZ | 5,x6M |
CMN,CMP |
與負值比較,比較 | CMP 和 CMN | 全部 |
CPS |
更改處理器狀態 | CPS |
6 |
DBG |
調試 |
DBG、DMB、DSB 和 ISB |
7 |
DMB,DSB |
數據內存屏障,數據衕步屏障 | DBG、DMB、DSB 和 ISB | 7,6M |
ENTERX,LEAVEX |
將狀態更改為 ThumbEE 或更改狀態 ThumbEE | ENTERX 和 LEAVEX |
EE |
EOR |
異或 | AND、ORR、EOR、BIC 和 ORN | 全部 |
HB,HBL,HBLP,HBP |
處理程序跳轉,跳轉到指定處理程序 | HB、HBL、HBLP 和 HBP |
EE |
ISB |
指令衕步屏障 | DBG、DMB、DSB 和 ISB | 7,6M |
IT |
條件判斷 | IT |
T2 |
LDC |
加載協處理器 | LDC、LDC2、STC 和 STC2 |
x6M |
LDC2 |
加載協處理器 | LDC、LDC2、STC 和 STC2 | 5,x6M |
LDM |
加載多個寄存器 | LDM 和 STM | 全部 |
LDR |
加載寄存器指令 | 內存訪問指令 | 全部 |
LDR 偽指令 |
加載寄存器偽指令 | LDR 偽指令 | 全部 |
LDREX |
獨占加載寄存器 | LDREX 和 STREX | 6,x6M |
LDREXB,LDREXH |
獨占加載寄存器,半字 | LDREX 和 STREX | K,x6M |
LDREXD |
獨占加載寄存器,雙字 | LDREX 和 STREX | K,x7M |
LSL,LSR |
邏輯左移,邏輯右移 | ASR、LSL、LSR、ROR 和 RRX | 全部 |
MAR |
從寄存器移動到 40 位累加器 | MAR 和 MRA |
XScale |
MCR |
從寄存器移動到協處理器 | MCR、MCR2、MCRR 和 MCRR2 |
x6M |
MCR2 |
從寄存器移動到協處理器 | MCR、MCR2、MCRR 和 MCRR2 | 5,x6M |
MCRR |
從寄存器移動到協處理器 | MCR、MCR2、MCRR 和 MCRR2 | 5E,x6M |
MCRR2 |
從寄存器移動到協處理器 | MCR、MCR2、MCRR 和 MCRR2 | 6,x6M |
MIA,MIAPH,MIAxy |
帶內部 40 位累加的乘法 | MIA、MIAPH 和 MIAxy |
XScale |
MLA |
乘加 | MUL、MLA 和 MLS |
x6M |
MLS |
乘減 | MUL、MLA 和 MLS |
T2 |
MOV |
移動 | MOV 和 MVN | 全部 |
MOVT |
移動到頂部 | MOVT |
T2 |
MOV32 偽指令 |
移動 32 位常數到寄存器 | MOV32 偽指令 |
T2 |
MRA |
從 40 位累加器移動到寄存器 | MAR 和 MRA |
XScale |
MRC |
從協處理器移動到寄存器 | MRC、MRC2、MRRC 和 MRRC2 | 全部 |
MRC2 |
從協處理器移動到寄存器 | MRC、MRC2、MRRC 和 MRRC2 | 5,x6M |
MRS |
從 PSR 移動到寄存器 | MRS | 全部 |
MSR |
從寄存器移動到 PSR | MSR | 全部 |
MUL |
乘法 | MUL、MLA 和 MLS | 全部 |
MVN |
取反移動 | MOV 和 MVN | 全部 |
NOP |
無操作 | NOP、SEV、WFE、WFI 和 YIELD | 全部 |
ORN |
邏輯“或非” | AND、ORR、EOR、BIC 和 ORN |
T2 |
ORR |
邏輯“或” | AND、ORR、EOR、BIC 和 ORN | 全部 |
PKHBT,PKHTB |
組合半字 | PKHBT 和 PKHTB | 6,x7M |
PLD |
預載數據 |
PLD、PLDW 和 PLI | 5E,x6M |
PLDW |
預載要寫入的數據 | PLD、PLDW 和 PLI |
7MP |
PLI |
預載指令 | PLD、PLDW 和 PLI |
7 |
PUSH,POP |
將寄存器推入 (PUSH) 堆棧,從堆棧彈出 (POP) 寄存器 | PUSH 和 POP | 全部 |
QADD,QDADD,QDSUB,QSUB |
飽和算法 | QADD、QSUB、QDADD 和 QDSUB | 5E,x7M |
QADD8,QADD16,QASX,QSUB8,QSUB16,QSAX |
并行有符號飽和算法 | 并行加法和減法 | 6,x7M |
RBIT |
反轉位 | REV、REV16、REVSH 和 RBIT |
T2 |
REV,REV16,REVSH |
反轉字節順序 | REV、REV16、REVSH 和 RBIT |
6 |
RFE |
從異常中返回 | RFE | T2,x7M |
ROR |
向右循環移寄存器 | ASR、LSL、LSR、ROR 和 RRX | 全部 |
RSB |
反向減法 | ADD、SUB、RSB、ADC、SBC 和 RSC | 全部 |
RSC |
帶進位反向減法 | ADD、SUB、RSB、ADC、SBC 和 RSC |
x6M |
SADD8,SADD16,SASX |
并行有符號算法 | 并行加法和減法 | 6,x7M |
SBC |
帶進位的減法 | ADD、SUB、RSB、ADC、SBC 和 RSC | 全部 |
SBFX,UBFX |
有符號、無符號位域提取 | SBFX 和 UBFX |
T2 |
SDIV |
有符號除法 | SDIV 和 UDIV | 7M,7R |
SEL |
根據 APSR GE 標記選擇字節 | SEL | 6,x7M |
SETEND |
設置內存訪問的端標記 | SETEND | 6,x7M |
SEV |
設置事件 | NOP、SEV、WFE、WFI 和 YIELD | K,6M |
SHADD8,SHADD16,SHASX,SHSUB8,SHSUB16,SHSAX |
并行有符號均分算法 | 并行加法和減法 | 6,x7M |
SMC |
安全監控調用 | SMC |
Z |
SMLAD |
兩次有符號乘加 | SMLAD 和 SMLSD | 6,x7M |
|
(32 <= 32 + 16 x 16 + 16 x 16) |
|||
SMLAL |
有符號乘加 (64 <= 64 +32 x 32) | UMULL、UMLAL、SMULL 和 SMLAL |
x6M |
SMLALxy |
有符號乘加 (64 <= 64 +16 x 16) | SMLALxy | 5E,x7M |
SMLALD |
兩次有符號長整數乘加 | SMLALD 和 SMLSLD | 6,x7M |
|
(64 <= 64 + 16 x 16 + 16 x 16) |
|||
SMLSD |
兩次有符號乘減累加 | SMLAD 和 SMLSD | 6,x7M |
|
(32 <= 32 + 16 x 16 – 16 x 16) |
|||
SMLSLD |
兩次有符號長整數乘減累加 | SMLALD 和 SMLSLD | 6,x7M |
|
(64 <= 64 + 16 x 16 – 16 x 16) |
|||
SMMUL |
有符號高位字乘法 (32 <= TopWord(32 x 32)) | SMMUL、SMMLA 和 SMMLS | 6,x7M |
SMUAD,SMUSD |
有符號雙乘法,并將乘積相加或相減 | SMUAD{X} 和 SMUSD{X} | 6,x7M |
SMULxy |
有符號乘法 (32 <= 16 x 16) | SMULxy 和 SMLAxy | 5E,x7M |
SMULL |
有符號乘法 (64 <= 32 x 32) | UMULL、UMLAL、SMULL 和 SMLAL |
x6M |
SMULWy |
有符號乘法 (32 <= 32 x 16) | SMULWy 和 SMLAWy | 5E,x7M |
SRS |
存儲返回狀態 | SRS | T2,x7M |
SSAT |
有符號飽和 | SSAT 和 USAT | 6,x6M |
SSAT16 |
有符號飽和,并行半字 | SSAT16 和 USAT16 | 6,x7M |
SSUB8,SSUB16,SSAX |
并行有符號算法 | 并行加法和減法 | 6,x7M |
STC |
存儲協處理器 | LDC、LDC2、STC 和 STC2 |
x6M |
STC2 |
存儲協處理器 | LDC、LDC2、STC 和 STC2 | 5,x6M |
STM |
存儲多個寄存器 | LDM 和 STM | 全部 |
STR |
存儲寄存器指令 | 內存訪問指令 | 全部 |
STREX |
獨占存儲寄存器 | LDREX 和 STREX | 6,x6M |
STREXB,STREXH |
獨占存儲寄存器,字節或半字 | LDREX 和 STREX | K,x6M |
STREXD |
獨占存儲寄存器,雙字 | LDREX 和 STREX | K,x7M |
SUB |
減法 | ADD、SUB、RSB、ADC、SBC 和 RSC | 全部 |
SUBS pc, lr |
從異常中返回,無出棧 | SUBS pc, lr | T2,x7M |
SVC(以前為 SWI) |
超級用戶調用 | SVC | 全部 |
SWP,SWPB |
交換寄存器和內存(僅 ARM) | SWP 和 SWPB | 所有,x7M |
SXTB, SXTB16, SXTH |
有符號擴展 | SXT、SXTA、UXT 和 UXTA |
6 |
SXTAB, SXTAB16, SXTAH |
有符號擴展,帶加法 | SXT、SXTA、UXT 和 UXTA | 6,x7M |
TBB,TBH |
表跳轉字節、半字 | TBB 和 TBH |
T2 |
TEQ,TST |
相等測試、測試 | TST 和 TEQ | 全部 |
UADD8,UADD16,UASX |
并行無符號算法 | 并行加法和減法 | 6,x7M |
UDIV |
無符號除法 | SDIV 和 UDIV | 7M,7R |
UHADD8,UHADD16,UHASX,UHSUB8,UHSUB16,UHSAX |
并行無符號均分算法 | 并行加法和減法 | 6,x7M |
UMAAL |
無符號長整型乘加累加 | UMAAL | 6,x7M |
|
(64 <= 32 + 32 + 32 x 32) |
|||
UMLAL,UMULL |
無符號乘加,乘法 | UMULL、UMLAL、SMULL 和 SMLAL |
x6M |
|
(64 <= 32 x 32 + 64), (64 <= 32 x 32) |
|||
UQADD8,UQADD16,UQASX,UQSUB8,UQSUB16,UQSAX |
并行無符號飽和算法 | 并行加法和減法 | 6,x7M |
USAD8 |
差值的絕對值無符號求和 | USAD8 和 USADA8 | 6,x7M |
USADA8 |
差值的絕對值無符號求和再累加 | USAD8 和 USADA8 | 6,x7M |
USAT |
無符號飽和 | SSAT 和 USAT | 6,x6M |
USAT16 |
無符號飽和,并行半字 | SSAT16 和 USAT16 | 6,x7M |
USUB8,USUB16,USAX |
并行無符號算法 | 并行加法和減法 | 6,x7M |
UXTB, UXTB16, UXTH |
無符號擴展 | SXT、SXTA、UXT 和 UXTA |
6 |
UXTAB, UXTAB16, UXTAH |
無符號擴展,帶加法 | SXT、SXTA、UXT 和 UXTA | 6,x7M |
V* |
請參閱Chapter 5 NEON 和 VFP 編程 | ||
WFE,WFI,YIELD |
等待事件,等待中斷,通知 | NOP、SEV、WFE、WFI 和 YIELD | T2,6M |
“體系結搆”列中的條目的含義如下:
全部
這些指令可用於所有版本的 ARM 體系結搆。
5
這些指令可用於 ARMv5T*、ARMv6* 和 ARMv7 體系結搆。
5E
這些指令可用於 ARMv5TE、ARMv6* 和 ARMv7 體系結搆。
6
這些指令可用於 ARMv6* 和 ARMv7 體系結搆。
6M
這些指令可用於 ARMv6-M 和 ARMv7 體系結搆。
x6M
這些指令不可用於 ARMv6-M 體系結搆。
7
這些指令可用於 ARMv7 體系結搆。
7M
這些指令可用於 ARMv7-M 架搆。
x7M
這些指令不可用於 ARMv6-M 和 ARMv7-M 架搆。
7R
這些指令可用於 ARMv7-R 架搆。
7MP
這些指令可用於實現了多重處理擴展的 ARMv7 體系結搆。
EE
這些指令可用於 ARM 體系結搆的 ThumbEE 變體。
J
此指令可用於 ARMv5TEJ、ARMv6* 和 ARMv7 體系結搆。
K
這些指令可用於 ARMv6K 和 ARMv7 體系結搆。
T
這些指令可用於 ARMv4T、ARMv5T*、ARMv6* 和 ARMv7 體系結搆。
T2
這些指令可用於 ARMv6T2 及更高版本的體系結搆。
XScale
這些指令可用於 ARM 體系結搆的 XScale 版本。
Z
此指令僅當執行安全擴展后才可用。

