软中断代码:(keil软件)
.text
.global _start
_start:@1.构建异常向量表b resetb undef_interruptb software_interruptb prefetch_dataabortb data_abortb .b irqb fiq
reset:@2.系统一上电,程序运行在SVC模式@1>>初始化SVC模式,栈指针ldr sp,=0x40000800@3.从SVC模式切换到user模式msr cpsr,#0xD0@4.user模式 下代码@1>>初始化user模式,栈指针ldr sp,=0x40000700mov r0,#0x1mov r1,#0x2@5.执行软中断指令--->保存现场(四大部三小步)swi 2add r0,r0,r1 @ r0=0x3b stopundef_interrupt:
software_interrupt:@1.压栈保存现场stmfd sp!,{r0-r12,lr}mov r0,#0x3mov r1,#0x4add r0,r0,r1 @ r0=0x7@2.出栈恢复现场ldmfd sp!,{r0-r12,pc}^@ ^:将SPSR_<MODE>寄存器中的值,给到CPSR寄存器中prefetch_dataabort:
data_abort:
irq:
fiq:stop:b stop.end