1.對異常的響應(yīng) 當一個異常出現(xiàn)以后,arm微處理器會執(zhí)行以下幾步操作?! 。?)將下一條指令的地址存入相應(yīng)連接寄存器lr,以便程序在處理異常返回時能從正確的位置重新開始執(zhí)行。若異常是從arm狀態(tài)進入的,則lr寄存器中保存的是下一條指令的地址(當前pc+4或pc+8,與異常的類型有關(guān));若異常是從thumb狀態(tài)進入的,則在lr寄存器中保存當前pc的偏移量,這樣,異常處理程序就不需要確定異常是從何種狀態(tài)進入的。例如:在軟件中斷異常swi產(chǎn)生時,指令mov pc' r14_svc總是返回到下一條指令,不管swi是在arm狀態(tài)執(zhí)行,還是在thumb狀態(tài)執(zhí)行?! 。?)將cpsr復制到相應(yīng)的spsr中。 ?。?)根據(jù)異常類型,強制設(shè)置cpsr的運行模式位?! 。?)強制pc從相關(guān)的異常向量地址取下一條指令執(zhí)行,從而跳轉(zhuǎn)到相應(yīng)的異常處理程序處?! ∵€可以設(shè)置中斷禁止位,以禁止中斷發(fā)生。如果異常發(fā)生時,處理器處于thumb狀態(tài),則當異常向量地址加載入pc時,處理器自動切換到arm狀態(tài)?! rm微處理器對異常的響應(yīng)過程用偽碼可以描述為: 2,從異常返回 異常處理完畢之后,arm微處理器會執(zhí)行以下幾步操作從異常返回?! 。?)將連接寄存器lr的值減去相應(yīng)的偏移量后送到pc中?! 。?)將spsr復制回cpsr中。 ?。?)若在進入異常處理時設(shè)置了中斷禁止位,則要在此清除?! 】梢哉J為應(yīng)用程序總是從復位異常處理程序開始執(zhí)行的,因此復位異常處理程序不需要返回。





