找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

巢课
电巢直播8月计划
查看: 61|回复: 2
打印 上一主题 下一主题

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

[复制链接]

193

主题

569

帖子

1397

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

积分
1397
跳转到指定楼层
1#
发表于 2016-6-4 14:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您!

您需要 登录 才可以下载或查看,没有帐号?注册

x
在嵌入式程序设计中,C语言编程和ARM汇编语言编程都是必需的,在某些情况下,在某些情况下,还需要C语言与汇编语言的混合编程。灵活地运用C语言和汇编语言之间的关系进行嵌入式编程有利于对嵌入式以及相关模块的编程开发。在需要C语言和汇编语言混合编程时,如果汇编代码比较简单,则可直接利用内嵌汇编俩进行混合编程。如果汇编代码比较复杂,则可将汇编语言比较简单,则可直接分别以文件的形式加到一个工程里,通过ATPCS来完成汇编语言程序与C语言程序之间的调用。
1.ATPCS介绍
ATPCS是ARM程序和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。它不能用作其他用途。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 支持!支持! 反对!反对!

262

主题

1157

帖子

2065

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

积分
2065
2#
发表于 2016-6-4 15:25 | 只看该作者
学习中,谢谢分享

155

主题

662

帖子

1191

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

积分
1191
3#
发表于 2016-9-13 09:27 | 只看该作者
楼主辛苦了!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

巢课

技术风云榜

关于我们|手机版|EDA365 ( 粤ICP备18020198号 )

GMT+8, 2024-11-26 18:28 , Processed in 0.058089 second(s), 32 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表