arm_异常处理流程_实现压栈保存现场,出栈恢复现场

.text
.global _start
_start:
    @ 1. 构建异常向量表
        b reset
        b undef
        b software_interrupt
        b prefetch_abort
        b data_abort
        b .
        b irq
        b fiq
    
reset:
    @ 2.系统上电 ---> RESET  ---> SVC模式
    @    从SVC模式切换到USER模式
        ldr sp,=0x40000800 @ 初始化SVC模式下栈指针
        msr cpsr,#0xD0     @ 从SVC模式切换到USER模式
        
    @ 3.user模式下代码
        ldr sp,=0x40000700 @ 初始化user模式下栈指针
        mov r0,#0x1
        mov r1,#0x2
        swi 2  @ 四大步三小步,CPU自动完成
        add r0,r0,r1 @ r0 = 0x3
        b stop
            
undef:
software_interrupt:
    @ 压栈保存现场
    stmfd sp!,{r0-r12,lr}
    mov r0,#0x3
    mov r1,#0x4    
    add r0,r0,r1 @ r0 = 0x7
    @ 出栈恢复现场
    ldmfd sp!,{r0-r12,pc}^
    @ ^:SPSR_寄存器中的值给到CPSR寄存器中
prefetch_abort:
data_abort:
irq:
fiq:    
    
stop:
    b stop    
.end
今日作业:

你可能感兴趣的:(arm开发,开发语言)