引发处理器进入对应的异常模式

1.五种异常模式,七种异常源 ;
2.根据不同的异常源,引发处理器进入不同的异常模式,执行异常处理函数
3.异常源具有优先级,复位的优先级最高

保存现场:

恢复现场:



例子:
- .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
- @4.执行软中断指令 ===> 保存现场(四大步三小步)
- swi 2
- add r0,r0,r1 @ r0 = 0x3
- b stop
-
-
- undef_interrupt:
- 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_<MODE>寄存器中的值,给到CPSR寄存器中
-
- prefetch_dataabort:
- data_abort:
- irq:
- fiq:
-
- stop:
- b stop
- .end