子程序调用,寄存器传递参数

mycode.s


            EXPORT mycode
            AREA    ADDCODE, CODE, READONLY            
    
mycode
            LDR        R0,    =src            ;R0指向src的起始地址
            LDR        R1,    =dst            ;R1指向dst的起始地址
            BL        strcpy                ;小于N-1继续执行外循环

deadloop
            B        deadloop                    

            
strcpy
            LDRB    R2,    [R0], #1        ;将R0指向的字节存入R2中
                                        ;R0自加1,指向下一个字节
            STRB    R2,    [R1], #1        ;将R2内容存入R1指向的字节单元中
                                        ;R1自加1,指向下一个字节
            CMP        R2,    #0                ;检查R2是否为0
            BNE        strcpy                ;没有遇到结束符0时,继续拷贝下一个字节
            MOV        PC,    LR                ;子程序返回
        

            AREA    NUM1,    DATA,    READONLY        
src            DCB    "Hello world! I am an ARM program!", 0 

            AREA    NUM2,    DATA,    READWRITE
dst            SPACE    100     
            END
startup.s

STACK_TOP    EQU        0x20005000        ; 宏定义主堆栈指针STACK_TOP
            IMPORT mycode
            AREA    RESET,    CODE            ; 代码段的名字RESET---名字必须是RESET
            DCD    STACK_TOP                    ; 向量表第一项:堆栈指针值
            DCD    start                        ; 向量表第二项:主程序入口地址
            ENTRY                            ; 程序的入口
start
            

            LDR  R0, =mycode
            BX   R0
deadloop
            B        deadloop                    ; 在此死循环,空等待
            NOP
            END


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值