ARM架構支持跨大范圍性能點的實現。ARM處理器的架構簡單性導致了非常小的實現,而小的實現意味着設備可以具有非常低的功耗。實現大小、性能和非常低的功耗是ARM體系結構的關鍵屬性。
ARM架構是一個精簡指令集計算機(RISC)架構,因為它包含了這些RISC架構特性:
- 一個大的統一寄存器文件
- 一種加載/存儲體系結構,其中數據處理操作只對寄存器內容進行操作,而不是直接對內存內容進行操作。
- 簡單的尋址模式,所有加載/存儲地址僅由寄存器內容和指令字段決定
此外,ARM架構還提供:
- 將移位與算術或邏輯運算相結合的指令。
- 自動遞增和自動遞減尋址模式,以優化程序循環。
- 加載和存儲多個指令,
- 以最大限度地提高數據吞吐量。
- 許多指令的條件執行,以最大化執行吞吐量。
這些對基本RISC體系結構的增強意味着ARM處理器實現了高性能、小程序大小、低功耗和小硅區之間的良好平衡。
本體系結構參考手冊定義了一組實現必須遵循的行為,以及一組軟件使用實現的規則。它沒有描述如何構建實現。
除非體系結構指定不同,否則實現的程序員可見行為必須與程序的簡單順序執行相同。這種程序員可見的行為不包括程序的執行時間。
指令集:
ARM指令集是一組32位指令,提供全面的數據處理和控制功能。
Thumb 指令集是作為一個16位指令集開發的,帶有ARM指令集功能的子集。它提供了顯著提高的代碼密度,但性能有所降低。執行拇指指令的處理器可以更改為執行ARM指令來處理性能關鍵段,特別是處理中斷。
ARMv6T2引入了Thumb-2技術。該技術使用許多32位指令擴展了原始Thumb指令集。ARMv6T2中包含的32位Thumb指令的范圍允許拇指代碼實現與ARM代碼類似的性能,代碼密度比早期的Thumb代碼更好。
在ARMv6T2中,ARM和Thumb指令集提供了幾乎相同的功能。
體系結構版本、概要文件和變體:
自引入以來,ARM體系結構已經發生了顯著的變化,並且ARM還在繼續開發它。到目前為止,已經定義了該體系結構的7個主要版本,用版本號I到7表示。其中,前三個版本現在已經過時了。
ARMv7提供了三個概要文件:
ARMv7-A :
- 實現具有多種模式的傳統ARM體系結構。
- 支持基於內存管理單元(MMU)的虛擬內存系統體系結構(VMSA)。
- ARMv7-A實現可以稱為VMSAv7實現。支持ARM和Thumb指令集。
ARMv7-R :實時配置文件
- 實現具有多種模式的傳統ARM體系結構。
- 支持基於內存保護單元(MPU)的受保護內存系統體系結構(PMSA)。
- ARMv7-R實現可以稱為PMSAv7實現。支持ARM和Thumb指令集。
ARMv7-M :在ARMv7-M體系結構參考手冊中描述的 微控制器配置文件:
- 實現一個為低延遲中斷處理設計的程序員模型,使用寄存器的硬件堆棧和對用高級語言編寫中斷處理程序的支持。
- 實現ARMv7 PMSA的變體。
- 支持ARM和Thumb指令集。
A1.5 The ARM memory model
ARM指令將地址設置為232個8位字節的單向地址空間。這個地址空間也被認為是230個32位 字 或231個16位 半字 。
該架構提供以下設施:
- 在未對齊的內存訪問上生成異常。
- 限制應用程序對指定內存區域的訪問。
- 將執行指令提供的虛擬地址轉換為物理地址。
- 在大詞尾和小詞尾之間改變對單詞和半單詞數據的解釋
- 控制對內存的訪問順序
- 控制緩存。
- 同步多個處理器對共享內存的訪問
A2.2 ARM core data types and arithmetic
加載和存儲操作可以向內存傳輸字節、半字或字。加載字節或半字零擴展或符號擴展數據,如在適當的加載指令中指定的那樣。
指令集包括加載和存儲操作,這些操作將兩個或多個單詞從內存中傳輸到內存。軟件可以使用這些指令加載和存儲雙單詞。
B1.3.1 ARM processor modes
模式更改可以在軟件控制下進行,也可以由外部或內部異常引起。
Notes on the ARM processor modes
User mode
操作系統以用戶模式運行應用程序,以限制系統資源的使用。以用戶模式執行的軟件在PLO上執行。用戶模式下的執行有時被描述為無特權執行。應用程序通常在用戶模式下執行,任何程序在用戶模式下執行:
- 只對系統資源進行無特權訪問,這意味着它不能訪問受保護的資源。
- 系統資源。只對內存進行無特權訪問。
- 除非引發異常,否則無法更改模式,請參閱B1-1164頁的異常處理。
System mode
以系統模式執行的軟件在PLI上執行。系統模式具有與用戶模式相同的可用寄存器,並且不會由任何異常輸入。
Supervisor mode
管理器模式是執行SVC(管理器調用)指令生成一個管理器調用異常的默認模式,該異常被帶到管理器模式。
處理器在重置時進入管理模式。
Abort mode
中止模式是執行數據中止異常或預取中止異常的默認模式。
Undefined mode
未定義模式是執行與指令相關的異常(包括任何執行未定義指令的嘗試)的默認模式。
FIQ mode
FIO模式是執行FIO中斷的默認模式。
IRQ mode
IRQ模式是IRQ中斷的默認模式。
Hyp mode
Hyp模式是非安全的PL2模式,作為虛擬化擴展的一部分實現。
Hypervisor調用異常和Hyp Trap異常是作為虛擬化擴展的一部分實現的異常,它們總是在Hyp模式下執行。
Monitor mode
B1.3.2 ARM core registers
SP, the stack pointer
處理器使用SP作為指向活動堆棧的指針。在拇指指令集中,大多數指令不能訪問SP。
唯一能夠訪問SP的指令是那些設計成使用SP作為堆棧指針的指令。
ARM指令集提供了對SP更通用的訪問,並且它可以用作通用寄存器。然而。ARM不贊成將SP用於除堆棧指針之外的任何用途。
LR, the link register
鏈接寄存器是一種特殊的寄存器,它可以保存返回的鏈接信息。本手冊中描述的一些情況要求使用LR。當軟件不需要LR進行鏈接時,它可以將LR用於其他目的。它可以將LR稱為R14。
PC, the program counter
執行ARM指令時,PC讀取當前指令加8的地址
執行Thumb指令時,PC讀取當前指令加4的地址
向PC寫入一個地址會導致該地址的分支。
大多數Thumb指令無法訪問PC。
B1.3.3 Program Status Registers (PSRs)
開始學習匯編指令: A8 Instruction Descriptions
以 mov指令為例:
32位數據為編譯后的機器碼。

1 #include <stdio.h> 2 3 int main() 4 { 5 __asm__ __volatile__( 6 "nop\n" 7 "mov r0,#98\n" 8 "mov r0,#0xff0000\n" 9 "mov r0,#0xf000000f\n" 10 "nop\n" 11 12 13 ); 14 15 return 0; 16 }
反匯編后:
1 e320f000 nop {0} 2 e3a00062 mov r0, #98 ; 0x62 3 e3a008ff mov r0, #16711680 ; 0xff0000 4 e3a002ff mov r0, #-268435441 ; 0xf000000f 5 e320f000 nop {0}
分析:
1110 0011 1010 0000 0000 0000 0110 0010 //e3a00062
1110 0011 1010 0000 0000 1000 1111 1111 //e3a008ff 0xff0000 循環左移16位才能得到小於256 再除以2 放在16位開始的位置
1110 0011 1010 0000 0000 0010 1111 1111 //e3a002ff 0xf000000f 循環左移4位,除以2 放在16位開始的位置
沒有條件:1110 None (AL) d
add、adc、sub、sbc、and、
mrs、msr
ldr、ldrh、ldrb
str、strh、strb