IRQ.s程序如下: MACRO $IRQ_Label HANDLER $IRQ_Exception_Function
EXPORT $IRQ_Label IMPORT $IRQ_Exception_Function $IRQ_Label SUB LR, LR, #4 STMFD SP!, {R0-R3, R12, LR} (1) MRS R3, SPSR STMFD SP, {R3,LR}^ (2) NOP SUB SP, SP, #4*2 MSR CPSR_c, #(NoInt | SYS32Mode) BL $IRQ_Exception_Function MSR CPSR_c, #(NoInt | IRQ32Mode) LDMFD SP, {R3,LR}^ MSR SPSR_cxsf, R3 ADD SP, SP, #4*2
LDMFD SP!, {R0-R3, R12, PC}^ MEND
程序中,在(1)处已经将LR保存到了堆栈中,为什么在(2)处还要保存一遍??在(1)和(2)之间没有进行状态切换,也没有调用函数,那么两次保存的LR的值不是一样的么?为什么要保存两次?还有(2)处后面加上“^”不知道具体有什么意义??且此处这样写是不是更好?STMFD SP!,{R3,LR}^ 希望高手们能予以解答,谢谢!! |