• ATPCS规则1


     

     

     

    参数传递规则
    1. 参数不超过4个时,可以使用寄存器R0R3来传递参数,当参数超过4个时,还可以使用数据栈来传递参数。
    2. 结果为一个32位整数时,可以通过寄存器R0返回
    3. 结果为一个64位整数时,可以通过寄存器R0R1返回,依次类推。
    汇编程序、C程序及C++程序相互调用
    C程序调用汇编程序:
       汇编程序的设置要遵循ATPCS规则,保证程序调用时参数的正确传递。
        在汇编程序中使用EXPORT伪指令声明本子程序,使其它程序可以调用此子程序。
        C 语言程序中使用extern 关键字声明外部函数(声明要调用的汇编子程序),即可调用此汇编子程序。
        调用汇编的C 函数:
        示例
    #include
    extern voidstrcopy(char *d,const char *s) //声明外部函数,即要调用的汇编
                                                                 //子程序
    intmain(void)
    {
     const char *srcstr=“First string-source”//定义字符串常量
     char dstsrt[] =“Second string-destination”//定义字符串变量
     printf(“Before copying\n”);
     printf(“’%s’\n ‘%s\n,”srcstr,dststr);//显示源字符串和目标字符串的内容
     strcopy(dststr,srcstr); //调用汇编子程序,R0=dststr,R1=srcstr
     printf(“After copying\n”)
     printf(“’%s’\n ‘%s\n,”srcstr,dststr); //显示strcopy 复制字符串结果
     return(0);
    }
        被调用汇编子程序:
          AREA  SCopy,CODE,READONLY
          EXPORT strcopy  ;声明汇编程序strcopy,以便外部程序引用
    strcopy            ;R0 为目标字符串的地址
                                ;R1为源字符串的地址 ;
          LDRB R2,[R1],#1 ;读取字节数据,源地址加1
          STRB R2,[R0],#1 ;保存读取的1字节数据,目标地址加1
          CMPr2,#0          ;判断字符串是否复制完毕
          BNEstrcopy        ;没有复制完毕,继续循环
          MOVpc,lr            ;返回
          END
    汇编程序调用C程序
        汇编程序的设置要遵循ATPCS 规则,保证程序调用时参数的正确传递.
        在汇编程序中使用IMPORT伪指令声明将要调用的C 程序函数.
        在调用C 程序时,要正确设置入口参数,然后使用BL 调用.
        汇编调用C 程序的C 函数:
      intsum5(int a,lit b, int c,int d,int e)
    {
     return(a+b+c+d+e); //返回5个变量的和
    }
        汇编调用C 程序的汇编程序
          AREA  sample, CODE,READONLY
          IMPORTsum5     ;声明外部标号sum5,C 函数sum5()
    CALLSUM
          STMFD SP!  {LR} ;LR 寄存器放栈
          ADDR1,R0,R0    ;设置sum5函数入口参数,R0 为参数a
          ADDR2,R1,R0    ;R1 为参数b,R2为参数c
          ADD R3,R1,R2,
          STR R3,[SP,# -4]!  ;参数e要通过堆栈传递
          ADDR3,R1,R1       ;R3 为参数d
          BLsum5               ;调用sum5(),结果保存在R0
          ADDSP,SP#4        ;修正SP 指针
          LDMFDSP,PC         ;子程序返回
          
         END
    嵌入式C编程
    概述:
         C语言的优点是运行速度快、编译效率高、移
    植性好和可读性强。C语言支持模块化程序设计,支持自顶
    向下的结构化程序设计方法。因此在嵌入式程序设计中经
    常会用到C语言程序设计。
         嵌入式C语言程序设计是利用基本的C语言知识,面向
    嵌入式工程实际应用进行程序设计。也就是说它首先是C
    言程序设计,因此必须符合C语言基本语法,只是它是面向
    嵌入式的应用而设计的程序。
        C语言的预处理伪指令在嵌入式程序设计中的应用。
    1、文件包含伪指令
         格式:
    #include <头文件名.h>     ;标准头文件
    #include 头文件名.h”        ;自定义头文件
    2、宏定义伪指令
         格式:
    #define  宏标识符  宏体
          例:
         #define U32  unsigned int
       
  • 相关阅读:
    linux下vim命令详解
    Linux 指令篇:档案目录管理chown
    分级渲染百度地图路段红黄绿功能
    矢量数据的属性值的添加、编辑、删除
    Extjs+C# 文件上传
    IBATIS 的动态SQL语句拼接
    一个DIV位于另一个div的右下角
    ArcGIS JavaScript API 添加点
    将Excel数据导入至SqlServer中
    Extjs 图表控件,可修改X轴与Y轴坐标
  • 原文地址:https://www.cnblogs.com/feisky/p/1586471.html
Copyright © 2020-2023  润新知