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