关于SWI指令切换模式

        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的起始地址

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值