keil
.text
.global _start
_start:@1.构建异常向量表b resetb undefb software_interruptb prefetch_abortb data_abortb .b irqb fiq
reset:@系统上电之后处于svc模式@初始化svc模式下的栈指针ldr sp,=0x40000800@2.从SVC模式切换到user模式 msr cpsr,#0xD0mrs r0,cpsrorr r0,r0,#((0x1 << 4))and r0,r0,#(~(0xf))msr cpsr,r0@3.执行user模式下代码,初始化user模式下栈指针ldr sp,=0x40000700mov r0,#0x1mov r1,#0x2swi 2 @CPU自动保存现场,会执行四大步三小步过程add r0,r0,r1 @ r0 = r0 + r1 = 0x3b stop
undef:
software_interrupt:
prefetch_abort:
data_abort:
irq:
fiq:
software_interrupt:@压栈保存现场 stmfd sp!,{r0-r12,lr}mov r0,#0x3mov r1,#0x4add r0,r0,r1 @ r0 = r0 + r1 = 0x7@出栈恢复现场ldmfd sp!,{r0-r12,pc}^@^将spcr_<MODE>寄存器中的值回复到cpsr寄存器中stop:b stop
.end