ARM寄存器的7種工作模式和幾種尋址方式
CPSR[5:0]
10000 user
10001 FIQ
10010 IRQ
10011 SVC
10111 中止
11011 未定義
11111 系統(tǒng)
本文引用地址:http://m.butianyuan.cn/article/201611/317765.htm用這兩個(gè)指令讀寫CPRS的值
msrmrs
如:
MRS R1,CPSR ; 將CPSR狀態(tài)寄存器讀取,保存到R1中
MRS R2,SPSR ; 將SPSR狀態(tài)寄存器讀取,保存到R2中
MSR R1,CPSR ; 將R1狀態(tài)寄存器讀取,保存到CPSR中
MSR R2,SPSR ; 將R2狀態(tài)寄存器讀取,保存到SPSR中
ARM微處理器支持7種工作模式,分別為:
1、用戶模式(Usr)
用于正常執(zhí)行程序
2、快速中斷模式(FIQ)
用于高速數(shù)據(jù)傳輸
3、外部中斷模式(IRQ)
用于通常的中斷處理
4. 管理模式(svc)
操作系統(tǒng)使用的保護(hù)模式
5. 數(shù)據(jù)訪問終止模式(abt)
當(dāng)數(shù)據(jù)或指令預(yù)取終止時(shí)進(jìn)入該模式,可用于虛擬存儲(chǔ)及
存儲(chǔ)保護(hù)。
6. 系統(tǒng)模式(sys)
運(yùn)行具有特權(quán)的操作系統(tǒng)任務(wù)。
7. 未定義指令中止模式(und)
當(dāng)未定義的指令執(zhí)行時(shí)進(jìn)入該模式,可用于支持硬件
ARM微處理器的運(yùn)行模式可以通過(guò)軟件改
變,也可以通過(guò)外部中斷或異常處理改變。
應(yīng)用程序運(yùn)行在用戶模式下,當(dāng)處理器運(yùn)行
在用戶模式下時(shí),某些被保護(hù)的系統(tǒng)資源是
不能被訪問的。
除用戶模式以外,其余的所有6種模式稱之為
非用戶模式,或特權(quán)模式(Privileged
Modes);其中除去用戶模式和系統(tǒng)模式以
外的5種又稱為異常模式(Exception
Modes),常用于處理中斷或異常,以及需
要訪問受保護(hù)的系統(tǒng)資源等情況。
所謂尋址方式就是處理器根據(jù)指令中給出的地址信息來(lái)尋找物理地址的方式。
立即尋址
立即尋址也叫立即數(shù)尋址,這是一種特殊的尋址方式,操
作數(shù)本身就在指令中給出,只要取出指令也就取到了操作
數(shù)。這個(gè)操作數(shù)被稱為立即數(shù),對(duì)應(yīng)的尋址方式也就叫做
立即尋址。例如以下指令:
ADD R0,R0,#1 ;R0←R0+1
ADD R0,R0,#0x3f ;R0←R0+0x3f
在以上兩條指令中,第二個(gè)源操作數(shù)即為立即數(shù),要求以
“#”為前綴,對(duì)于以十六進(jìn)制表示的立即數(shù),還要求在
“#”后加上“0x”或“&”。
寄存器尋址
寄存器尋址就是利用寄存器中的數(shù)值作為操作
數(shù),這種尋址方式是各類微處理器經(jīng)常采用的
一種方式,也是一種執(zhí)行效率較高的尋址方
式。
ADD R0,R1,R2 ;R0←R1+R2
該指令的執(zhí)行效果是將寄存器R1和R2的內(nèi)容
相加,其結(jié)果存放在寄存器R0中。
寄存器間接尋址
寄存器間接尋址就是以寄存器中的值作為操作數(shù)的地
址,而操作數(shù)本身存放在存儲(chǔ)器中。例如以下指令:
ADD R0,R1,[R2] ;R0←R1+[R2]
LDR R0,[R1] ;R0←[R1]
在第一條指令中,以寄存器R2的值作為操作數(shù)的地
址,在存儲(chǔ)器中取得一個(gè)操作數(shù)后與R1相加,結(jié)果存
入寄存器R0中。第二條指令將以R1的值為地址的存儲(chǔ)
器中的數(shù)據(jù)傳送到R0中。
基址變址尋址
基址變址尋址就是將寄存器(該寄存器一般稱作基址寄存器)
的內(nèi)容與指令中給出的地址偏移量相加,從而得到一個(gè)操作數(shù)
的有效地址:
LDR R0,[R1,#4] ;R0←[R1+4]
LDR R0,[R1,#4]! ;R0←[R1+4]、R1←R1+4
LDR R0,[R1] ,#4 ;R0←[R1]、R1←R1+4
LDR R0,[R1,R2] ;R0←[R1+R2]
多寄存器尋址
采用多寄存器尋址方式,一條指令可以完成多個(gè)寄存器值的傳
送。這尋址方式可以用一條指令完成傳送最多16個(gè)通用寄存器
的值。以下指令:
LDMIA R0,{R1,R2,R3,R4}
;R1←[R0]
;R2←[R0+4]
;R3←[R0+8]
;R4←[R0+12]
該指令的后綴IA表示在每次執(zhí)行完加載/存儲(chǔ)操作后,R0按字長(zhǎng)
度增加,因此,指令可將連續(xù)存儲(chǔ)單元的值傳送到R1~R4。
相對(duì)尋址
與基址變址尋址方式相類似,相對(duì)尋址以程序計(jì)數(shù)器PC的當(dāng)
前值為基地址,指令中的地址標(biāo)號(hào)作為偏移量,將兩者相加
之后得到操作數(shù)的有效地址。以下程序段完成子程序的調(diào)用
和返回,跳轉(zhuǎn)指令BL采用了相對(duì)尋址方式:
BL NEXT ;跳轉(zhuǎn)到子程序NEXT處執(zhí)行
……
NEXT
……
MOV PC,LR ;從子程序返回
堆棧尋址
堆棧是一種數(shù)據(jù)結(jié)構(gòu),按先進(jìn)后出(First In
Last Out,F(xiàn)ILO)的方式工作,使用一個(gè)稱作堆
棧指針的專用寄存器指示當(dāng)前的操作位置,堆棧
指針總是指向棧頂。
遞增堆棧:向高地址方向生長(zhǎng)
遞減堆棧:向低地址方向生長(zhǎng)
滿堆棧:堆棧指針指向最后壓入堆棧的有效數(shù)據(jù)項(xiàng)
空堆棧:堆棧指針指向下一個(gè)要放入數(shù)據(jù)的空位置
評(píng)論