詳解ARM9的CPSR暫存器

2021-08-27 07:05:19 字數 1352 閱讀 1372

最近在學習嵌入式底層系統開發,在寫啟動**時要設定各個模式的sp,需要調整cpu的工作模式,部分**如下:

.equ disable_irq, 0x80

.equ disable_fiq, 0x40

.equ sys_mod, 0x1f

.equ irq_mod, 0x12

.equ fiq_mod, 0x11

.equ svc_mod, 0x13

.equ abt_mod, 0x17

.equ und_mod, 0x1b

msr cpsr_c,#(disable_irq|disable_fiq|svc_mod)

ldr sp,=_svc_stack

msr cpsr_c,#(disable_irq|disable_fiq|irq_mod)

ldr sp,=_irq_stack

msr cpsr_c,#(disable_irq|disable_fiq|fiq_mod)

ldr sp,=_fiq_stack

msr cpsr_c,#(disable_irq|disable_fiq|abt_mod)

ldr sp,=_abt_stack

msr cpsr_c,#(disable_irq|disable_fiq|und_mod)

ldr sp,=_und_stack

msr cpsr_c,#(disable_irq|disable_fiq|sys_mod)

ldr sp,=_sys_stack

**中用到了cpsr_c,那麼究竟cpsr_c與cpsr是什麼關係?arm9的每種工作模式除r0~r15共16個暫存器外,還有第17個暫存器cpsr(current program status register),叫做當前程式狀態暫存器,cpsr中一些位被用於標識各種狀態,一些位被用於標識當前出於什麼工作模式。

cpsr有4個8位區域:標誌域(f)、狀態域(s)、擴充套件域(x)、控制域(c)。

在arm 處理器中,只有msr 指令可以直接設定狀態暫存器cpsr或spsr。指令格式如下:

msr psr_fields,#immed_8r(8位立即數)

msr psr_fields,rm

其中: psr 指cpsr 或spsr

fields 指定傳送的區域。fields 可以是以下的一種或多種(字母必須為小寫):

基於ARM9程式狀態暫存器CPSR

定義 程式狀態暫存器 功能 反映資料運算狀態,控制系統模式等 特點 程式狀態暫存器不屬於通用暫存器 關於cpsr的訪問,arm專門為其設立了兩條指令 mrs cpsr到通用暫存器傳遞資料指令 msr 通用暫存器到cprs傳遞資料指令 1 msr 通用暫存器 cpsr 格式 msr 條件 cpsr s...

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

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

arm9的操作模式,暫存器,定址方式

a rm有7種工作模式 名稱 簡稱簡介 userusr 正常使用者程式執行的模式 linux 下使用者程式就是在這一模式執行的。fiqf iq快速中斷模式 irqi rq普通中斷模式 supervisorsvc 給作業系統準備的保護模式,許可權很高的一種模式,linux 的核心就是執行在此模式 ab...