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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > ARM寄存器的7種工作模式和幾種尋址方式

          ARM寄存器的7種工作模式和幾種尋址方式

          作者: 時間:2016-11-09 來源:網(wǎng)絡(luò) 收藏
          ARM寄存器的7種工作模式
          CPSR[5:0]
          10000 user
          10001 FIQ
          10010 IRQ
          10011 SVC
          10111 中止
          11011 未定義

          11111 系統(tǒng)

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

          用這兩個指令讀寫CPRS的值

          msr

          mrs

          如:

          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)使用的保護模式
          5. 數(shù)據(jù)訪問終止模式(abt)
          當(dāng)數(shù)據(jù)或指令預(yù)取終止時進入該模式,可用于虛擬存儲及
          存儲保護。
          6. 系統(tǒng)模式(sys)
          運行具有特權(quán)的操作系統(tǒng)任務(wù)。
          7. 未定義指令中止模式(und)
          當(dāng)未定義的指令執(zhí)行時進入該模式,可用于支持硬件

          ARM微處理器的運行模式可以通過軟件改
          變,也可以通過外部中斷或異常處理改變。
          應(yīng)用程序運行在用戶模式下,當(dāng)處理器運行
          在用戶模式下時,某些被保護的系統(tǒng)資源是
          不能被訪問的。

          除用戶模式以外,其余的所有6種模式稱之為
          非用戶模式,或特權(quán)模式(Privileged
          Modes);其中除去用戶模式和系統(tǒng)模式以
          外的5種又稱為異常模式(Exception
          Modes),常用于處理中斷或異常,以及需

          要訪問受保護的系統(tǒng)資源等情況。

          所謂尋址方式就是處理器根據(jù)指令中給出的地址信息來尋找物理地址的方式。

          立即尋址
          立即尋址也叫立即數(shù)尋址,這是一種特殊的尋址方式,操
          作數(shù)本身就在指令中給出,只要取出指令也就取到了操作
          數(shù)。這個操作數(shù)被稱為立即數(shù),對應(yīng)的尋址方式也就叫做
          立即尋址。例如以下指令:
          ADD R0,R0,#1 ;R0←R0+1
          ADD R0,R0,#0x3f ;R0←R0+0x3f
          在以上兩條指令中,第二個源操作數(shù)即為立即數(shù),要求以
          “#”為前綴,對于以十六進制表示的立即數(shù),還要求在
          “#”后加上“0x”或“&”。

          寄存器尋址

          寄存器尋址就是利用寄存器中的數(shù)值作為操作
          數(shù),這種尋址方式是各類微處理器經(jīng)常采用的
          一種方式,也是一種執(zhí)行效率較高的尋址方
          式。
          ADD R0,R1,R2 ;R0←R1+R2
          該指令的執(zhí)行效果是將寄存器R1和R2的內(nèi)容
          相加,其結(jié)果存放在寄存器R0中。

          寄存器間接尋址

          寄存器間接尋址就是以寄存器中的值作為操作數(shù)的地
          址,而操作數(shù)本身存放在存儲器中。例如以下指令:
          ADD R0,R1,[R2] ;R0←R1+[R2]
          LDR R0,[R1] ;R0←[R1]
          在第一條指令中,以寄存器R2的值作為操作數(shù)的地
          址,在存儲器中取得一個操作數(shù)后與R1相加,結(jié)果存
          入寄存器R0中。第二條指令將以R1的值為地址的存儲
          器中的數(shù)據(jù)傳送到R0中。

          基址變址尋址

          基址變址尋址就是將寄存器(該寄存器一般稱作基址寄存器)
          的內(nèi)容與指令中給出的地址偏移量相加,從而得到一個操作數(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]

          多寄存器尋址

          采用多寄存器尋址方式,一條指令可以完成多個寄存器值的傳
          送。這尋址方式可以用一條指令完成傳送最多16個通用寄存器
          的值。以下指令:
          LDMIA R0,{R1,R2,R3,R4}

          ;R1←[R0]
          ;R2←[R0+4]
          ;R3←[R0+8]
          ;R4←[R0+12]
          該指令的后綴IA表示在每次執(zhí)行完加載/存儲操作后,R0按字長
          度增加,因此,指令可將連續(xù)存儲單元的值傳送到R1~R4。

          相對尋址

          與基址變址尋址方式相類似,相對尋址以程序計數(shù)器PC的當(dāng)
          前值為基地址,指令中的地址標號作為偏移量,將兩者相加
          之后得到操作數(shù)的有效地址。以下程序段完成子程序的調(diào)用
          和返回,跳轉(zhuǎn)指令BL采用了相對尋址方式:
          BL NEXT ;跳轉(zhuǎn)到子程序NEXT處執(zhí)行
          ……
          NEXT
          ……
          MOV PC,LR ;從子程序返回

          堆棧尋址

          堆棧是一種數(shù)據(jù)結(jié)構(gòu),按先進后出(First In
          Last Out,F(xiàn)ILO)的方式工作,使用一個稱作堆
          棧指針的專用寄存器指示當(dāng)前的操作位置,堆棧
          指針總是指向棧頂。
          遞增堆棧:向高地址方向生長
          遞減堆棧:向低地址方向生長
          滿堆棧:堆棧指針指向最后壓入堆棧的有效數(shù)據(jù)項
          空堆棧:堆棧指針指向下一個要放入數(shù)據(jù)的空位置



          評論


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