GNU ARM彙編 三 ARM處理器的基本原則

2021-07-22 22:37:28 字數 3537 閱讀 3259

這一篇的知識**全部來自《arm system developer's guide》

從程式設計人員的視角來看,arm核是由資料匯流排連線的功能單元組成,如下圖所示:

資料通過資料匯流排流向處理器核心,這裡的資料可以是將要執行的指令,也可以是資料項.上面的圖是von neumann體系的arm核,資料項和指令共用同一匯流排.而h哈佛結構體系的arm核就會用兩個不同的匯流排.

就像所有的risc處理器,arm採用load-store體系結構.也就是說它含有兩條不同的指令型別來出入處理器.loar指令將資料從記憶體拷貝到暫存器,store指令是將資料從暫存器拷貝到記憶體.沒有直接操作記憶體中資料的資料處理指令.資料的處理離不開暫存器.

arm指令一般有兩個源暫存器,rn和rm,和乙個目的暫存器,rd.arm的乙個重要特性是rm可以在送入alu之前被桶型移位器做預處理,這樣就會有很多形式的表示式和定址方式.

下面介紹arm處理器的幾個關鍵分量:暫存器,當前程式狀態暫存器和流水線

暫存器:

通用目的暫存器可以儲存資料或者位址.由字母r和編號數字來表示.所有的暫存器都是32bit大小.

一共有18個活動的暫存器:16個資料暫存器和兩個程式狀態暫存器.資料暫存器由r0--r15表示.

arm處理器有3個暫存器分配為特殊的功能:r13,r14,r15

r13通常用作棧指標(sp),儲存當預處理器工作模式下的棧頂;

除了這16個資料暫存器,還有來年各個程式狀態暫存器:cpsr和spsr.處理器的當前工作模式決定了哪些暫存器是可見的.

當前程式狀態暫存器:

arm核使用cpsr來顯示和控制內部的操作.通用程式狀態暫存器的內部如下:

cpsr分為四個域,每個域有8位的寬度:flags,status,extension和control.control域包含處理器模式和狀態以及中斷遮蔽位.flags域包含condition flags.

處理器模式:

處理器模式決定了當前哪些暫存器是可用的以及cpsr本身的訪問許可權.處理器模式分為特權模式和非特權模式:特權模式對cpsr有完全的讀寫控制.而非特權模式

只能讀cpsr的control域但是仍可以讀寫condition flags.

一共有7中處理器模式:六種特權模式(abort,fiq,irq,svc,system和undefined)和一種非特權模式(user).

當試圖訪問記憶體失敗時處理器會進入abort模式,fiq和irq對應arm處理器的兩種中斷級別.svc是系統reset後進入的模式,也是os kernel工作的模式.

system模式是user模式的特殊版本,它有對cpsr的讀寫控制.undefined模式在處理器遇到未定以的指令或者不支援的操作時使用.

user模式在應用程式下使用.

除了user模式,其它模式都可以通過直接寫cpsr的模式位來改變處理器模式.當然,在異常或者中斷到來時,硬體會自動切換模式.下類異常和中斷會引起模式切換:

reset,irq,fiq,swi,data abort,prefetch abort和undefined instruction.

處理器模式:

需要注意的是:通過直接寫cpsr來改變模式的方法不會將cpsr拷貝到spsr.只有在異常或中斷發生時cpsr的值才會儲存.

當arm核上電時,處於svc特權模式.從特權模式開始是有用的:初始化**完全控制cpsr來建立其他模式的堆疊.

cpsr中的bit t是表明指令簇用的是arm指令集還是thumb指令集.t為1表示thumb指令集,t為0表示arm指令集.

arm指令集和thumb指令集的特性:

中斷遮蔽位:

中斷遮蔽位用來遮蔽處理器的特殊中斷請求.在arm核中有兩種級別的中斷請求:irq和fiq.

cpsr中的中斷遮蔽位是第7位和第6位(i和f),當i或f設為1時irq或fiq就被遮蔽了.

condtion flags:

condition flags可以被比較操作和帶s字尾的alu操作來更新.

條件執行:

條件執行控制指令是否被arm核執行.處理器會比較指令的條件屬性和cpsr中的condition flags,如果匹配,該指令執行;否則該指令被忽略.

流水線:

risc處理器用流水線機制來執行指令.arm流水線中的指令只有在完全通過執行階段才被處理.

上面這張圖標明了流水線的使用和程式計數器pc.在執行階段,pc總是指向該指令位址加上8位元組.也就是說pc總是指向當前指令的下下條指令.當用pc來計算

相對偏移量時這點是很重要的,並且它也是所有流水線的特徵.

異常 中斷和向量表

當異常或中斷發生時,處理器會將pc指向乙個特殊的記憶體位址.該位址所在的位址範圍稱為向量表.向量表的入口是跳轉指令,跳轉到專門處理某個異常或中斷的

子程式.

儲存器對映位址0x00000000是為向量表預留的.在某些處理器中向量表可以放在更高的位址,從0xffff0000開始.linux等作業系統可以利用這個特性.

當異常或者中斷發生時,處理器掛起正常的處理然後從向量表中載入指令.每個向量表的入口都包含指向特殊處理例程的跳轉指令.

reset向量是處理器上電後執行的第一條指令,這條指令跳轉到初始化**處.

undefined instruction向量是當處理器不能對指令解碼時使用的.

software interrupt向量執行swi指令時使用的.swi可以用來系統呼叫的實現.

prefetch abort向量發生在當沒有訪問許可權的條件下試圖獲取該位址的指令時,異常發生在解碼階段.

data abort向量與prefetch abort類似,只不過是訪問資料發生的異常.

interrupt request向量被外部硬體用來中斷處理器的正常執行.只有在cpsr的相應位為0時才能發生.

fast interrupt request向量與irq類似,是為要求更短的中斷響應時間的硬體保留的.只有在cpsr的相應位為0時才能發生.

ARM處理器模式

cpsr暫存器 arm v4的cpsr暫存器 和儲存它的spsr暫存器 中的位分配如下圖所示。處理器模式決定了哪些暫存器是活動的以及對cpsr訪問權。處理器模式要麼是特權模式,要麼是非特權模式。特權模式允許對cpsr的完全讀 寫訪問 與些相反,非特權模式只允許對cpsr的控制域進行讀訪問,但允許對條...

ARM處理器型號

arm公司擁有眾多cpu指令集,cpu架構,cpu系列.本文旨在介紹arm公司的cpu產品線.下圖展示了arm公司cpu的產品線 首先有必要了解一下arm公司的命名規則 arm的命名規則,大致分成三類 1.基於arm architecture版本的 指令集架構 命名規則 2.基於arm archit...

arm處理器模式和arm處理器狀態的區別

arm處理器狀態 arm微處理器的工作狀態一般有兩種,並可在兩種狀態之間切換 第一種為arm狀態,此時處理器執行32位的字對齊的arm指令 第二種為thumb狀態,此時處理器執行16位的 半字對齊的thumb指令。在程式的執行過程中,微處理器可以隨時在兩種工作狀態之間切換,並且,處理器工作狀態的轉變...