時間:2018-08-26 00:00:00 來源:信盈達(dá) 作者:信盈達(dá)
在ARM處理器中一條指令的執(zhí)行分為取指、譯碼、執(zhí)行三個階段,由于指令流水線的存在造成當(dāng)前執(zhí)行的指令的地址是PC-8(ARM指令集),那么當(dāng)前執(zhí)行指令的下一條指令的地址應(yīng)該是PC-4,所以在異常產(chǎn)生時處理器會將PC-4的值保存到對應(yīng)模式的LR寄存器中,但是該返回地址是否能夠被使用還要看具體產(chǎn)生的異常的種類而定。
FIQ與RIQ異常:
FIQ與RIQ異常返回處理是一樣的,當(dāng)處理器執(zhí)行完當(dāng)前指令后才去查詢中斷且查看是否允許中斷,如果處理器產(chǎn)生了中斷,這時PC的值已經(jīng)更新,即PC指向了當(dāng)前指令后第三條指令的位置(被中斷指令地址加12),產(chǎn)生FIQ與RIQ異常后處理器將PC-4的值保存到了對應(yīng)模式下的LR,而它指向的是當(dāng)前被中斷指令的后面的第二條指令,因此在返回時我們需要人為的將LR中保存的值自減4以得到正確的返回地址。
預(yù)取指中止異常:
在指令預(yù)取時如果地址是非法的,該指令就被標(biāo)記為有問題的指令,流水線上該指令之前的指令繼續(xù)執(zhí)行,當(dāng)執(zhí)行被標(biāo)記為有問題的指令的時候,處理器就會產(chǎn)生異常。產(chǎn)生該異常終返回時需要返回到被標(biāo)記的指令處重新讀取并執(zhí)行該指令,因此異常返回時需要返回到該指令處而不是該指令的下一條指令。所以在中斷返回時我們需要人為的對LR中保存的值自減4。
指令未定義異常:
指令未定義異常由當(dāng)前正在執(zhí)行的指令產(chǎn)生,即產(chǎn)生異常時PC的值還沒有更新,PC的值指向當(dāng)前指令后面第二條指令,產(chǎn)生異常后LR中保存的指令是當(dāng)前指令的下一條指令的地址,所以異常返回時直接把LR的值給PC即可不許人為的去修正返回地址。
軟中斷異常:
軟中斷異常與指令未定義異常一樣,也是當(dāng)前指令在執(zhí)行過程中就產(chǎn)生了異常,所以LR中保存的返回地址是當(dāng)前軟中斷指令的下一條指令的地址,不需要人為的去修正,返回時直接將LR的值賦給PC即可。
數(shù)據(jù)中止異常:
產(chǎn)生該異常的時候程序要返回到有問題的指令處重新訪問該數(shù)據(jù),因此應(yīng)該返回到產(chǎn)生異常的指令處而不是產(chǎn)生異常指令的下一條指令處。當(dāng)異常產(chǎn)生時PC的值已經(jīng)更新,所以PC指向的是異常產(chǎn)生指令的后面的第三條指令,而LR中保存的是PC-4的值即異常產(chǎn)生指令的后面的第二條指令的地址。所以在返回時我們需人為的對LR中的值進(jìn)行自減8的處理。以保證異常正確的返回。
上述每一種異常發(fā)生時,返回地址都要根據(jù)具體的異常類型進(jìn)行重新修正。
信盈達(dá)2008年在深圳特區(qū)南山高新科技園成立。自成立至今近九年來專注為企業(yè)和個人提供高端方案設(shè)計、高端嵌入式/Android培訓(xùn)等服務(wù)。公司下設(shè)信盈達(dá)實訓(xùn)學(xué)院、信盈達(dá)研發(fā)中心、信盈達(dá)教學(xué)儀器三大業(yè)務(wù)板塊。九年來公司堅持"技術(shù)領(lǐng)先、服務(wù)領(lǐng)先",以雄厚的實力和專業(yè)的品質(zhì)成為國內(nèi)唯一有實力從產(chǎn)品最底層研發(fā)到系統(tǒng)層開發(fā)的嵌入式實訓(xùn)、產(chǎn)品解決方案提供商。為中國IT行業(yè)提供最具價值的職業(yè)教育服務(wù)。專業(yè)培訓(xùn)嵌入式、物聯(lián)網(wǎng)、人工智能、Java、單片機等課程,想了解更多信息點擊立馬咨詢
免費領(lǐng)取試聽卡
申請已經(jīng)提交
老師會馬上給您安排試聽課程!
申請出錯了
您可以加老師QQ:914865590報名咨詢!