.text
.global _start
_start:
@异常向量表(放跳转指令,例:医院的科室)
@最简单对的异常向量表,只有复位处理函数入口和软中断处理入口
b reset
nop @占一个位置 其他异常没有处理,写nop
b swi_handler
nop
nop
nop
b irq_hander
nop
reset:
@放到这里能恢复 svc分配栈空间
ldr sp,=buf+512*3
@irq模式
mrs r0,cpsr
bic r0,#0x1f
orr r0,#0x12
msr cpsr,r0
ldr sp,=buf+512*2
@user模式
mrs r0,cpsr
bic r0,#0x1f
orr r0,#0x10
msr cpsr,r0
ldr sp,=buf+512
mov r0,#0x11
mov r1,#0x22
SWI 1
add r2,r0,r1
nop
nop
stop:
nop
nop
nop
B stop
@软中断
swi_handler:
@入栈保护现场
stmfd sp!,{r0-r12,lr}
mov r0,#0x1f
mov r1,#0x2f
mov r2,#0x3f
mov r3,#0x4f
mov r4,#0x5f
@出栈 恢复现常,还原模式 spsr->cpsr
@lc -> pc
ldmfd sp!,{r0-r12,pc}^
@mov pc,lr
@中断
irq_hander:
@入栈保护现场
stmfd sp!,{r0-r12,lr}
@中断处理
@switch(irqnum)
ldmfd sp!,{r0-r12,pc}^
.DATA
buf:
.space 512*3
.end
ARM汇编 启动代码start.s
最新推荐文章于 2024-02-15 12:12:19 发布