基于Android的ARM匯編語(yǔ)言系列之五:ARM指令集與Thumb指令集
之一:ARM匯編語(yǔ)言開篇
之二:C/C++程序生成ARM匯編程序的過程分析
之三:ARM匯編語(yǔ)言程序結(jié)構(gòu)
之四:ARM處理器的尋址方式
之五:ARM指令集與Thumb指令集
之六:NEON指令集與VFP指令集
寫在前面:本篇文章旨在大致介紹下ARM指令集的相關(guān)內(nèi)容,這里也同時(shí)提供一個(gè)有詳細(xì)解釋和用例的待書簽的PDF版本,方便大家查閱。
ARM指令集詳解
指令集是處理器的核心,ARM指令的基本格式如下所示:
opcode {cond}{S}{.W.N}Rd, Rn{.operand2}
- S:指定是否影響CPSR寄存器的值,如ADDS,SUBS等。
- .W.N:指令寬度說明符。
- Rd:目的寄存器。
- Rn:第一個(gè)操作數(shù)寄存器。
- operand2:第二個(gè)操作數(shù),第二個(gè)操作數(shù)可以是立即數(shù)、寄存器或寄存器位操作,
- cond:執(zhí)行條件,它的取值如下圖所示:
一 跳轉(zhuǎn)指令
1.1 B
跳轉(zhuǎn)指令。
1.2 BL
帶鏈接的跳轉(zhuǎn)指令。
1.3 BX
帶狀態(tài)切換的跳轉(zhuǎn)指令。
二 存儲(chǔ)器訪問指令
2.1 LDR
從存儲(chǔ)器中加載數(shù)據(jù)到寄存器。
2.2 STR
存儲(chǔ)數(shù)據(jù)到指定的存儲(chǔ)單元。
2.3 LDM
從指定的存儲(chǔ)單元加載多個(gè)數(shù)據(jù)到一個(gè)寄存器列表。
2.4 STM
將一個(gè)寄存器列表的數(shù)據(jù)的數(shù)據(jù)存儲(chǔ)到指定的存儲(chǔ)單元。
2.5 PUSH
將寄存器推入滿遞減堆棧。
2.6 POP
從遞減堆棧中彈出數(shù)據(jù)到寄存器。
2.7 SWP
用于寄存器和存儲(chǔ)器之間的數(shù)據(jù)交換。
三 數(shù)據(jù)處理指令
3.1 MOV
將8位立即數(shù)或寄存器里的內(nèi)容送到目標(biāo)寄存器中。
3.2 MVN
將8位立即數(shù)或寄存器里的內(nèi)容按位取反后送到目標(biāo)寄存器中。
3.3 ADD
加法指令。
3.4 ADC
帶進(jìn)位的加法指令。
3.5 SUB
減法指令。
3.6 RSB
逆向減法指令。
3.7 SBC
帶進(jìn)位的減法指令。
3.8 RSC
帶進(jìn)位的逆向減法指令。
3.9 MUL
乘法指令。
3.10 MLS
3.11 MLA
3.12 UMULL
3.13 UMLAL
3.14 SMULL
3.15 SMLAL
3.16 SMLAD
3.17 SMLSD
3.18 SDIV
有符號(hào)數(shù)除法指令。
3.19 UDIV
無(wú)符號(hào)數(shù)除法指令。
3.20 ASR
算術(shù)右移指令。
3.21 AND
邏輯與指令。
3.22 ORR
邏輯或指令。
3.23 EOR
異或指令。
3.24 BIC
位清除指令。
3.25 LSL
邏輯左移指令。
3.26 LSR
邏輯右移指令。
3.27 ROR
循環(huán)右移指令。
3.28 RRX
帶擴(kuò)展的循環(huán)右移指令。
3.29 CMP
3.30 CMN
3.31 TST
位測(cè)試指令。
3.32 TEQ
四 其他指令
4.1 SWI
軟中斷指令。
4.2 NOP
空操作指令。
4.3 MRS
讀狀態(tài)寄存器指令。
4.4 MSR
寫狀態(tài)寄存器指令。
評(píng)論