ARM中斷返回地址詳細(xì)分析
在ARM體系中,通常有以下3種方式控制程序的執(zhí)行流程:
1、在正常執(zhí)行過程中,每執(zhí)行一條ARM指令,程序計數(shù)器PC的值加4個字節(jié);每執(zhí)行一條Thumb指令,程序計數(shù)器PC加2個字節(jié)。整個過程是順序執(zhí)行的;
2、跳轉(zhuǎn) B指令執(zhí)行跳轉(zhuǎn)操作;BL指令在執(zhí)行跳轉(zhuǎn)的同時,保存子程序返回地址;BX指令,執(zhí)行跳轉(zhuǎn)的同時,根據(jù)目標(biāo)地址的最低位,可以將程序狀態(tài)切換到Thumb狀態(tài);BLX指令執(zhí)行上述3個操作;
3、當(dāng)異常中斷發(fā)生時,系統(tǒng)執(zhí)行完當(dāng)前指令后,將跳轉(zhuǎn)到相應(yīng)的異常中斷處理程序處執(zhí)行。在進(jìn)入異常中斷處理程序時,要保存被中斷的程序的執(zhí)行現(xiàn)場,在從異常中斷處理程序退出時,要恢復(fù)被中斷的程序的執(zhí)行現(xiàn)場。當(dāng)異常中斷處理程序執(zhí)行完成后,程序返回到發(fā)生中斷的指令的下一條指令處執(zhí)行。
重點:ARM處理器對異常中斷的響應(yīng)過程:
㈠、保存當(dāng)前程序狀態(tài)寄存器CPSR到對應(yīng)異常中斷的處理器模式下的SPSR中;
㈡、設(shè)置當(dāng)前程序狀態(tài)寄存器CPSR的處理器模式位M(4:0)為對應(yīng)的處理器模式,并禁止IRQ中斷(設(shè)置I位=1);當(dāng)進(jìn)入的是FIQ模式時,禁止FIQ中斷(設(shè)置F位=1);
㈢、將對應(yīng)異常中斷的處理器模式下的LR設(shè)置成返回地址;
㈣、將程序計數(shù)器PC值,設(shè)置成該異常中斷向量地址,從而跳轉(zhuǎn)到相應(yīng)的異常中斷處理程序處執(zhí)行。
上述處理器對異常中斷的響應(yīng)過程可以用偽代碼描述如下:
R14