基于Android的ARM匯編語言系列之五:ARM指令集與Thumb指令集
之一:ARM匯編語言開篇
之二:C/C++程序生成ARM匯編程序的過程分析
之三:ARM匯編語言程序結(jié)構(gòu)
之四:ARM處理器的尋址方式
之五:ARM指令集與Thumb指令集
之六:NEON指令集與VFP指令集
寫在前面:本篇文章旨在大致介紹下ARM指令集的相關(guān)內(nèi)容,這里也同時提供一個有詳細(xì)解釋和用例的待書簽的PDF版本,方便大家查閱。
ARM指令集詳解
指令集是處理器的核心,ARM指令的基本格式如下所示:
opcode {cond}{S}{.W.N}Rd, Rn{.operand2}
- S:指定是否影響CPSR寄存器的值,如ADDS,SUBS等。
- .W.N:指令寬度說明符。
- Rd:目的寄存器。
- Rn:第一個操作數(shù)寄存器。
- operand2:第二個操作數(shù),第二個操作數(shù)可以是立即數(shù)、寄存器或寄存器位操作,
- cond:執(zhí)行條件,它的取值如下圖所示:
一 跳轉(zhuǎn)指令
1.1 B
跳轉(zhuǎn)指令。
1.2 BL
帶鏈接的跳轉(zhuǎn)指令。
1.3 BX
帶狀態(tài)切換的跳轉(zhuǎn)指令。
二 存儲器訪問指令
2.1 LDR
從存儲器中加載數(shù)據(jù)到寄存器。
2.2 STR
存儲數(shù)據(jù)到指定的存儲單元。
2.3 LDM
從指定的存儲單元加載多個數(shù)據(jù)到一個寄存器列表。
2.4 STM
將一個寄存器列表的數(shù)據(jù)的數(shù)據(jù)存儲到指定的存儲單元。
2.5 PUSH
將寄存器推入滿遞減堆棧。
2.6 POP
從遞減堆棧中彈出數(shù)據(jù)到寄存器。
2.7 SWP
用于寄存器和存儲器之間的數(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
有符號數(shù)除法指令。
3.19 UDIV
無符號數(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
位測試指令。
3.32 TEQ
四 其他指令
4.1 SWI
軟中斷指令。
4.2 NOP
空操作指令。
4.3 MRS
讀狀態(tài)寄存器指令。
4.4 MSR
寫狀態(tài)寄存器指令。
評論