新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應用 > 常用ARM指令集及匯編

常用ARM指令集及匯編

作者: 時間:2016-11-20 來源:網(wǎng)絡 收藏
一、ARM處理器的尋址方式

二、指令集學習

本文引用地址:http://butianyuan.cn/article/201611/318760.htm

(一)ARM指令集

1.指令格式

2.條件碼

3.ARM存儲器訪問指令

1)LDR/ STR-加載/ 存儲指令

2)LDM/ STM-多寄存器加載/ 存儲指令

3)SWP-寄存器和存儲器交換指令

4.ARM數(shù)據(jù)處理指令

1)數(shù)據(jù)傳送指令

a)MOV-數(shù)據(jù)傳送指令

b)MVN-數(shù)據(jù)非傳送指令

2)算術(shù)邏輯運算指令

a)ADD-加法運算指令

b)SUB-減法運算指令

c)RSB-逆向減法指令

d)ADC-帶進位加法指令

e)SBC-帶進位減法指令

f)RSC-帶進位逆向減法指令

g)AND-邏輯“與”

h)ORR-邏輯“或”

i)EOR-邏輯“異或

j)BIC-位清除指令

3)比較指令

a)CMP-比較指令

b)CMN-負數(shù)比較指令

c)TST-位測試指令

d)TEQ-相等測試指令

4)乘法指令

a)MUL-32位乘法指令

b)MLA-32位乘加指令

c)UMULL-64位無符號乘法指令

d)UMLAL-64位無符號乘加指令

e)SMULL-64位有符號乘法指令

f)SMLAL-64位有符號乘加指令

5.ARM分支指令

1)B-分支指令

2)BL-帶連接的分支指令

3)BX-帶狀態(tài)切換的分支指令

6.ARM協(xié)處理器指令

1)CDP-協(xié)處理器數(shù)據(jù)操作指令

2)LDC-協(xié)處理器數(shù)據(jù)讀取指令

3)STC-協(xié)處理器數(shù)據(jù)寫入指令

4)MCR-ARM處理器到協(xié)處理器的數(shù)據(jù)傳送指令

5)MRC-協(xié)處理器到ARM處理器的數(shù)據(jù)傳送指令

7.ARM雜項指令

1)SWI-軟中斷指令

2)MRS-讀狀態(tài)寄存器指令

3)MSR-寫狀態(tài)寄存器指令

8.ARM偽指令

1)ADR-小范圍的地址讀取偽指令

2)ADRL-中等范圍的地址讀取偽指令

3)LDR-大范圍的地址讀取偽指令

4)NOP-空操作偽指令

(二)Thumb指令集

1.Thumb指令集和ARM指令集的區(qū)別

2.Thumb存儲器訪問指令

1)LDR/ STR-加載/ 存儲指令

2)PUSH/ POP-寄存器入棧 / 出棧指令

3)LDMIA/ STMIA-多寄存器加載/ 存儲指令

3.Thumb數(shù)據(jù)處理指令

1)數(shù)據(jù)傳送指令

a)MOV-數(shù)據(jù)傳送指令

b)MVN-數(shù)據(jù)非傳送指令

c)NEG-數(shù)據(jù)取負指令

2)算術(shù)邏輯運算指令

a)ADD-加法運算指令

b)SUB-減法運算指令

c)ADC-帶進位加法指令

d)SBC-帶進位減法指令

e)MUL-乘法運算指令

f)AND-邏輯“與”

g)ORR-邏輯“或”

h)EOR-邏輯“異或”

i)BIC-位清除指令

j)ASR-算術(shù)右移指令

k)LSL-邏輯左移指令

l)LSR-邏輯右移指令

m)ROR-循環(huán)右移指令

3)比較指令

a)CMP-比較指令

b)CMN-負數(shù)比較指令

c)TST-位測試指令

4.Thumb分支指令

1)B-分支指令

2)BL-帶連接的分支指令

3)BX-帶狀態(tài)切換的分支指令

5.Thumb雜項指令

1)SWI-軟中斷指令

6.Thumb偽指令

1)ADR-小范圍的地址讀取偽指令

2)LDR-大范圍的地址讀取偽指令

3)NOP-空操作偽指令

7。匯編指令API

MOV(MOVe) 傳送指令
PUSH 入棧指令
POP 出棧指令
XCHG(eXCHanG) 交換指令
XLAT(TRANSLATE) 換碼指令
LEA (Load Effective Address) 有效地址送寄存器指令
LDS(Load DS with pointer) 指針送寄存器和DS指令
LES(Load ES with pointer) 指針送寄存器和ES指令
LAHF(Load AH with Flags) 標志位送AH指令
SAHF(Store AH into Flgs) AH送標志寄存器指令
PUSHF(PUSH the Flags) 標志進棧指令
POPF(POP the Flags) 標志出棧指令
ADD 加法指令
ADC 帶進位加法指令
INC 加1指令
SUB(SUBtract) 不帶借位的減法指令
SBB(SuVtrach with borrow) 帶借位的減法指令
DEC(DECrement) 減1指領(lǐng)
NEG(NEGate) 求補指令
CMP(CoMPare) 比較指令
MUL(unsinged MULtiple) 無符號數(shù)乘法指令
IMUL(sIgned MUL tiple) 有符號數(shù)乘法指令
DIV(unsigned DIVide) 無符號數(shù)除法指令
IDIV(sIgned DIVide) 有符號數(shù)除法指令
CBW(Count Byte to Word) 字節(jié)轉(zhuǎn)換為字指令
CWD(Count Word to Doble word) 字轉(zhuǎn)換為雙字指令
DAA 壓縮的BCD碼加法十進制調(diào)整指令
DAS 壓縮的BCD碼減法十進制調(diào)整指令
AAA 非壓縮的BCD碼加法十進制調(diào)整指令
AAS 非壓縮的BCD碼加法十進制調(diào)整指令
AND 邏輯與指令
OR 邏輯或指令
XOR 邏輯異或指令
NOT 邏輯非指令
TEST 測試指令
SHL(SHift logical Letf) 邏輯左移指令
SHR(SHift logical Right) 邏輯右移指令
ROL(Rotate Left ) 循環(huán)左移指令P58
ROR(Rotate Right) 循環(huán)右移指令P58
RCL(Rotate Left through Carry) 帶進位循環(huán)左移
RCR(Rotate Right through Carry) 帶進位循環(huán)左移
MOVS(MOVe String) 串傳送指令
STOS(STOre into String) 存入串指令
LODS(LOad from string) 從串取指令
REP(REPeat) 重復操作前
CLD(CLear Direction flag) 清除方向標志指令
STD(SeT Direction flag) 設(shè)置方向標志指令
CMPS(CoMPare String) 串比較指令
SCAS(SCAn String) 串掃描指令
REPE/REPZ(REPeat while Equal/Zero)相等/為零時重復操作前綴
REPNE/REPNZ(REPeat while Not Equal/Zero)不相等/不為零進重復前綴
IN(INput) 輸入指令
OUT(OUTput) 輸出指令
JMP(JuMP) 無條件轉(zhuǎn)移指令
JZ,JNZ,JS,JNS,JO,JNO,JP,JNP,JB,JNB,JBE,JNBE,JL,JNL,JLE,JNLE,JCXZ 條件轉(zhuǎn)移指令
LOOP 循環(huán)指令P70
LOOPZ/LOOPE 為零/相等時循環(huán)指令
LOOPNZ/LOOPNE 不為零/不相等時循環(huán)指令
CALL 子程序調(diào)用指令
RET(RETun) 子程序返回指令
CLC(CLear Carry) 進位位置0指令
CMC(CoMplement Carry) 進位位求反指令
SRC(SeT Carry) 進位位置1指令
NOP(No OPeretion) 無操作指令
HLT(HaLT) 停機指令
OFFSET 返回偏移地址
SEG 返回段地址
EQU(=) 等值語句
PURGE 解除語句
DUP 操作數(shù)字段用操作符
SEGMENT,ENDS 段定義指令
ASSUME 段地址分配指令
ORG 起始偏移地址設(shè)置指令
$ 地址計數(shù)器的當前值
PROC,ENDP 過程定義語句
NAME,TITLE,END 程序開始結(jié)束語句
MACRO,ENDM 宏定義指令

JZ OPR //結(jié)果為零轉(zhuǎn)移
JNZ OPR //結(jié)果不為零轉(zhuǎn)移
JS OPR //結(jié)果為負轉(zhuǎn)移
JNS OPR //結(jié)果為正轉(zhuǎn)移
JO OPR //溢出轉(zhuǎn)移
JNO OPR //不溢出轉(zhuǎn)移
JP OPR //結(jié)果為偶轉(zhuǎn)移
JNP OPR //結(jié)果為奇轉(zhuǎn)移
JC OPR //有進位轉(zhuǎn)移
JNC OPR //無進位轉(zhuǎn)移


關(guān)鍵詞: ARM指令集匯

評論


技術(shù)專區(qū)

關(guān)閉