ARM的37個暫存器以及異常處理方法

2021-09-23 18:54:24 字數 2254 閱讀 4067

注意:除user(使用者模式)是normal(普通模式)外,其他6種都是privilege(特權模式)。 privilege中除sys模式外,其餘5種為異常模式。 各種模式的切換,可以是程式設計師通過**主動切換(通過寫cpsr暫存器);也可以是cpu在某些情況下自動切換。 各種模式下許可權和可以訪問的暫存器不同。

非特權模式:

特權模式:

arm共有37個暫存器,都是32位長度 37個暫存器中30個為「通用」型,1個固定用作pc,乙個固定用作cpsr,5個固定用作5種異常模式下的spsr。

1.條件標誌位

-n: negative result from alu

-z: zero result from alu

-c: alu operation carried out (進製/借位)

-v: alu operation overflowed (溢位)

* n=1時,說明運算的結果為負數,n=0時,說明運算的結果為正數或零。

* z=1時,說明運算的結果為0,z=0時,說明運算的結果為非0。

* c:

- 加法運算(包括cmp):當運算結果產生了進製時(無符號數溢位),c=1,否則為0。

- 減法運算(包括cmp):當運算結果產生了借位時(無符號數溢位),c=0,否則c=1。

- 對於包含移位操作的非加減指令操作時,c為移除值的最後一位。

- 對於其它的非加減指令,c的值通常不變。

* v:

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

- 對於其它的非加減法指令,v的值通常不變。

2.q位:

* 在arm v5及以上的版本的e系列處理器中,q標識位指示增強的dsp運算指令是否發生了溢位,在其它版本的處理器中,q未定義。

3.j位:

* 僅arm 5te/j 架構支援

* j=1時,處理器處於jazelle狀態

異常向量表

所有的cpu都有異常向量表,這是cpu設計時就設定好的,是硬體決定的。 當異常發生時,cpu會自動動作(pc跳轉到異常向量處處理異常,有時伴有一些輔助動作) 異常向量表是硬體向軟體提供的處理異常的支援。

***異常產生時

做好保護現場的工作:

(1)把cpsr儲存到spsr中,設定適當的cpsr(改變處理器的arm狀態、改變處理器進入相應的異常模式、(視情況)改變中斷禁止位禁止相應中斷)

(2)儲存返回位址到lr

(3)設定pc為相應的異常向量

實現跳轉。

***異常返回時

做好恢復現場工作:

(1)從spsr恢復cpsr

(2)從lr恢復pc

注意:這些操作必須在arm狀態執行

tips:

(1)異常向量表中除了fiq中斷都是4個位元組,所以只夠存放一段異常處理程式的**的首位址

(2)fiq中斷為快速中斷,其中乙個特殊的地方就體現在他的異常向量表(vector table)位址在最後乙個,所以它可以存放不止4個位元組,這樣的話fiq中斷可以不用只存放位址,而是把整個異常處理程式放進去,這樣就少跳轉了一次,加快了中斷相應速度。

ARM的37個暫存器以及異常處理方法

注意 除user 使用者模式 是normal 普通模式 外,其他6種都是privilege 特權模式 privilege中除sys模式外,其餘5種為異常模式。各種模式的切換,可以是程式設計師通過 主動切換 通過寫cpsr暫存器 也可以是cpu在某些情況下自動切換。各種模式下許可權和可以訪問的暫存器不...

ARM的37個暫存器詳解

arm共有37個暫存器,都是32位長度 37個暫存器中30個為 通用 型,1個固定用作pc,乙個固定用作cpsr,5個固定用作5種異常模式下的spsr。注意 system模式使用user模式暫存器。當arm從使用者模式 user 切換到快速中斷模式 fiq 暫存器r0 r7,r15是不變的,fiq的...

ARM程式設計 關於ARM暫存器的巨集定義

arm程式設計 關於arm暫存器的巨集定義 gf86530430 136次 2008 8 27 請問各位大蝦 在arm的標頭檔案裡,對與暫存器的定義為什麼不跟51的一樣?如下 define rutxh0 volatile unsigned char 0x1d00020 define rutxh1 v...