3.用swi指令验证异常处理流程(四大步三小步)

软中断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	@结束标志

运行结果:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值