ARM微處理器的編程模型之:ARM寄存器組織
【例3.2】
使用SUBS指令從寄存器r1中減去常量1,然后把結(jié)果寫回到r1,其中CPSR的Z位將受到影響。
指令執(zhí)行前:
CPSR中Z=0
r1=0x00000001
SUBS r1,r1,#1
SUB指令執(zhí)行結(jié)束后:
r1=0x0
CPSR中Z=1
目的寄存器是r15的帶“位設(shè)置”的算術(shù)和邏輯運(yùn)算指令,也可以將SPSR的值復(fù)制到CPSR中,這種操作主要用于從異常中斷程序中返回。
用MSR指令向CPSR/SPSR寫進(jìn)新值。
目的寄存器位r15的MRC協(xié)處理器指令通過這條指令可以將協(xié)處理器產(chǎn)生的條件標(biāo)志位的值傳送到ARM處理器。
在中斷返回時(shí),使用LDR指令的變種指令可以將SPSR的值復(fù)制到CPSR中。
2.Q標(biāo)志位
在帶DSP指令擴(kuò)展的ARM v5及更高版本中,bit[27]被指定用于指示增強(qiáng)的DAP指令是否發(fā)生了溢出,因此也就被稱為Q標(biāo)志位。同樣,在SPSR中bit[27]也被稱為Q標(biāo)志位,用于在異常中斷發(fā)生時(shí)保存和恢復(fù)CPSR中的Q標(biāo)志位。
在ARM v5以前的版本及ARM v5的非E系列處理器中,Q標(biāo)志位沒有被定義。屬于待擴(kuò)展的位。
3.控制位
CPSR的低8位(I、F、T及M[4∶0])統(tǒng)稱為控制位。當(dāng)異常發(fā)生時(shí),這些位的值將發(fā)生相應(yīng)的變化。另外,如果在特權(quán)模式下,也可以通過軟件編程來修改這些位的值。
① 中斷禁止位
I=1,IRQ被禁止。
F=1,F(xiàn)IQ被禁止。
② 狀態(tài)控制位
T位是處理器的狀態(tài)控制位。
T=0,處理器處于ARM狀態(tài)(即正在執(zhí)行32位的ARM指令)。
T=1,處理器處于Thumb狀態(tài)(即正在執(zhí)行16位的Thumb指令)。
當(dāng)然,T位只有在T系列的ARM處理器上才有效,在非T系列的ARM版本中,T位將始終為0。
③ 模式控制位
M[4∶0]作為位模式控制位,這些位的組合確定了處理器處于哪種狀態(tài)。表3.3列出了其具體含義。
只有表中列出的組合是有效的,其他組合無效。
表3.3 狀態(tài)控制位M[4∶0]
M[4∶0] | 處理器模式 | 可以訪問的寄存器 |
0b10000 | User | PC,r14~r0,CPSR |
0b10001 | FIQ | PC,r14_fiq~r8_fiq,r7~r0,CPSR,SPSR_fiq |
0b10010 | IRQ | PC,r14_irq~r13_irq,r12~r0,CPSR,SPSR_irq |
0b10011 | Supervisor | PC,r14_svc~r13_svc,r12~r0,CPSR,SPSR_svc |
0b10111 | Abort | PC,r14_abt~r13_abt,r12~r0,CPSR,SPSR_abt |
0b11011 | Undefined | PC,r14_und~r13_und,r12~r0,CPSR,SPSR_und |
0b11111 | System | PC,r14~r0,CPSR(ARM v4及更高版本) |
注意 | 由于用戶模式(User)和系統(tǒng)模式(System)是非異常模式,所以沒有單獨(dú)的SPSR保存程序狀態(tài)字。在用戶模式或系統(tǒng)模式下,讀SPSR將返回一個(gè)不可預(yù)知的值,而寫SPSR將被忽略。 |
評論