- 1、本文档共23页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
11 C语言与汇编语言的混合编程概述2
* XXXXXXXXXXXXXXXXX * * XXXXXXXXXXXXXXXXX C语言与汇编语言的混合编程概述 南通开放大学 1.C51与汇编语言混合编程概述 在一个应用程序中,根据每个任务的具体特点和要求,用不同的编程语言编写源程序,最后通过编译/连接器生成一个可执行的完整程序,这种编程方式称为混合编程。 汇编语言特点: 优点:执行速度快、效率高、实时性强、与硬件结合紧密。 缺点:编程难度大、可读性差,不便于移植、开发时间长。 C语言特点: 优点:编程容易、可移植性强、支持多种数据类型,能直 接对硬件进行操作,效率高。 缺点:实时处理弱于汇编语言,无法准确定时。 混合编程特点: 效率高、速度快、易于编程、可读性、可移植性好,使用范围广。 1.C51与汇编语言混合编程概述(续) 单片机程序的编译过程 无论是C语言还是汇编语言,源程序都要被转换成目标代码(机器语言),单片机才能识别。 在单片机混合编程中, C 模块与汇编模块的接口简 单,分别用C51和A51对 源文件进行编译,然后经 连接定位器L51产生可下 载到程序存储器的十六进 制可执行文件。 2. C51 和A51程序接口基础 C语言与汇编语言程序的连接,在技术上有两个问题:一个是C语言程序与汇编语言程序如何相互调用;另一个是C语言程序和汇编语言程序如何实现相互之间的数据传递。 混合编程中,必须约定两个规则,即命名规则和参数传递规则。 C51函数名的转换及其命名规则 C51程序模块编译成目标文件后,其中的函数名要依据其定义的性质转换为相应不同的函数名。因此,在C和汇编程序的相互调用中,要求汇编程序必须服从这种函数名的转换规则,否则将无法调用到所需的函数甚至出现错误。 C51中函数名的转换规则如表1所示,其汇编符号名全部转换为大写。 2. C51和A51程序接口基础 表1 C51中函数名的转换规则 C51函数声明 汇编符号名 说 明 void func1(void) FUNC1 无参数传递或不含寄存器的函数,名称不作改变直接转入目标文件中。 void func2(char) _FUNC2 通过寄存器传递参数,函数名加前缀“_” void func3(void) reentrant _?FUNC3 重入函数,通过堆栈传递参数,函数名加前缀“_?” 2. C51和A51程序接口基础 一个C51源程序模块被编译后,其中的每个函数以“?PR?函数名?模块名”为命名规则被分配到一个独立的CODE段。 例如,如果模块“FUNC51”内包含一个名为“func”的函数,则其CODE段的名字是“?PR?FUNC?FUNC51”。 如果一个函数包含有data或bit类型的局部变量,编译器将按“?函数名?BYTE”或“?函数名?BIT”命名规则建立一个data或bit段,它们代表所要传递参数的起始位置,其偏移量为0。这些段是公开的,因而它们的地址可以被其它模块访问。 这些段被编译器赋予“OVERLAYABLE”标志,可被L51连接/定位器作覆盖分析。依据所使用的存储器模式,这些段按表2所列规则命名,在相互调用时,汇编语言必须服从C51有关段名的命名规则。 2. C51 和A51程序接口基础 表2 各种存储模式下C51函数段名的命名规则 数据 段类型 段名 程序代码 CODE ?PR?函数名?模块名(所有存储器模式) 局部变量 DATA ?DT?函数名?模块名(SMALL模式) PDATA ?PD?函数名?模块名(COMPACT模式) XDATA ?XD?函数名?模块名(LARGE模式) 局部bit变量 BIT ?BIT?函数名?模块名(所有存储器模式) 3. C51函数的参数传递规则 C51中调用汇编程序时参数传递有两种方式,一种是通过寄存器传递,一种是通过固定存储区传递。 1.通过寄存器传递参数 Keil C51规定,调用函数时,通过寄存器最多可传递3个参数,余下的通过固定存储区传递。 如果在源程序中采用了编译控制命令“#pragma NOREGPARMS”,则所有参数传递都发生在固定的存储区域,所使用的地址空间依赖于所选择的存储模式。 用寄存器传递参数的函数在编译时被C51编译器在函数名前加了一个“_”的前缀,用固定存储区传递参数的函数转换成的函数名没有下划线,如表1所示。 不同的参数用到的寄存器不一样,不同的数据类型用到的寄存器也不同。表3是利用寄存器传递参数的规则。 3. C51函数的参数传递规则 表3 C51利用寄存器传递参数规则 参数类型 char int long/float 通用指针 第1个参数 R7 R6、R7 R4-R7 R1-
您可能关注的文档
- 自考-计算机原理复习提纲.doc
- 幼儿园教育活动设计与实践第三章第四节.ppt
- C语言程序设计试题及答案(三).doc
- 全国第八届青年数学教师优质课教学设计:导数在研究函数中的应用 教学设计.doc
- 认识多媒体技术 多媒体作品的规划与设计.ppt
- 毕业设计课题集锦.doc
- 2017机械故障诊断理论与方法(教学1.0-1).pptx
- 第一章-电子信息技术发展史.ppt
- 流行病考研辅导.ppt
- 第2章 最简单的C程序设计_顺序程序设计.doc
- 金融产品2024年投资策略报告:积极适应市场风格,行为金融+机器学习新发现.pdf
- 交运物流2024年度投资策略:转型十字路,峰回路又转(2023120317).pdf
- 建材行业2024年投资策略报告:板块持续磨底,重点关注需求侧复苏.pdf
- 宏观2024年投资策略报告:复苏之路.pdf
- 光储氢2024年投资策略报告:复苏在春季,需求的非线性增长曙光初现.pdf
- 公用环保2024年投资策略报告:电改持续推进,火电盈利稳定性有望进一步提升.pdf
- 房地产2024年投资策略报告:聚焦三大工程,静待需求修复.pdf
- 保险2024年投资策略报告:资产负债匹配穿越利率周期.pdf
- 政策研究2024年宏观政策与经济形势展望:共识与分歧.pdf
- 有色金属行业2024年投资策略报告:新旧需求共振&工业原料受限,构筑有色大海星辰.pdf
文档评论(0)