异常向量表的创建

.text @;代码段 ---.XXXXX伪操作
@;软中断中的中断号,一般用于系统调用函数。
@;open 0x2 read 0x3 write 0x4 
tabel:
@;创建异常向量表
@;nop-空指令-只占用指令执行时间,不执行任何内容
b reset   @;0x0 复位异常
b undef_handler   @;0x4 未定义异常
b swi_handler_num   @;0x8 软中断
b pre_handler   @;0xC 预取指令异常
b data_handler   @;0x10 数据存取异常
nop   @;0x14 保留
b irq_handler   @;0x18 IRQ
b fiq_handler         @;0x1c FIQ
reset:@;复位异常--硬件初始化操作
mov r0,#1
mov r1,#2
mov r2,#3@;以上为硬件初始化程序
@;更改当前操作模式位用户模式并且禁止FIQ。--读改写
mrs r3,cpsr
bic r3,#0x5f
orr r3,#0x50
msr cpsr,r3
mov r4,#4
mov r5,#5
ldr sp,=stack_end @;此次栈地址是user模式下的,但是SP属于私有REG
swi #0x3@;产生一个软中断,软中断的中断号位0x2
add r6,r4,r5
@;以上为用户函数
swi_handler_num:
ldr sp,=stack_end@;此次栈地址是SVC模式下的
mov r7,lr
sub r7,r7,#4
ldr r8,[r7]
bic r8,0xff000000
b swi_handler
swi_handler:@;SWI异常处理程序
stmfd sp!,{r0,r1,r4,r5,lr} @;压栈-保护现场
cmp r8,#0x2
moveq r0,#2
moveq r1,#3@;0x2中断号代表的是open函数


cmp r8,#0x3
moveq r0,#5
moveq r1,#6@;0x3中断号代表的是read函数


cmp r8,#0x4@;0x4中断号代表的是write函数
moveq r0,#7
moveq r1,#8


ldmfd sp!,{r0,r1,r4,r5,pc}^@;出栈-恢复现场
@ mov pc,lr
undef_handler:
pre_handler:
data_handler:
irq_handler:
fiq_handler:
.data
stack:
.space 32
stack_end:
.end

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值