<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 協(xié)處理器及其他指令之:狀態(tài)寄存器訪(fǎng)問(wèn)指令

協(xié)處理器及其他指令之:狀態(tài)寄存器訪(fǎng)問(wèn)指令

作者: 時(shí)間:2013-09-13 來(lái)源:網(wǎng)絡(luò ) 收藏

本文引用地址:http://dyxdggzs.com/article/257051.htm

9.2

指令集提供了兩條指令,可直接控制程序狀態(tài)寄存器psr。MRS指令用于把cpsr或者spsr的值傳送到一個(gè)寄存器;MSR與之相反,它將一個(gè)寄存器的內容傳送到cpsr或者spsr。這兩條指令結合,可用于對cpsr和spsr進(jìn)行讀/寫(xiě)操作。

表9.2總結了。

表9.2

助記符

含義

操作

MRS

將程序狀態(tài)字寄存器的值送到通用寄存器

Rd=spr

MSR

將通用寄存器的值送到程序狀態(tài)字寄存器

Psr[field]=Rm

MSR

將一個(gè)立即數送到程序狀態(tài)字

Psr[field]=immediate

當需要保存或修改當前模式下CISR或SPSR的內容時(shí),首先必須將這些內容傳送到通用寄存器中,對選擇的位進(jìn)行修改,然后將數據回寫(xiě)到狀態(tài)寄存器。對于和Thumb的狀態(tài)切換也是如此,程序不能通過(guò)直接改寫(xiě)CPSR中的T控制位直接將程序狀態(tài)切換到Thumb狀態(tài),必須通過(guò)BX等指令完成程序狀態(tài)的切換。

9.2.1程序狀態(tài)字內容送通用寄存器指令MRS

1.指令編碼格式

讀狀態(tài)寄存器指令MRS。在寄存器中,只有MRS指令可以將狀態(tài)寄存器CPSR或SPSR讀出到通用寄存器中。將程序狀態(tài)字內容讀取到通用寄存器中后就可以對其進(jìn)行計算、修改等操作。

指令的編碼格式如圖9.6所示。

圖9.6MRS指令編碼格式

2.指令的語(yǔ)法格式

MRS{cond>}Rd>,CPSR

MRS{cond>}Rd>,SPSR

①cond>

為指令編碼中的條件域。它指示指令在什么條件下執行。當cond>忽略時(shí),指令為無(wú)條件執行(cond=AL(Alway))。

②Rd>

確定指令的目標寄存器。如果r15被用作目標寄存器,指令的執行結果不可預知。

3.指令操作的偽代碼

指令操作的偽代碼如下面程序段所示。

IfConditionPassed{cond}then

IfR==1then

Rd=SPSR

Else

Rd=CPSR

4.指令的使用

MRS指令注意用于以下3種場(chǎng)合:

·當需要保存或修改當前模式下CPSR或SPSR的內容時(shí),首先必須將這些內容傳送到通用寄存器中,對選擇的位進(jìn)行修改,然后將數據回寫(xiě)到狀態(tài)寄存器。

·當異常中斷允許嵌套時(shí),需要在進(jìn)入異常中斷之后,嵌套中斷發(fā)生之前保存當前處理器模式對應的SPSR。這時(shí)需要先通過(guò)MRS指令讀出SPSR的值,再用其他指令(如壓棧指令)將SPSR值保存起來(lái)。

·在進(jìn)程切換時(shí)也需要保存當前狀態(tài)寄存器的值。

注意

在用戶(hù)模式下對CPSR[23∶0]進(jìn)行任何修改都是無(wú)效的。另外,盡量避免在用戶(hù)模式或系統模式下訪(fǎng)問(wèn)SPSR,因為在這種模式下沒(méi)有SPSR,如果執行此操作,指令的執行結果不可預知。

5.指令舉例

(1)將CPSR狀態(tài)寄存器讀取,保存到r1中。

MRSr1,CPSR

(2)將SPSR狀態(tài)寄存器讀取,保存到r2中。

MRSr2,SPSR

(3)MSR指令讀取CPSR,用來(lái)判斷ALU的狀態(tài)標志或IRQ/FIQ中斷是否允許等;在異常處理程序中,讀SPSR可知道進(jìn)入異常前的處理器狀態(tài)等。MRS與MSR配合使用,實(shí)現CPSR或SPSR寄存器的讀-修改-寫(xiě)操作,可用來(lái)進(jìn)行處理器模式的切換或禁止/使能IRQ/FIQ中斷等設置。另外,進(jìn)行切換或允許異常中斷嵌套時(shí),也需要使用MRS指令讀取SPSR狀態(tài)值保存起來(lái)。

下面的例子使能IRQ中斷。

ENABLE_IRQ

MRSr0,CPSR

BICr0,r0,#0x80

MSRCPSR_c,r0

MOVPC,LR

下面的例子禁止IRQ中斷。

DISABLE_IRQ

MRSr0,CPSR

ORRr0,r0,#0x80

MSRCPSR_c,r0

MOVPC,LR


上一頁(yè) 1 2 3 下一頁(yè)

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>