AREA vectors,CODE,READONLY
ENTRY
vector
ldr PC,Reset_Addr //将程序地址写入PC;ldr PC,[pc, #offset to literal pool]
ldr PC,Undef_Addr
ldr PC,SWI_Addr
ldr PC,Pref_Addr
ldr PC,Abort_Addr
ldr PC,IRQ_Addr
ldr PC,FIQ_Addr
Reset_Addr DCD Reset_Handler //文字库
Undef_Addr DCD Undefined_Handler
SWI_Addr DCD SWI_Handler
Pref_Addr DCD Prefetch_Handler
Abort_Addr DCD Abort_Handler
IRQ_Addr DCD IRQ_Handler
FIQ_Addr DCD FIQ_Handler
start
b Reset_Handler
Undefined_Handler
b Undefined_Handler
SWI_Handler
SoftwareInterrupt
LDR R0,[LR,#-4] //将swi的程序指令给R0
BIC R0,R0,#0xFF000000 //将高八位清零,剩下的就是swi 后面的数据(中断号)
CMP R0, #3
LDRLO PC, [PC, R0, LSL #2]
bx lr
SwiFunction
DCD function0 ;0
DCD function1 ;1
DCD function2 ;2
function0
movs r1,#10
bx lr
function1
movs r2,#10
bx lr
function2
movs r3,#10
bx lr //跳转到SWI指令行的下一条指令,lr 保存的是程序发生异常时的下一条指令的地址
Prefetch_Handler
b Prefetch_Handler
Abort_Handler
b Abort_Handler
nop ;/* Reserved vector */
IRQ_Handler
b IRQ_Handler
FIQ_Handler
b FIQ_Handler
注意:一定要确保程序的起始地址从0x0开始,可以通过设置“Options For Target”中link的起始地址