系統(tǒng)學(xué)習(xí)ARM之二 --ARM指令集
定義:
ARM 指令集:ARM處理器能夠運(yùn)行的命令的集合。
特點(diǎn):
所有ARM指令均為32-bits長
大部分為單周期指令 1T
所有指令都可以條件執(zhí)行
采用 Load/Store 架構(gòu) --- load/store指令
mov r1,100 @ r1 =*(100) 把內(nèi)存地址為100的單元格里的內(nèi)容賦值給r1,ARM指令 不支持
mov r1,#100 @ r1=100
二、數(shù)據(jù)處理指令:1. 指令:算術(shù)指令: ADD ADC SUB SBC RSB RSC
邏輯指令: AND ORR EOR BIC
比較指令: CMP CMN TST TEQ
數(shù)據(jù)搬移: MOV MVN
加法指令 ADD R1,R2,R3 R1 = R2 + R3
帶進(jìn)位加法 ADC R1,R2,R3 R1 = R2 + R3 + C
減法指令 SUB R1,R2,R3 R1 = R2 - R3
逆向減法 RSBR1,R2,R3 R1 = R3 - R2
帶借位減法 SBC R1,R2,R3 R1 = R2 - R3 - !C
帶借位逆減法 SBC R1,R2,R3 R1 = R3 - R2 - !C
邏輯與指令 AND R0,R0,#0X0F &
邏輯或指令 ORR R0,R0,#0X0F |
邏輯異或 AND R0,R0,#0X0F ^
位清除 BIC R0,R0,#9 R0 = R0 & (~#9)
比較指令 CMP R1,#10 cpsr = R1 - 10
反值比較指令 CMN R1,R2 cpsr = R1 + R2
位測試指令 TST R1,#3 cpsr = R1 & 3
相等測試 TEQ R1,R2 cpsr = R1 ^ R2
數(shù)據(jù)傳輸 MOV R1,R2 R1 = R2
數(shù)據(jù)取反傳輸 MVNR1,R2 R1 = R2
2. 條件碼:判斷指令是否執(zhí)行的依據(jù)
EQ 相等
NE 不相等
GE 大于等于
LE 小于等于
GT 大于
LT 小于
指令后面沒有條件碼: 執(zhí)行
指令后面有條件碼 :
首先判斷條件碼是否成立,CPSR條件位和條件碼標(biāo)志
成立 -- 指令執(zhí)行
不成立 --- 指令不執(zhí)行
cmp r1,#3 @ r1- 3 ,結(jié)果影響了CPSR的條件位 結(jié)果為0,Z=1 結(jié)果不為0,Z=0
addeq r2 ,r1,r1 z=1,eq條件碼成立; z=0,eq條件碼不成立
4. 條件位的影響:1-- 默認(rèn)所有的指令,不會(huì)影響CPSR寄存器的條件位nzcv
除了比較指令: 比較指令:CMP CMN TST TEQ
1-- 通過指令后面加S,指令的執(zhí)行就肯定會(huì)影響nzcv位
例子:
if (a==4 || a==10) --> cmp r4,#4
x=0; cmpne r4,#10
moveq r5,#0
四、跳轉(zhuǎn)指令: Branch :B{
Branch with Link :BL{
相對跳轉(zhuǎn):
pc'= pc +偏移量
跳轉(zhuǎn)范圍:
± 32 Mbyte
五、交換指令:(1)指令功能:在寄存器和存儲(chǔ)器之間,由一次存儲(chǔ)器讀和一次存儲(chǔ)器寫組成的原子操作。
(原子操作表示,在操作的時(shí)候不能被別的程序打斷)
一條指令完成了內(nèi)存單元和寄存器的數(shù)據(jù)交換
swp(字交換):相當(dāng)于
temp = *(Rn)
*(Rn)= Rm
Rd = temp
是32位的操作
swpb(字節(jié)交換):也同上邊,只是操作的是8位的數(shù)據(jù)
將內(nèi)存中的一個(gè)字節(jié)單元和一個(gè)指定寄存器的低8位相交換。
(2)信號量操作
(3)注意:
不能通過寫c語言程序?qū)崿F(xiàn)該指令
只能通過手寫匯編
六、軟中斷指令:(1)指令功能:引起異常,系統(tǒng)調(diào)用
(2)指令格式:
SWI{
(1)指令功能:CPSR寄存器不允許數(shù)據(jù)處理指令直接操作,只能由PSR寄存器操作
(2)指令格式:
MRS{
MSR{
協(xié)處理器寄存器傳送指令
MRC:從協(xié)處理器寄存器移到ARM 寄存器
MCR:從 ARM 寄存器移到協(xié)處理器寄存器