基於Android的ARM彙編語言系列之五:ARM指令集與Thumb指令集

2020-12-15 電子產品世界

章節列表

之一:ARM彙編語言開篇
之二:C/C++程序生成ARM彙編程序的過程分析
之三:ARM彙編語言程序結構
之四:ARM處理器的尋址方式
之五:ARM指令集Thumb指令集
之六:NEON指令集與VFP指令集

本文引用地址:http://www.eepw.com.cn/article/201611/317690.htm

寫在前面:本篇文章旨在大致介紹下ARM指令集的相關內容,這裡也同時提供一個有詳細解釋和用例的待書籤的PDF版本,方便大家查閱。

ARM指令集詳解

指令集是處理器的核心,ARM指令的基本格式如下所示:

opcode {cond}{S}{.W\.N}Rd, Rn{.operand2}

  • S:指定是否影響CPSR寄存器的值,如ADDS,SUBS等。
  • .W.N:指令寬度說明符。
  • Rd:目的寄存器。
  • Rn:第一個操作數寄存器。
  • operand2:第二個操作數,第二個操作數可以是立即數、寄存器或寄存器位操作,
  • cond:執行條件,它的取值如下圖所示:

一 跳轉指令

1.1 B

跳轉指令。

1.2 BL

帶連結的跳轉指令。

1.3 BX

帶狀態切換的跳轉指令。

二 存儲器訪問指令

2.1 LDR

從存儲器中加載數據到寄存器。

2.2 STR

存儲數據到指定的存儲單元。

2.3 LDM

從指定的存儲單元加載多個數據到一個寄存器列表。

2.4 STM

將一個寄存器列表的數據的數據存儲到指定的存儲單元。

2.5 PUSH

將寄存器推入滿遞減堆棧。

2.6 POP

從遞減堆棧中彈出數據到寄存器。

2.7 SWP

用於寄存器和存儲器之間的數據交換。

三 數據處理指令

3.1 MOV

將8位立即數或寄存器裡的內容送到目標寄存器中。

3.2 MVN

將8位立即數或寄存器裡的內容按位取反後送到目標寄存器中。

3.3 ADD

加法指令。

3.4 ADC

帶進位的加法指令。

3.5 SUB

減法指令。

3.6 RSB

逆向減法指令。

3.7 SBC

帶進位的減法指令。

3.8 RSC

帶進位的逆向減法指令。

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

有符號數除法指令。

3.19 UDIV

無符號數除法指令。

3.20 ASR

算術右移指令。

3.21 AND

邏輯與指令。

3.22 ORR

邏輯或指令。

3.23 EOR

異或指令。

3.24 BIC

位清除指令。

3.25 LSL

邏輯左移指令。

3.26 LSR

邏輯右移指令。

3.27 ROR

循環右移指令。

3.28 RRX

帶擴展的循環右移指令。

3.29 CMP

3.30 CMN

3.31 TST

位測試指令。

3.32 TEQ

四 其他指令

4.1 SWI

軟中斷指令。

4.2 NOP

空操作指令。

4.3 MRS

讀狀態寄存器指令。

4.4 MSR

寫狀態寄存器指令。


相關焦點

  • android平臺arm指令學習和調試
    */一、Ndk下內聯彙編跟vc下一樣,ndk編譯環境下也能使用內聯彙編,如下:本文引用地址:http://www.eepw.com.cn/article/201611/317575.htmincludeintmy_thumb(intdummy)
  • ARM平臺NEON指令的編譯和優化
    本文介紹了ARM平臺基於ARM v7-A架構的ARM Cortex-A系列處理器(Cortex-A5, Cortex-A7, Cortex-A8, Cortex-A9, Cortex-A15)上的NEON多媒體處理硬體加速器針對C/C++語言、彙編語言和NEON intrinsics
  • 常用ARM彙編指令
    本文引用地址:http://www.eepw.com.cn/article/201611/322957.htmARM指令集可以分為六大類,分別為數據處理指令、Load/Store指令、跳轉指令、程序狀態寄存器處理指令、協處理器指令和異常產生指令。
  • 常用ARM指令集及彙編
    一、ARM處理器的尋址方式二、指令集學習本文引用地址:http://www.eepw.com.cn/article/201611/
  • ARM彙編指令集之三——跳轉指令
    ARM指令集中的跳轉指令可以完成從當前指令向前或向後的32MB的地址空間的跳轉,包括以下4條指令:1、 B指令B指令的格式為:B{條件}目標地址B指令是最簡單的跳轉指令。一旦遇到一個B指令,ARM處理器將立即跳轉到給定的目標地址,從那裡繼續執行。
  • ARM彙編指令集之五——乘法指令與乘加指令
    乘法指令與乘加指令共有以下6條:本文引用地址:http://www.eepw.com.cn/article/201611/317601.htm1、 MUL指令MUL指令的格式為:MUL{條件}{S}目的寄存器,操作數1,操作數2MUL指令完成將操作數1與操作數2的乘法運算,並把結果放置到目的寄存器中,同時可以根據運算結果設置CPSR中相應的條件標誌位
  • 有關arm彙編中的align
    經常會看到arm-linux彙編中有如下的指令:.align n它的含義就是使得下面的代碼按一定規則對齊,.align n 指令的對齊值有兩種方案,n 或 2^n ,各種平臺最初的彙編器一般都不是gas,採取方案1或2的都很多,gas的目標是取代原來的彙編器,必然要保持和原來彙編器的兼容,因此在gas中如何解釋 .align指令會顯得有些混亂,原因在於保持兼容。
  • ARM彙編指令集之十——異常產生指令
    1、SWI指令SWI指令的格式為:本文引用地址:http://www.eepw.com.cn/article/201611/317607.htmSWI{條件} 24位的立即數SWI
  • ARM指令中特殊符號意義
    ARM彙編程序中的符號在ARM彙編語言中,符號(symbols)可以代表地址(addresse)、變量(variables)和數字常量(numeric constants)。當符號代表地址時,又稱為標號(lable)。當標號以數字開頭時,其作用範圍為當前段(當前段沒有使用ROUT偽操作時),這種標號又稱為局部標號(lacal lable)。
  • 一文看懂arm架構和x86架構有什麼區別
    本文主要介紹的是arm架構和x86架構的區別,首先介紹了ARM架構圖,其次介紹了x86架構圖,最後從性能、擴展能力、作業系統的兼容性、軟體開發的方便性及可使用工具的多樣性及功耗這五個方面詳細的對比了arm架構和x86架構的區別,具體的跟隨小編一起來了解一下。
  • ARM架構是什麼?為什麼連高通都離不開?
    ARM處理器本身是32位設計,但也配備16位指令集,一般來講比等價32位代碼節省達35%,卻能保留32位系統的所有優勢。當然這家公司不生產產品,它是做架構設計的,ARM架構,曾稱進階精簡指令集機器(Advanced RISC Machine)更早稱作Acorn RISC Machine,是一個32位精簡指令集(RISC)處理器架構。
  • ARM微處理器的指令集概述二——ARM應用系統開發詳解筆記
    BLX 指令BLX指令從ARM指令集跳轉到指令中所指定的目標地址,並將處理器的工作狀態有ARM狀態切換到Thumb狀態。該指令同時將PC的當前內容保存到寄存器R14 中。BX 指令 BX指令跳轉到指令中所指定的目標地址,目標地址處的指令既可以是ARM指令,也可以是Thumb指令。
  • ARM Cortex系列(A8/A9/A15/A7) NEON多媒體處理SIMD引擎優化
    Cortex-A9的NEON多媒體處理器是基於ARMv7的SIMD(Single Instruction Multiple Data)和向量浮點VFPv3(Vector Floating-Point)指令集的,在具體的晶片設計中NEON組件是可選的
  • ARM應用系統開發詳解:第3章 ARM微處理器的指令系統
    與MOV指令不同之處是在傳送之前按位被取反了,即把一個被取反的值傳送到目的寄存器中。其中S決定指令的操作是否影響CPSR中條件標誌位的值,當沒有S時指令不更新CPSR中條件標誌位的值。SWPBR0,R0,[R1];該指令完成將R1所指向的存儲器中的字節數據與R0中的低8位數據交換。3.3.8移位指令(操作)ARM微處理器內嵌的桶型移位器(Barrel Shifter),支持數據的各種移位操作,移位操作在ARM指令集中不作為單獨的指令使用,它只能作為指令格式中是一個欄位,在彙編語言中表示為指令中的選項。
  • 蘋果何時發布基於ARM架構的MacBook?
    不過直到今天,MacBook 系列依舊使用英特爾的處理器,但隨著蘋果開始使用基於 ARM 的晶片,上述情況可能會改變,畢竟 iPhone 及 iPad 正在使用的 A 系列晶片就是基於 ARM 結構的。ARM與英特爾ARM 與 Intel 晶片的簡單區別是前者採用 RISC(精簡指令集構架)而後者採用了 CISC(複雜指令集架構)。
  • 印度首款CPU Shakti離商用更進一步,基於RISC-V指令集
    特別值得關注的是,該款CPU使用的是RISC-V指令集架構。印度理工學院(IIT)Madras 為其開源Shakti處理器發布了SDK。Shakti基於開源RISC-V指令集架構,由印度電子和信息技術部資助。根據IIT的說法,開發板也將很快發布。IIT Madras的RISE集團於2016年開始致力於Shakti項目,並計劃針對不同的市場發布六個系列的處理器。
  • 蘋果Mac電腦使用ARM架構處理器,英特爾處理器會成為明日黃花嗎?
    蘋果WWDC大會結束已經1個多月了,最受關注的當然是蘋果Mac電腦放棄英特爾處理器而採用自家的ARM架構的A系列處理器。 ARM處理器是專門為行動裝置開發的低功耗精簡指令集架構的處理器,比傳統的X86架構處理器功耗低,但眾所周知,ARM架構的處理器運算能力不及X86架構處理器。
  • 學習逆向工程(外掛)基礎:彙編指令總結
    逆向工程的過程也就是把軟體逆向分析成代碼的過程,代碼可以實彙編代碼也可能是原始碼。下面介紹兩種方法:反彙編,即使用反彙編器,把程序的原始機器碼,翻譯成較便於閱讀理解的彙編代碼。這適用於任何的電腦程式,對不熟悉機器碼的人特別有用。流行的相關工具有OllyDebug和IDA。
  • 詞根系列|ARM 「weapon」
    詞根arm來源於拉丁名詞arma "weapons", 也可以來自拉丁動詞armare "to arm 武裝", From PIE root *ar- "to fit together一抱之量;雙手合抱量■短語armed with a big stick 帶著一根大棍子the (long) arm of the law (法律的威力)