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

          新聞中心

          DataAbort簡(jiǎn)單分析

          作者: 時(shí)間:2012-10-22 來源:網(wǎng)絡(luò) 收藏

          中止表示當(dāng)前存儲(chǔ)器訪問不能被完成。

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

          有兩種類型的中止:

          預(yù)取指中止: 發(fā)生在指令預(yù)取指過程中

          數(shù)據(jù)中止:  發(fā)生在對(duì)數(shù)據(jù)訪問時(shí)

          1.預(yù)取指中止

          當(dāng)發(fā)生預(yù)取指中止時(shí)ARM7TDMI-S內(nèi)核將預(yù)取的指令標(biāo)記為無效但在指令到達(dá)流水線的執(zhí)行階段時(shí)才進(jìn)入異常,如果指令在流水線中因?yàn)榘l(fā)生分支而沒有被執(zhí)行,中止將不會(huì)發(fā)生。

          在處理中止的原因之后不管處于哪種處理器操作狀態(tài)處理程序都會(huì)執(zhí)行下面的指令

          SUBSPC,R14_abt,#4

          這個(gè)動(dòng)作恢復(fù)了PC和CPSR并重試被中止的指令

          2.數(shù)據(jù)中止

          當(dāng)發(fā)生數(shù)據(jù)中止時(shí)根據(jù)指令的類型產(chǎn)生不同的動(dòng)作

          ●數(shù)據(jù)轉(zhuǎn)移指令LDR,STR回寫到被修改的基址寄存器中止處理程序必須注意這一點(diǎn)

          ●交還指令SWP中止好像沒有被執(zhí)行過一樣中止必須發(fā)生在SWP指令進(jìn)行讀訪問時(shí)

          ●塊數(shù)據(jù)轉(zhuǎn)移指令LDM,STM完成 當(dāng)回寫被設(shè)置時(shí)基址寄存器被更新在指示出現(xiàn)中止后。ARM7TDMI-S內(nèi)核防止所有寄存器被覆蓋這意味著ARM7TDMI-S內(nèi)核總是會(huì)保護(hù)被中止的LDM指令中的r15(總是最后一個(gè)被轉(zhuǎn)移的寄存器)

          中止的機(jī)制使指令分頁的虛擬存儲(chǔ)器系統(tǒng)能夠被實(shí)現(xiàn)。在這樣一個(gè)系統(tǒng)中,處理器允許產(chǎn)生仲裁地址。當(dāng)某一地址的數(shù)據(jù)無法訪問時(shí),存儲(chǔ)器管理單元MMU通知產(chǎn)生了中止,中止處理程序必須找出中止的原因,使請(qǐng)求的數(shù)據(jù)可以被訪問并重新執(zhí)行被中止的指令。應(yīng)用程序不必知道可用存儲(chǔ)器的數(shù)量,也不必知道它的被中止時(shí)所處的狀態(tài)。在修復(fù)產(chǎn)生中止的原因后,不管處于哪種處理器操作狀態(tài),處理程序都必須執(zhí)行下面的返回指令 SUBSPC,R14_abt,#8 這個(gè)動(dòng)作恢復(fù)了PC和CPSR并重試被中止的指令



          關(guān)鍵詞: 分析 簡(jiǎn)單 DataAbort

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