ARM之工作模式

2022-07-16 00:51:07 字數 3081 閱讀 9791

前言

arm工作模式

arm工作模式根據功能不同,可分為7類:

果cpu處於這種模式下,很多指令將不能夠執行,因此作業系統的資源得以保護。 

arm工作模式也可分為3大類:

為什麼可以把7類功能不同的模式分為3大類呢?

這是由於異常模式同使用者模式和系統模式有乙個不一樣的地方,那就是,當cpu產生中斷或異常而自動切換到相應

異常模式後,cpu會根據產生中斷或異常的原因執行相應得中斷或異常向量。這些向量的位置是cpu事先定義好的,目

前有兩種選擇: 

(1)   處於記憶體低位址0x00000000~0x0000001c,這種情況被稱之為low vector 

(2)   處於記憶體高低之0xffff0000~0xffff001c,這種情況被稱之為high vector。    

一般的作業系統會在這些異常向量位址處放置一條跳轉指令。至於到底是使用low vector,還是使用high vector,由

cpu自己決定,arm規範不做任何限制。

程式可以通過讀取cpsr的mode域來判斷cpu當前的執行模式。 

如何看待arm的各種模式?要回答這個問題,我們要看不同模式下,有哪些東西不同。歸納來說,有如下兩個方面的不同: 

(1) 物理暫存器不同 

(2) 許可權不同 

如果將user mode作為參考模式,那麼: 

(1) system mode:暫存器一樣,僅僅是許可權不同 

(2) 其他exception mode:暫存器不一樣,許可權也不一樣 

從許可權的角度看,system mode和其他exception mode(fiq,irq,supervisor,abort,undefined)是一樣的,

他們之間的區別僅僅是暫存器方面有一些差別。 

從暫存器角度看,我們可以將cpsr中的mode域看作乙個類似於片選的東西,當其值不一樣,所選中的暫存器也不一樣。

雖然指令中的暫存器是一樣的,但是經過mode域的片選後,實際就指向不同的物理暫存器了。 

必須要特別注意,system模式和user模式除了許可權不一樣外,其他都一樣,這樣可以讓作業系統自由訪問16個暫存器

(包括狀態暫存器)。 

那麼,模式切換是如何進行的呢?

(1) 執行swi或reset指令。如果在user模式下執行swi指令,cpu就進入supervisor模式。當然,在其它模式下執行swi

指令,也會進入supervisor模式,補過一般作業系統不會這麼做。因為除了user模式是非特權模式下,其他模式都屬於特權模式

(這說明arm只有兩種執行態,不想dummy的x86,定義了4種執行態)。執行swi一般是為了訪問系統資源,在特權模式下可

以訪問所有的系統資源。swi指令一般用來用來為作業系統提供api介面。 

(2) 有外部中斷發生。如果發生了外部中斷,cpu就會進入irq或fiq模式,具體是哪種模式,得看外部的中斷源是接到cpu

的那個pin。 

(3)  cpu執行過程中產生異常。最典型的異常是由於mmu保護所引起的記憶體訪問異常,此時cpu會切換到abort模式。如果

是無效指令,則會進入undefined模式。 

從上面我們發現,有一種模式是cpu無法自動進入的,這種模式就是system模式。要進入system模式必須由程式設計師自己編寫指

令來實現。其實很簡單,在任何特權模式下改變cpsr的mode域為system模式所對應得數字即可。進入system模式一般是為了利

用「system 模式」和「user 模式」下的暫存器是一樣的。因此一般作業系統在通過swi進入supervisor模式後,做一些簡單處理後,

就進入system模式。 

另外,在任何特權模式下,都可以通過修改cpsr的mode域而進入其他模式。不過需要注意的是,由於修改的cpsr是該模式下的

影子cpsr,因此並不是實際的cpsr,所以一般的做法是修改影子cpsr,然後執行乙個movs指令來恢復執行到某個斷點並切換到新模式。

儲存器格式(字對齊)

arm體系結構將儲存器看做是從零位址開始的位元組的線性組合。從零位元組到三位元組放置第乙個儲存的字(32位)資料,從第四個字

節到第七個位元組放置第二個儲存的字資料,一次排列。作為32位的微處理器,arm體系結構所支援的最大定址空間為4gb。

儲存器格式:

指令長度:

arm微處理器的指令長度是32位的,也可以為16位(thumb狀態下)。arm微處理器中支援位元組(8位),半字(16位),字(32位)

三種資料型別,其中,字需要4位元組對齊,半字需要2位元組對齊。

注:所謂的指令長度是一條完整的指令的長度,而不是單純的mov這3個字母長度。

arm體系的cpu有兩種工作狀態

1、arm狀態:處理器執行32位的字對齊的arm指令;

2、thumb狀態:處理器執行16位的、半字對齊的thumb指令;

在程式執行的過程中,可以在兩種狀態之間進行相應的轉換。處理器工作狀態的轉變並不影響處理器的工作模式和相應暫存器中的

內容。cpu上電處於arm狀態。

暫存器

arm有31個通用的32位暫存器,6個程式狀態暫存器,共分為7組,有些暫存器是所有工作模式共用的,還有一些暫存器專屬於每

一種工作模式:

r13——棧指標暫存器,用於儲存堆疊指標;

r14——程式連線暫存器,當執行bl子程式呼叫指令時,r14中得到r15的備份,而當發生中斷或異常時,r14儲存r15的返回值;

r15——程式計數器;

快速中斷模式有7個備份暫存器r8—r14,這使得進入快速中斷模式執行很大部分程式時,甚至不需要儲存任何暫存器;

其它特權模式都含有兩個獨立的暫存器副本r13、r14,這樣可以令每個模式都擁有自己的堆疊指標和連線暫存器。

當前程式狀態暫存器(cpsr)

cpsr中各位意義如下:

t位:1——cpu處於thumb狀態, 0——cpu處於arm狀態;

i、f(中斷禁止位): 1——禁止中斷, 0——中斷使能;

工作模式位:可以改變這些位,進行模式切換。

ARM工作模式

從程式設計的角度看,arm微處理器的工作狀態有兩種,並可在兩種狀態之間切換 1 arm狀態,此時處理器執行32位的字對齊的arm指令 2 thumb狀態,此時處理器執行16位的,半字對齊的thumb指令 為了相容老晶元 在程式執行的過程中,可以在兩種狀態之間進行相應的轉換。處理器工作狀態的轉變並不影...

arm工作模式

從程式設計的角度看,arm微處理器的工作狀態有兩種,並可在兩種狀態之間切換 1 arm狀態,此時處理器執行32位的字對齊的arm指令 2 thumb狀態,此時處理器執行16位的,半字對齊的thumb指令 為了相容老晶元 在程式執行的過程中,可以在兩種狀態之間進行相應的轉換。處理器工作狀態的轉變並不影...

arm工作模式

一 arm工作模式 arm微處理器支援7種工作模式,分別為 1 使用者模式 usr 用於正常執行程式 2 快速中斷模式 fiq 用於高速資料傳輸 3 外部中斷模式 irq 用於通常的中斷處理 4 管理模式 svc 作業系統使用的保護模式 高許可權 復位和軟體中斷進入 5 資料訪問終止模式 abt 當...