ARM處理器是一種16/32位的高性能、低成本、低功耗的嵌入式RISC微處理器,由ARM公司設計,然後授權給各半導體廠商生產。它目前已經成為應用最為廣泛的嵌入式處理器。 ...
一、什麼是ARM彙編?
- 運行在ARM處理器上的彙編語言就叫ARM彙編。
- C程式運行在X86平臺,底層就是X86彙編;運行在ARM平臺,底層就是ARM彙編。ARM彙編與X86彙編有顯著區別。
- X86屬於CISC(複雜指令集);ARM屬於RISC(精簡指令集)。
二、CISC存在的問題:
指令系統龐大,指令功能複雜,指令格式、定址方式多;執行速度慢;功耗大;難以優化編譯;編譯程式複雜;80%的指令在20%的運行時間使用;無法相容等。三、RISC特點:
- 簡單的指令集---RISC指令集只提供很有限的操作,基本上單周期指向每條指令,其指令長度也是固定的(一般4個位元組)。CISC指令複雜豐富,功耗大,長度不固定(1到6個位元組)。
- Load-Store架構---在RISC中,CPU並不會對記憶體中的數據進行操作,所有的計算都要求在寄存器中完成。而寄存器和記憶體的通信則由單獨的指令來完成。而在CISC中,CPU是可以直接對記憶體進行操作的。
- 更多的寄存器---和CISC相比。基於RISC的處理器有更多的通用寄存器可以使用,且每個寄存器都可以進行數據存儲或者定址。
- RISC指令集能夠非常有效的適合於採用流水線、超流水線和超標量技術,從而實現指令級併進行操作,提高處理器性能。
四、CISC VS RISC
RISC與CISC的主要特征對比 | ||
比較內容 | CISC | RISC |
指令系統 | 複雜、龐大 | 簡單、精簡 |
指令數目 | 一般大於200 | 一般小於100條 |
指令格式 | 一般大於4 | 一般小於4種 |
指令字長 | 不固定 | 等長 |
可訪存指令 | 不加限制 | 只有LOAD/STORE指令 |
指令使用頻率 | 相纏很大 | 相差不大 |
指令執行時間 | 相差很大 | 絕大多數在一個周期內完成 |
優化編譯實現 | 很難 | 較容易 |
程式源代碼長度 | 較短 | 較長 |
控制器實現方式 | 絕大多數為微程式控制 | 絕大多數為硬佈線控制 |
軟體系統開發時間 | 較短 | 較長 |
五、什麼是寄存器?
寄存器(register)是CPU的一個組成部分,裡面存放著指令、數據和地址等供CPU計算使用,速度比較快。寄存器分為通用寄存器(完成通用的計算功能,誰都可以使用),和專用寄存器(狀態寄存器,下一條執行指令寄存器,棧寄存器等,不能隨便修改)。
六、ARM微處理器的工作狀態一般有兩種,並可在兩種狀態之間切換。
- 第一種為ARM狀態,此時處理器執行32位的字對齊的ARM指令;第二種為Thumb狀態,此時處理器執行16位的、半字對齊的Thumb指令。
- 在程式的執行過程中,微處理器可以隨時在兩種工作狀態之間切換,並且,處理器工作狀態的轉變並不影響處理器的工作模式和相應寄存器中的內容。但ARM微處理器在開始執行代碼時,應該處於ARM狀態。
- 進入Thumb狀態:當操作數寄存器的狀態位(位0)為1時,可以採用執行BX指令的方法,使微處理器從ARM狀態切換到Thumb狀態。此外,當處理器處於Thumb狀態時發生異常(如IRQ、FIQ、Undef、Abort、SWI等),則異常處理返回時,自動切換到Thumb狀態。
- 進入ARM狀態:當操作數寄存器的狀態位為0時,執行BX指令時可以使微處理器從Thumb狀態切換到ARM狀態。此外,在處理器進行異常處理時,把PC指針放入異常模式鏈接寄存器中,並從異常向量地址開始執行程式,也可以使處理器切換到ARM狀態。
-
ARM 指令:當前執行的 PC 和與看到的 PC 相差 8,即看彙編時,需要 pc+8 才是真正的 pc;
Thumb 指令:當前執行的 PC 和與看到的 PC 相差 4即 看彙編時,需要 pc+4 才是真正的 pc。(下圖為ARM指令流水線 )
七、ARM微處理器支持7種運行模式。
- 用戶模式(USR):ARM處理器正常的程式執行狀態。
- 快速中斷模式(FIQ):用於高速數據傳輸或通道處理。
- 外部中斷模式(IRQ):用於通用的中斷處理。
- 管理模式(SVC):操作系統使用的保護模式。
- 數據訪問終止模式(ABT):當數據或指令預取終止時進入該模式,可用於虛擬存儲及存儲保護。
- 系統模式(SYS):運行具有特權的操作系統任務。
- 未定義指令中止模式(UND):當未定義的指令執行時進入該模式,可用於支持硬體協處理器的軟體模擬。
- ARM微處理器的運行模式可以通過軟體改變,也可以通過外部中斷或異常處理改變。大多數的應用程式運行在用戶模式下,當處理器運行在用戶模式下時,某些被保護的系統資源是不能被訪問的。
- 除用戶模式以外,其餘的所有6種模式稱之為非用戶模式,或特權模式;其中除去用戶模式和系統模式以外的5種又稱為異常模式,常用於處理中斷或異常,以及需要訪問受保護的系統資源等情況。
八、ARM寄存器
ARM處理器共有37個寄存器。其中包括:31個通用寄存器,包括程式計數器(PC)在內。這些寄存器都是32位寄存器。以及6個32位狀態寄存器。未分組寄存器:它們都共用R0到R7的通用寄存器,即只有一個寄存器;
分組寄存器:R8-R12 :兩個(FIQ擁有自己獨立的R8-R12的通用寄存器,其它六種處理模式共用R8-R12的通用寄存器。);
所謂的分組寄存器,是指一個寄存器在不同模式下有對應不同的寄存器,比如SP,在abort模式下sp_abt,在undefined模式下是sp_und,在irq模式下是sp_irq,進入各種模式後會自動切換映射到各個模式下對應的寄存器。
1 個固定的程式計數器 : PC (又稱 R15),總是指向正在取值的指令,類似於X86的EIP寄存器。
當前程式狀態寄存器 :CPSR。不能被同時訪問,一種模式下最多同時訪問 18 個寄存器。