打印

C和汇编混合编程

[复制链接]
1360|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
再坚持坚持|  楼主 | 2012-3-27 01:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
<font face="Verdana">C和汇编混合编程<br>本应用例目的在于讲解C和ASM(汇编)混合编程的应用。支持C语言几乎是所有微控制器程序设计的一项基本要求,当然SPMC75F2413A也不例外。μ’nSPTM 指令结构的设计就着重考虑对C语言的支持,GCC就是一种针对μ’nSPTM 操作平台的ANSI-C编译器。但是在应用中对于程序的设计,特别是C和ASM混合使用的时候有些地方是需要注意的,在C中如何嵌入ASM也是一个不可回避的问题。所以本应用例这种在于解决这些问题。<br>1.2 函数调用<br>1.2.1 调用协议<br>模块代码间的调用,是遵循μ’nSPTM体系的调用协议(Calling Convention)。所谓调用协议,是指用于标准子程序之间一个模块与令一个模块的通信约定。即使两个模块是以不同的语言编写而成。<br>调用协议是指这样一套法则:它使不同的子程序之间形成一种握手通信接口,并完成一个子程序到另一个子程序之间的参数传递和控制,以及定义出子程序调用与子程序返回值的常规规则。<br>调用协议包括以下相关要素:<br>(1)调用子程序间的参数传递;<br>(2)子程序返回值;<br>(3)调用子程序过程中所用堆栈;<br>(4)用于暂存数据的中间寄存器。<br>μ’nSPTM调用协议的内容如下:<br>1、由于C编译器产生的所有标号都以下划线(_)为前缀,而C程序在调用汇编程序时要求汇编程序名也以下划线(_)为前缀。<br>2、参数以相反的顺序(从右到左)被压入堆栈中。必要时所有的参数都被转换成其在函数原型中被声明过的数据类型。但如果函数的调用发生在其声明之前,则传递在调用函数里的参数不会进行任何数据类型转换的。<br>3、各参数和局部变量在堆栈中的排列如图1-1所示。<br>4、16-Bit的返回值放在寄存器R1中,32-Bit的返回值存入寄存器R1和R2中,其中低字节在R1中,高字节在R2中。若要返回结构或指针需要在R1中存放一个指向结构的指针。<br>5、编译器会产生prolog/epilog过程动作来暂存或恢复PC、SR及BP寄存器。汇编起则通过CALL指令可将PC和SR自动压入堆栈中,而通过RETF或RETI指令将其自动弹出堆栈。</font><br>

相关帖子

沙发
益友电子| | 2012-3-27 13:10 | 只看该作者
楼主能不能更详细的讲解一下,新人求解!

使用特权

评论回复
板凳
hsbjb| | 2012-3-27 18:18 | 只看该作者
LZ这排版实在是有问题,说的也太简洁了

使用特权

评论回复
地板
心愿wish| | 2012-3-28 17:07 | 只看该作者
路过,看看:)

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

8

帖子

0

粉丝