凌阳教育的个人空间 https://blog.eetop.cn/204849 [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

C语言与汇编语言混合编程

已有 879 次阅读| 2016-3-4 16:41 |个人分类:linux技术

在嵌入式程序设计中,C语言编程和ARM汇编语言编程都是必需的,在某些情况下,在某些情况下,还需要C语言与汇编语言的混合编程。灵活地运用C语言和汇编语言之间的关系进行嵌入式编程有利于对嵌入式以及相关模块的编程开发。在需要C语言和汇编语言混合编程时,如果汇编代码比较简单,则可直接利用内嵌汇编俩进行混合编程。如果汇编代码比较复杂,则可将汇编语言比较简单,则可直接分别以文件的形式加到一个工程里,通过ATPCS来完成汇编语言程序与C语言程序之间的调用。

1.ATPCS介绍

ATPCSARM程序和Thumb程序中子程序调用的基本规则,目的是为了使单独编译的C语言程序和汇编语言程序之间能够相互调用。这些基本规则包括子程序调用过程中寄存器的使用规则、数据栈的使用规则和参数的传递规则。

1.       寄存器的使用规则

寄存器的使用必须满足下面的规则:

子程序间通过寄存器R0~R3来传递参数,这时,寄存器R0~R3可记作A1~A4.被调用的子程序在返回前无须恢复寄存器R0~R3的内容。

在子程序中,使用寄存器R4~R11来保存局部变量。这时,寄存器R4~R11可记作V1~V8。如果在子程序中使用了寄存器V1~V8中的某些寄存器,则子程序进入时都必须保存这些寄存器的值,在返回前必须恢复这些寄存器的值;对于子程序中没有用到的寄存器,则不必进行这些操作。在Thumb程序中,通常只有使用寄存器R4~R7来保存局部变量。

寄存器R12用作子程序间的scatch寄存器,记作IP。在子程序间的链接代码段中常有这种使用规则。

寄存器R13用作数据栈指针,记作SP。在子程序中寄存器R13不能用作其他用途。寄存器SP在进入子程序时的值和退出子程序时的值必须相等。

寄存器R14称为链接寄存器,记作LR。它用作保存子程序的返回地址。如果在子程序中保存了返回地址,则寄存器R14可用作其他用途。

寄存器R15是程序计数器,记作PC。它不能用作其他用途。

图总结了在ATPCS中各寄存器的使用规则及其名称。这些名称在编译器和汇编器中都是预定义的。

凌阳教育,专注嵌入式人才培养多年,完善的培养方案,强大的师资,合理的课程安排,成功从小白蜕变为嵌入式工程师。想了解凌阳教育,或者获得更多嵌入式学习资料的免费下载,请点击www.sunplusedu.com访问凌阳教育官网


点赞

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 1

    粉丝
  • 0

    好友
  • 1

    获赞
  • 3

    评论
  • 3815

    访问数
关闭

站长推荐 上一条 /1 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-4-26 18:29 , Processed in 0.032735 second(s), 14 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部