几个ARM指令操作的汇编实现

下面几段小程序是在学习ARM指令应用是记下的。感觉比较经典,做一下整理。


1.长跳转(为了实现arm 4GB范围的跳转,三级流水)

             START                         ;主程序体

                                         。。。

                                        ADD   LR,PC,#4

             CALL_SUB      LDR   PC,[PC,#-4]

                                        DCD  FUNCTION

              RETURN         。。。 

              FUNCTION     。。。

                                       MOV   PC,LR


2.多路跳转(在多个处理程序中进行选择)

              START                        :主程序体

                                       。。。

                                       LDR    R0, [R1] ;从【R1】I/O地址读索引号

                                       CMP   R0,MAXINDEX

                                       LDRL  PC,[PC,R0,LSL#2]

                                       B          INDEXOUTOFLANG

                                       DCD    HANDLER0

                                       DCD    HANDLER1

                                       DCD    HANDLER2


                                         。。。 

3.子程序的进入和退出

             X_FUNCTIONG

                                       STMFD   R13!,{R4-R12,R14}

                                        。。。

                                        LDMFD  R13!,{R4,R12,PC}^

4.软中断

           SWIHANDLER

                                         STMFD        SP!,{R0,R3,R12,LR}

                                          MRS            R0,SPSR_SVC

                                         TST               R0,#0X20  :测试cpsr【T】位

                                         LDRNEH     R0,[LR,#-2]

                                         BICNE          R0,#0XFF00

                                         LDREQ        R0,[LR,#-4]

                                         BICNE          R0,#0XFF000000

                                         CMP             R0,#MAX_SWI

                                         LDRLS         PC,[PC,R0,LSL #2]

                                         B                   SWI_OUT_RANGE

                                         DCD             DO_SWI_0

                                    

5.IRQ响应

         IRQHANDLER

                                         SUB              R14,R14,#4

                                         STMFD         R13!,{R12,R14}

                                         MRS              R12,SPSR_IRQ

                                         STMFD         R13!,{R12}

                                         MOV              R12,#INTBASE

                                         LDR               R12,[R12,#INTLEVER]

                                         MRS              R14,CPSR

                                         BIC                R14,R14,#0X80 ;设置CPSR[I]为0 即允许irq嵌套

                                         MSR              CPSR_C,R14

                                         LDR               PC,[PC,R12,LSL #2]

                                         NOP              ;站位符 因为三级流水

                                         DCD              PRIORITY_0_HANDLER

6.数据/指令预取中止

     ABTHANDLER

                                         SUB               LR,LR,#4                     ;数据访问中止此处立即数为#8

                                         STMFD          SP!,{RIGLIST,LR}

                                          。。。

                                         LDMFD          SP!,{RIGLIST,PC}^

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值