ARM的異常與CPSR

2021-07-28 04:15:31 字數 2084 閱讀 9293

【1】異常處理流程

異常向量表

當異常產生時, arm core:

拷貝 cpsr 到 spsr_

設定適當的 cpsr 位:                                 

改變處理器狀態進入 arm 態

改變處理器模式進入相應的異常模式

設定中斷禁止位禁止相應中斷 (如果需要)

儲存返回位址到 lr_

設定 pc 為相應的異常向量

返回時, 異常處理需要:

從 spsr_恢復cpsr

從lr_恢復pc

note:這些操作只能在 arm 態執行.

【2】為什麼fiq的響應速度比irq快

1. fiqs有高於irqs的優先順序

2. fiq 向量位於異常向量表的最末. 異常處理程式可從異常量處連續執行

3. fiq 模式有5個額外的私有暫存器 (r8-r12) 中斷處理必須保護其使用的非私有暫存器

【3】程式狀態暫存器(cpsr)

條件位:

n[31]: 負標記位,當alu運算結果為負數,那麼n = 1, 否則n = 0

z[30]: 0標記位,當alu運算結果為0,則z = 1, 否則z = 0

c[29]: 進製標記

當進行加法運算時:

產生進製(兩個32位的數相加變成了33位的數)時:c = 1, 否則c = 0

0xffffffff + 0x1

當進行減法運算時:

產生借位時:c = 0, 否則c = 1

2 - 3

注意:對於非加減運算,不會影響c位

v[28]: 溢位標記(符號位溢位)

加法運算符號位溢位(0->1):

次高位進製,v = 1, 否則v = 0

減法運算符號位溢位(1->0):

次高位借位,v = 1, 否則v = 0

中斷禁止位

i[7]:  i  = 1: 禁止  irq.  i = 0 使能irq

f[6]:  f  = 1: 禁止  fiq, f = 0 使能fiq

處理器的狀態位t[5]:

t = 0; 處理器處於 arm 狀態

t = 1; 處理器處於 thumb 狀態

處理器的模式位m[4:0]:

10000  user mode;    10001 fiq mode;           10011 svc mode;

10111  abort mode;   11011 undfined mode;      11111 system mode;  

10110  monitor mode; 10010 irq

【4】練習

1. 切換當前模式為irq模式

int a = cpsr           //讀

a = a & (~(0x1f<<0));

a = a | (0x12<<0);//改

cpsr = a               //寫

2. 禁止irq,進入arm狀態

int a = cpsr           //讀

a = a | (0x1<<7) & (~(0x1<<5));

cpsr = a               //寫

3. 禁止fiq,使能irq,進入arm狀態,切換當前模式為irq模式

int a = cpsr           //讀

a = a | (0x1<<6) & (~(0x1<<7)) & (~(0x1<<5));

a = a & (~(0x1f<<0)) | (0x12<<0);

cpsr = a               //寫

【5】大小端

判讀:1, 先寫4個位元組的資料到某一記憶體下

2, 從這個位址讀乙個位元組的資料,如果是高位元組表示大端,如果是低位址表示小端

【6】流水線

無論多少級流水線,pc永遠只想正在取指的那條指令的位址

ARM彙編指令 CPSR訪問指令(mrs msr)

cpsr暫存器比較特殊,需要專門的指令訪問,這就是mrs和msr。mrs用來讀psr cpsr或者spsr msr用來寫psr note cpsr和spsr的區別和聯絡 cpsr是程式狀態暫存器,整個soc中只有1個 而spsr有5個,分別在5種異常模式下,作用是當從普通模式進入異常模式時,用來儲存...

cpsr與cpsr c的區別

在學習到中斷部分時,需要調整cpu的工作模式,常常見到的語句是 msr cpsr c,0xd2 進入中斷模式 那麼究竟cpsr c與cpsr是什麼關係?後來查了下,在arm 處理器中.只有msr 指令可以直接設定狀態暫存器cpsr或spsr.指令格式如下 msr psr fields,immed 8...

ARM中的程式狀態暫存器(CPSR)

arm中的程式狀態暫存器 cpsr 2006.11.1 hokepoly 閱讀 8379 3130 292827 8765 4321 0nzc v保留if tm4m3m2 m1m0 nnegative less than iirq disable zzero ffiq disable ccarry ...