ARM彙編指令集_學習筆記(1)
阿新 • • 發佈:2018-12-06
一、什麼是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 個暫存器。