软中断swi指令代码:
@ '@'
.text @ 文本段
.globl _start @ 声明一个 _start全局函数
_start: @start标签入口
@1.构建异常向量表
@2.异常源--->标签
@复位
b Reset
@快速中断模式
b FIQ
@软中断
b Software_Interrupt
@普通中断模式
b IRQ
@空的
b Reserved
@数据端口
b Data_Abort
@中止模式
b Predetch_Abort
@未定义模式
b Undefined_Instruction
@3.系统一上电处于SVC模式
msr cpsr,#0xd3
@4.从SVC模式切换到user模式
msr cpsr,#0xd0
@5.user模式实现如下内容
mov r0,#0x03
mov r1,#0x7
Reset:
@1>初始化栈指针
ldr sp,=0x40000100
@2>分别对r0,r1寄存器赋值
ldm sp,{r1,r2}
@3>执行软中断指令----->四大步三小步
swi 2
@6.SVC模式下执行内容
msr cpsr,#0xd3
add r2,r0,r1
Undefined_Instruction:
Software_Interrupt:
@1>压栈保存现场
stmfd sp!,{r0-r12,lr}
@2>分别对r0,r1寄存器赋值
mov r0,#0x05
mov r1,#0x06
add r2,r0,r1
@3>恢复现场
@^:代表将SPSR <mode>寄存器中的值,恢复给CPSR
stmfd sp!,{r0-r12,pc}
FIQ:
IRQ:
Data_Abort:
Reserved:
Predetch_Abort:
stop: @stop标签入口
b stop
.end @结束标志
运行结果: