关于LPC启动代码startup.s的疑难点,请高手帮助

gyl52114   2008-7-12 10:17 楼主
以下代码段一直难以理解,请各位帮分析一下:





;IRQ中断服务程序
IRQ_Handler
        SUB     LR, LR, #4                  

        STMFD   SP!, {R0-R3, R12, LR}         
        MRS     R3, SPSR                       
        STMFD   SP, {R3, LR}^   ;此处保护用户模式的CPSR,LR不知有什么作用,为什么不能回写SP,此SP道底是那个模式下的SP?            
        LDR     R2, IRQ_HandlerData
        SUB     SP, SP, #4*2

        MSR     CPSR_c, #(NoInt | SYS32Mode)           
        LDR     R3, [R2]
        ADD     LR, PC, #1  ;这里是什么意思?
        BX      R3
    CODE16
        BX      PC    ;这里为什么加16位的代码,"BX  PC"又到那里去了?
        NOP
    CODE32

        MSR     CPSR_c, #(NoInt | IRQ32Mode)  
        LDMFD   SP, {R3, LR}^          ;??????????????????????????   
        MSR     SPSR_cxsf, R3
        ADD     SP, SP, #4*2                  

        LDMFD   SP!, {R0-R3, R12, PC}^     
IRQ_HandlerData
        DCD     VICVectAddr


回复评论

暂无评论,赶紧抢沙发吧
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复