ARM(Advanced RISC Machines)
概述:有三種含義,它是一個公司的名稱,是一類微處理器的通稱,還是一種技術的名稱。
技術特徵
- 體積小、低功耗、低成本、高性能。
- 支持Thumb(16位)/ARM(32位)雙指令集,能很好地兼容8/16位器件。
- 大量使用寄存器,指令執行速度更快。
- 大多數數據操作都在寄存器中完成。
- 尋址方式靈活簡單,執行效率高。
- 指令長度固定。
嵌入式RISC微處理器
概述:RISC(Reduced Instruction Set Computer)是精簡指令集計算機,RISC把着眼點放在如何使計算機的結構更加簡單和如何使計算機的處理速度更加快速上。RISC選取了使用頻率最高的簡單指令,拋棄複雜指令,固定指令長度,減少指令格式和尋址方式,不用或少用微碼控制。
嵌入式CISC微處理器
概述:傳統的複雜指令級計算機(CISC)更側重於硬件執行指令的功能性,使CISC指令及處理器的硬件結構更加複雜。
RISC和CISC的區別
ARM的基本數據類型
ARM採用32位架構,ARM的基本數據類型有以下3種。
- Byte:字節,8bit。
- Halfword:半字,16bit(半字必須與2字節邊界對齊)。
- Word:字,32bit(字必須與4字節邊界對齊)。
注意 - ARM 系統結構 v4 以上版本支持以上3種數據類型,v4 以前版本僅支持字節和字。
- ARM指令編譯後是4個字節(與字邊界對齊),Thumb指令編譯後是2個字節(與半字邊界對齊)
ARM工作模式
注意:除用戶模式外的其他7種處理器模式成爲**特權模式**。在特權模式下,程序可以訪問所有的系統資源,也可以任意進行處理器模式切換。其中以下6種又稱異常模式。
- 快速中斷模式(fiq)
- 外部中斷模式(irq)
- 特權模式(svc)
- 數據訪問中止模式(abt)
- 未定義指令中止模式(und)
- 監控模式(mon)(Cortex-A特有模式)
注意:
- 處理器模式可以通過軟件控制切換,也可以通過外部中斷或異常處理過程進行切換。
- 大多數的用戶程序運行在用戶模式下。當處理器工作在用戶模式時,應用程序不能夠訪問受操作系統保護的一些系統資源,應用程序也不能直接進行處理器模式切換。當需要進行處理器模式切換時,應用程序可以產生異常處理,在異常處理過程中進行處理器模式切換。這種體系結構可以使操作系統控制整個系統資源的使用。
- 當應用程序發生異常中斷時,處理器進入相應的異常模式。在每一種異常模式中都有一組專用寄存器以供相應的異常處理程序使用,這樣就可以保證在進入 ARM 的工作模式異常模式時用戶模式下的寄存器(保存程序運行狀態)不被破壞。
ARM的流水線結構
本文用的Cortex-A9是ARMv7架構,使用3級流水線,分爲取指、譯碼、執行。
- 取指令:從寄存器裝載一條指令。
- 譯碼:識別被執行的指令,併爲下一個週期準備數據通路的控制信號。在這一級,指令佔有譯碼邏輯,不佔用數據通路。
- 執行:處理指令並將結果寫會寄存器。
當處理器執行簡單的數據處理指令時,流水線使得平均每個時鐘週期能完成1條指令。但1條指令需要3個時鐘週期來完成,因此,有3個時鐘週期的延時,但吞吐率是每個週期1條指令。
ARM9使用5級流水線:取指、譯碼、執行、緩衝/數據、回寫。
寄存器組織
根據ARM型號的不同,寄存器數量有所不同,本文所述Cortex-A9有
40個32位寄存器。
- 33個通用寄存器。(不分組寄存器R0-R15,分組寄存器R8-R14,程序計數器R15)
- 6個狀態寄存器:1個CPSR(current program status register,當前程序狀態寄存器),6個SPSR(saved prgram status register,備份程序狀態寄存器)。
- 1個PC(program counter,程序計數器)。
寄存器R13(SP)
概述:寄存器R13在ARM處理器中常用做堆棧指針,稱爲SP,保存的是每種模式下的棧空間的地址,每一種模式都有自己的棧空間。異常處理程序負責初始化自己的的R13,使其指向該異常模式專用的棧地址。在異常處理程序入口處,將用到的其他寄存器的值保存在堆棧中,返回時,重新將這些值加載到寄存器。通過這種保護程序現場的方法,異常不會破壞被其中斷的程序現場。
寄存器R14(LR)
概述:寄存器R14又被稱爲連接寄存器(LR),它在ARM體系結構中具有下面兩種特殊作用;
- 每一種處理器模式用自己的R14存放當前子程序的返回地址。
- 當通過BL或BLX指令調用子程序時,R14被設置成該子程序的返回地址。在子程序返回時,把R14的值複製到程序計數器(PC)。
- R14也可以被用做通用寄存器使用。
寄存器R15(PC)
寄存器R15用作程序計數器(PC)。保存的是正在取指的指令的地址。
程序狀態寄存器(CPSR和SPSR)
每一種處理器模式下都有一個專用的物理寄存器做備份程序程序狀態寄存器(=SPSR)。在所有處理器模式下都可以訪問當前程序狀態寄存器(CPSR)。當特定的異常中斷髮生時,這個物理存儲器負責存放當前程序狀態寄存器的內容(SPSR用於保存CPSR的狀態)。當異常處理程序返回時,再將其內容恢復到當前程序狀態寄存器。
標誌位
N、Z、C、V通稱爲條件標誌位。(在這裏不做贅述,如需詳細瞭解可以參考系統書籍)。
Q標誌位
用於在異常中斷髮生時保存和恢復CPSR中的Q標誌位。(在帶DSP指令擴展中,表示增強的DAP指令是否發生了溢出)。
控制位
CPSR的低8位(I、F、T及M【4:0】)統稱爲控制位。當異常發生時,這些位的值將發生相應的變化。另外,如果在特權模式下,也可以通過軟件編程來修改這些位的值。
- 中斷禁止位:I=1,IRQ被禁止;F=1,FIQ被禁止
- 狀態控制位(T位是處理器的狀態控制位):T=0,處理器處於ARM狀態(即正在執行32位的ARM指令);T=1,處理器處於Thumb狀態(即正在執行16位Thumb指令)。當然,T位只有在T系列的ARM處理器上纔有效,在非T系列的ARM版本中,T位始終爲0。
- 模式控制位:M【4:0】作爲位模式控制位,這些位的組合確定了處理器處於哪種狀態
==注:==博客所用開發平臺爲三星ARM Cortex-A9四核CPU的Exynos-4412。