1. 程式人生 > >ARM體系結構與程式設計模型總結

ARM體系結構與程式設計模型總結

ARM體系結構與程式設計模型

這裡寫圖片描述 ARM體系結構 一、ARM處理器簡介及RISC特點 ARM處理器簡介

ARM(Advanced RISC Machines)是一個32位RISC(精簡指令集)處理器架構,ARM處理器則是ARM架構下的微處理器。ARM處理器廣泛的使用在許多嵌入式系統。ARM處理器的特點有指令長度固定,執行效率高,低成本等。 RISC設計主要特點

1、指令集——RISC減少了指令集的種類,通常一個週期一條指令,採用固定長度的指令格式,編譯器或程式設計師通過幾條指令完成一個複雜的操作。而CISC指令集的指令長度通常不固定。

2、流水線——RISC採用單週期指令,且指令長度固定,便於流水線操作執行。

3、暫存器——RISC的處理器擁有更多的通用暫存器,暫存器操作較多。例如ARM處理器具有37個暫存器。

4、Load/Store結構——使用載入/儲存指令批量從記憶體中讀寫資料,提高資料的傳輸效率。

5、定址方式簡化,指令長度固定,指令格式和定址方式種類減少。 二、ARM指令集特點

ARM處理器是基於RISC的,但不是純粹的RISC體系結構。為了使ARM處理器能夠更好的滿足嵌入式系統的需要,ARM指令集和單純的RISC指令集有以下幾點不同:

1、一些特定的指令週期數可變。例如多暫存器裝載或儲存的Load/Store指令執行週期就是不確定的,這個會根據相關的暫存器個數而定。如果是訪問連續的記憶體地址,就可以改善效能,因為連續的記憶體訪問比隨機訪問要快。根據這個特點,由於在函式的起始和結尾通常會有多個暫存器與記憶體進行資料交換的操作,因此相應操作的指令條數會減少,提高了程式碼的密度。

2、內嵌的桶形移位暫存器產生了更復雜的指令。桶形移位暫存器是一個硬體部件,在一個暫存器被一條指令使用之前,桶形移位暫存器可以處理這個暫存器中的資料。桶形移位暫存器擴充套件了許多指令的功能,以此改善核心的效能,提高程式碼密度。

3、Thumb16位指令集。ARM處理器有兩種工作狀態,一種是ARM狀態,一種是Thumb狀態。ARM狀態下指令長度為32位,Thumb狀態下指令長度為16位。這種特點使得ARM既能執行16位指令,又能執行32位指令,從而增強了ARM核心的功能。

4、條件執行。只有當某個特定條件滿足時指令才會被執行。這個特性可以減少分支指令的數目,從而改善效能,提高程式碼密度。

5、增強指令。一些功能強大的數字訊號處理器(DSP)指令被加入到標準的ARM指令中,以支援快速的16*16乘法操作及飽和運算。ARM的這些增強指令,使得ARM處理器不需要加上DSP即可實現。 三、ARM處理器特點

1、ARM指令都是32位定長的

2、暫存器數量豐富(37個暫存器)

3、普通的Load/Store指令

4、多暫存器的Load/Store指令

5、指令的條件執行

6、單時鐘週期中的單條指令完成資料移位操作和ALU操作

7、通過變種和協處理器來擴充套件ARM處理器的功能

8、擴充套件了16位的Thumb指令來提高程式碼密度 四、ARM處理器命名規則

這裡寫圖片描述 ARM程式設計模型 一、ARM資料型別

1、字(Word):在ARM體系結構中,字的長度為32位。

2、半字(Half-Word):在ARM體系結構中,半字的長度為16位。

3、位元組(Byte):在ARM體系結構中,位元組的長度為8位。 二、ARM處理器儲存格式

ARM體系結構將儲存器看作是從0地址開始的位元組的線性組合。作為32位的微處理器,ARM體系結構所支援的最大定址空間為4GB。

ARM體系結構可以用兩種方法儲存字資料,分別為大端模式和小端模式。

大端模式(高地高低):字的高位元組儲存在低地址位元組單元中,字的低位元組儲存在高地址位元組單元中。

小端模式(高高低低):字的高位元組儲存在高地址位元組單元中,字的低位元組儲存在低地址位元組單元中。 三、ARM處理器工作狀態

從程式設計的角度來看,ARM微處理器的工作狀態一般ARM和Thumb有兩種,並可在兩種狀態之間切換。

1、ARM狀態:此時處理器執行32位的字對齊ARM指令,絕大部分工作在此狀態。

2、Thumb狀態:此時處理器執行16位的半字對齊的Thumb指令。 四、ARM處理器工作模式

1、使用者模式(usr,User Mode):ARM處理器正常的程式執行狀態。

2、快速中斷模式(fiq,Fast Interrupt Request Mode):用於高速資料傳輸或通道處理。當觸發快速中斷時進入此模式。

3、外部中斷模式(irq,Interrupt Request Mode):用於通用的中斷處理。當觸發外部中斷時進入此模式。

4、管理模式(svc,Supervisor Mode):作業系統使用的保護模式。在系統復位或執行軟體中斷指令SWI時進入。

5、資料訪問中止模式(abt,Abort Mode):當資料或指令預取中止時進入該模式,可用於虛擬儲存及儲存保護。

6、系統模式(sys,System Mode):執行具有特權的作業系統任務。

7、未定義指令中止模式(und,Undefined Mode):當未定義的指令執行時進入該模式,可用於支援硬體協處理器的軟體模擬。

除了使用者模式之外,其餘六種模式都是特權模式。除了使用者模式和系統模式之外,其餘五種模式都是異常模式。

在特權模式下程式可以訪問所有的系統資源。非特權模式和特權模式之間的區別在於有些操作只能在特權模式下才被允許,例如直接改變模式和中斷使能等。而且為了保證資料安全,一般MMU會對地址空間進行劃分,只有特權模式才能訪問所有的地址空間。而使用者模式如果需要訪問硬體,必須切換到特權模式下,才允許訪問硬體。 五、ARM處理器暫存器組織

ARM共有37個32位暫存器,其中31個為通用暫存器,6個為狀態暫存器,包括R0-R15,R8_fiq-R14_fiq,R13_svc,R14_svc,R13_abt,R14_abt,R13_irq,R14_irq,R13_und,R14_und,CPSR,SPSR_fiq,SPSR_svc,SPSR_abt,SPSR_irq,SPSR_und。如圖。

這裡寫圖片描述

通用暫存器包括R0-R15,可以分為3類:

1、未分組暫存器R0-R7

在所有執行模式下,未分組暫存器都指向同一個物理暫存器,他們未被系統用作特殊的用途。因此在中斷或異常處理進行異常模式轉換時,由於不同的處理器執行模式均使用相同的物理暫存器,所以可能造成暫存器中資料的破壞。

2、分組暫存器R8-R14

對於分組暫存器,他們每次所訪問的物理暫存器都與當前的處理器執行模式相關。具體如上圖。

R13常用作存放堆疊指標,使用者也可以使用其他暫存器存放堆疊指標,但在Thumb指令集下,某些指令強制要求使用R13存放堆疊指標。

R14稱為連結暫存器(LR,Link Register),當執行子程式時,R14可得到R15(PC)的備份,執行完子程式後,又將R14的值複製回PC,即使用R14儲存返回地址。

3、程式計數器PC(R15)

暫存器R15用作程式計數器(PC),在ARM狀態下,位[1:0]為0,位[31:2]用於儲存PC;在Thumb狀態下,位[0]為0,位[31:1]用於儲存PC。

由於ARM體系結構採用了多級流水線技術,對於ARM指令集而言,PC總是指向當前指令的下兩條指令的地址,即PC的值為當前指令的地址值加8個位元組。 六、程式狀態暫存器CPSR和SPSR

CPSR(Current Program Status Register,當前程式狀態暫存器),CPSR可在任何執行模式下被訪問,它包括條件標誌位、中斷禁止位、當前處理器模式標誌位以及其他一些相關的控制和狀態位。

每一種執行模式下都有一個專用的物理狀態暫存器,稱為SPSR(Saved Program Status Register,備份的程式狀態暫存器),當異常發生時,SPSR用於儲存當前CPSR的值,從異常退出時則可由SPSR來恢復CPSR。

由於使用者模式和系統模式不屬於異常模式,這兩種狀態下沒有SPSR,因此在這兩種狀態下訪問SPSR,結果是未知的。

CPSR儲存資料的結構:

這裡寫圖片描述

1、N(Negative):當用兩個補碼錶示的帶符號數進行運算時,N=1表示結果為負,N=0表示結果為正數或零

2、Z(Zero):Z=1表示運算結果為0,Z=0表示運算結果非零

3、C(Carry):有4種方法可以設定C的值:

(1)加法指令(包括比較指令CMP)

(2)當運算產生進位時(無符號數溢位),C=1,否則C=0

(3)減法運算(包括比較指令CMP)

(4)當運算產生了借位(無符號數溢位),C=0,否則C=1

對於包含移位操作的非加/減運算指令,C為移出值的最後一位。對於其他的非加/減運算指令,C的值通常不變。

4、V(Overflow):有2種方法設定V的值:

(1)對於加/減法運算指令,當運算元和運算結果為二進位制的補碼錶示的帶符號數時,V=1表示符號位溢位。

(2)對於其他的非加減法運算指令,V的值通常不變。

5、I(Interrupt Request):I=1表示禁止響應irq,I=0表示允許響應

6、F(Fast Interrupt Request):F=1表示禁止響應fiq,F=0表示允許響應

7、T(Thumb):T=0表示當前狀態位ARM狀態,T=1表示為Thumb狀態

8、M4-M0:表示當前處理器的工作模式,如圖:

這裡寫圖片描述 七、工作模式的切換

(1)執行軟中斷(SWI)或復位命令(Reset)指令。如果在使用者模式下執行SWI指令,CPU就進入管理(Supervisor)模式。當然,在其他模式下執行SWI,也會進入該模式,不過一般作業系統不會這麼做,因為除了使用者模式屬於非特權模式,其他模式都屬於特權模式。執行SWI指令一般是為了訪問系統資源,而在特權模式下可以訪問所有的系統資源。SWI指令一般用來為作業系統提供API介面。

(2)有外部中斷髮生。如果發生了外部中斷,CPU就會進入IRQ或FIQ模式。

(3)CPU執行過程中產生異常。最典型的異常是由於MMU保護所引起的記憶體訪問異常,此時CPU會切換到Abort模式。如果是無效指令,則會進入Undefined模式。

(4)有一種模式是CPU無法自動進入的,這種模式就是System模式,要進入System模式必須由程式設計師編寫指令來實現。要進入System模式只需改變CPSR的模式位為System模式對應的模式位即可。進入System模式一般是為了利用System模式和使用者模式下的暫存器相同的特點,因此一般情況下,作業系統在通過SWI進入Supervisor模式後,做一些操作後,就進入System模式。

(5)在任何特權模式下,都可以通過修改CPSR的MODE域來進入其他模式。不過需要注意的是由於修改的CPSR是該模式下的影子CPSR,即SPSR,因此並不是實際的CPSR,所以一般的做法是修改影子CPSR,然後執行一個MOVS指令來恢復執行某個斷點並切換到新模式。 --------------------- 作者:宋錚 來源:CSDN 原文:https://blog.csdn.net/qq_32651225/article/details/78176567 版權宣告:本文為博主原創文章,轉載請附上博文連結!