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

          新聞中心

          詳解ARM9的CPSR寄存器

          作者: 時(shí)間:2016-11-22 來源:網(wǎng)絡(luò) 收藏
          最近在學(xué)習(xí)嵌入式底層系統(tǒng)開發(fā),在寫啟動(dòng)代碼時(shí)要設(shè)置各個(gè)模式的SP,需要調(diào)整CPU的工作模式,部分代碼如下:
          [plain]view plaincopy
          print?
          1. .equDISABLE_IRQ,0x80
          2. .equDISABLE_FIQ,0x40
          3. .equSYS_MOD,0x1f
          4. .equIRQ_MOD,0x12
          5. .equFIQ_MOD,0x11
          6. .equSVC_MOD,0x13
          7. .equABT_MOD,0x17
          8. .equUND_MOD,0x1b
          9. msrcpsr_c,#(DISABLE_IRQ|DISABLE_FIQ|SVC_MOD)
          10. ldrsp,=_SVC_STACK
          11. msrcpsr_c,#(DISABLE_IRQ|DISABLE_FIQ|IRQ_MOD)
          12. ldrsp,=_IRQ_STACK
          13. msrcpsr_c,#(DISABLE_IRQ|DISABLE_FIQ|FIQ_MOD)
          14. ldrsp,=_FIQ_STACK
          15. msrcpsr_c,#(DISABLE_IRQ|DISABLE_FIQ|ABT_MOD)
          16. ldrsp,=_ABT_STACK
          17. msrcpsr_c,#(DISABLE_IRQ|DISABLE_FIQ|UND_MOD)
          18. ldrsp,=_UND_STACK
          19. msrcpsr_c,#(DISABLE_IRQ|DISABLE_FIQ|SYS_MOD)
          20. ldrsp,=_SYS_STACK
          代碼中用到了cpsr_c,那么究竟cpsr_c與cpsr是什么關(guān)系?

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

          ARM9的每種工作模式除R0~R15共16個(gè)寄存器外,還有第17個(gè)寄存器CPSR(Current Program Status Register),叫做當(dāng)前程序狀態(tài)寄存器,CPSR中一些位被用于標(biāo)識各種狀態(tài),一些位被用于標(biāo)識當(dāng)前出于什么工作模式。CPSR有4個(gè)8位區(qū)域:標(biāo)志域(F)、狀態(tài)域(S)、擴(kuò)展域(X)、控制域(C)。

          在ARM 處理器中,只有MSR 指令可以直接設(shè)置狀態(tài)寄存器CPSR或SPSR。指令格式如下:
          MSR{cond} psr_fields,#immed_8r(8位立即數(shù))
          MSR{cond} psr_fields,Rm
          其中: psr 指CPSR 或SPSR
          fields 指定傳送的區(qū)域。Fields 可以是以下的一種或多種(字母必須為小寫):

          • c 控制域屏蔽字節(jié)(psr[7…0])
          • x 擴(kuò)展域屏蔽字節(jié)(psr[27…8])
          • s 狀態(tài)域屏蔽字節(jié)(psr[31.…28])


          關(guān)鍵詞: ARM9CPSR寄存

          評論


          技術(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); })();