<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

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

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

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

          本文引用地址:http://www.ex-cimer.com/article/257051.htm

          9.2

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

          表9.2總結(jié)了

          表9.2

          助記符

          含義

          操作

          MRS

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

          Rd=spr

          MSR

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

          Psr[field]=Rm

          MSR

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

          Psr[field]=immediate

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

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

          1.指令編碼格式

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

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

          圖9.6MRS指令編碼格式

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

          MRS{cond>}Rd>,CPSR

          MRS{cond>}Rd>,SPSR

          ①cond>

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

          ②Rd>

          確定指令的目標(biāo)寄存器。如果r15被用作目標(biāo)寄存器,指令的執(zhí)行結(jié)果不可預(yù)知。

          3.指令操作的偽代碼

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

          IfConditionPassed{cond}then

          IfR==1then

          Rd=SPSR

          Else

          Rd=CPSR

          4.指令的使用

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

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

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

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

          注意

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

          5.指令舉例

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

          MRSr1,CPSR

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

          MRSr2,SPSR

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

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();