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