基於ARM9程式狀態暫存器CPSR

2021-07-31 11:28:10 字數 1263 閱讀 4822

定義:程式狀態暫存器;

功能:反映資料運算狀態,控制系統模式等;

特點:程式狀態暫存器不屬於通用暫存器;

關於cpsr的訪問,arm專門為其設立了兩條指令:

mrs:cpsr到通用暫存器傳遞資料指令;

msr:通用暫存器到cprs傳遞資料指令;

(1)msr 通用暫存器→cpsr

格式:msr{條件} cpsr | spsr_field,暫存器rm或立即數

功能:恢復或改變cpsr的值。

cprs | sprs:尖括號內只能是cprs或sprs指令,這取決於當預處理器工作模式;

field域:用於設定cpsr中需要操作的位;(下面詳細介紹)

cpsr位域:

field域的表示:

[31:24]為條件標誌位域,用f表示

[23:16]為狀態位域,用s表示

[15:8]為擴充套件位域,用x表示

[7:0]為控制位域,用c表示

表示式舉栗:

msr cpsr,r0 ;傳送r0的內容到cpsr

msr spsr,r0 ;傳送r0的內容到spsr

msr cpsr_c,r0 ;傳送r0的內容到暫存器cpsr,但是僅修改cpsr的控制位域;

(2)mrs cpsr→通用暫存器;

格式:mrs{條件} 暫存器rd,cpsr | spsr

功能:讀出cpsr的值;

應用的兩種情況:

1. 異常處理或程序切換時,將cpsr的值儲存起來

2. 改變cpsr的值的時,改變後在寫回資料cpsr

舉例:

mrs r0,cpsr

mrs r0,spsr

mrs和msr的配合使用可以對cpsr進行修改,修改步驟共分3步:

1. 讀取cpsr的值

2. 修改

3. 寫入cpsr的值

例程(svc模式下):使能中斷irq

mrs r1,cpsr ;讀

bic r1,r1,0x80 ;改,使能位7

msr cpsr_c,r1 ;寫

使用者模式下可以讀取cpsr,但是只能改變標識位f,只能在特權模式下修改狀態暫存器;

詳解ARM9的CPSR暫存器

最近在學習嵌入式底層系統開發,在寫啟動 時要設定各個模式的sp,需要調整cpu的工作模式,部分 如下 equ disable irq,0x80 equ disable fiq,0x40 equ sys mod,0x1f equ irq mod,0x12 equ fiq mod,0x11 equ sv...

ARM程式狀態暫存器

分類 linux arm體系結構包含1個當前程式狀態暫存器 cpsr 和5個各份的程式狀態暫存器 spsrs 使用msr和mrs指令來設定和讀取這些暫存器。當前程式狀態暫存器 cpsr 持有關於當預處理器狀態的資訊。其他5個各份的程式狀態暫存器 spsr 每個特權模式都有乙個,持有完成在這個模式下的...

ARM9暫存器 ARM thumb 過程呼叫標準

根據 arm thumb 過程呼叫標準 1,r0 r3 用作傳入函式引數,傳出函式返回值。在子程式呼叫之間,可以將 r0 r3 用於任何用途。被呼叫函式在返回之前不必恢復 r0 r3。如果呼叫函式需要再次使用 r0 r3 的內容,則它必須保留這些內容。2,r4 r11 被用來存放函式的區域性變數。如...