混合编程及参数传递的方法

混合编程及参数传递的方法

ID:11522356

大小:29.50 KB

页数:4页

时间:2018-07-12

混合编程及参数传递的方法_第1页
混合编程及参数传递的方法_第2页
混合编程及参数传递的方法_第3页
混合编程及参数传递的方法_第4页
资源描述:

《混合编程及参数传递的方法》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、混合编程及参数传递的方法在编程中,对于实时性要示较高的采用汇编语言编程比较合适,对复杂的计算或实时性要求不高,且对C语言编程比较合适。但在实际开发时,针对硬件要求实时性比较强且计算比较复杂的,可以采用联合设计方式,即混合编程,以发挥汇编语言和C语言各自的长处。一、编程举例在一个项目中加入汇编语言程序有两种方法:一种方法是使用Inline assembly;另一种方法是将汇编程序写在一个文件中,然后再从主程序中调用这些用汇编语言编写的子程序。以下分别进行介绍。1。使用Inline assembly,也

2、就是在程序中直接加入汇编语言代码。例如:  …  Void callasm()  {   #pragma asm;   Delay:MOV R0,#248;   DJNZ R0,$   #pragma endasm;}…直接加入汇编语言代码时,使用编译指令#pragma asm 和#pragma endasm 。 编译指令#pragma asm 和#pragma endasm之间加入汇编语言代码。2。将汇编程序写入在一个文件中,再从主程序中调用这些使用汇编语言写的子程序。例如:   C语言代码段: 

3、  #include   Extern void callasm ();//声明外部汇编函数callasm   Void main(){   Uchar temp;….   Callasm();….    }汇编语言代码段:   PUBLIC _CALLASM;   //CALLASM 为其他模块调用   DE SEGMENT CODE;   //定义DE段为再定位程序段   RSEG DE;选择DE为当前段   ……   ¬_CALLASM:   Delay:MOV R0,#24

4、8;   DJNZ R0,$RETEND二、C语言程序和汇编语言程序参数的传递    上述两种方法都存在C语言代码段和汇编语言代码段参数传递的问题。下面分别介绍。KEIL C51编译器可以使用寄存器传递参数,也可以使用固定存储器或使用堆栈。由于8051的堆栈深度有限,因此建议使用寄存器传递参数,最多只能传递3个参数,并只能选择寄存器。如附表所示。例如:#include 。。。。。Extern void callasm (uchar);//定义外部汇编函数callasmVoid ma

5、in(){……Temp=P2;//数据传递到外部汇编函数callasmCallasm(temp);//调用外部汇编函数callasm……}汇编语言代码段:PUBLIC_CALLASM;CALLASMMAX为其他模块调用DE SEGMENT CODE;定义DE段为再定位程序段RSEG DE;//选择DE为当前段_CALLASM:PUSH ACCPUSH PSW;保护累加器和寄存器MOV  A,R7;从R7取传递的数据MOV  P1,APOP  PSWPOP  ACCRET。。。。。END如果传递参数寄

6、存器不够用,可以用存储器,直接通过存储器传送。方法如下:在C语言的主程序和汇编程序中声明相同的地址值的数据区域,通过共享此数据区域来传数据。当我们声明C语言的变量时,可以指定变量在某一个特定位置,声明方式如下:数据类型 idata变量名字_at_指定存储器位置。其中, idata 是指所声明的变量放在8051RAM中。当然,也可以声明放在其他的存储器中。在汇编程序代码中,声明的方式如下:变量名字EQU相同的地址值的数据区域。例如:#includeUnsigned char idat

7、a temp _ata_ 0x40;//声明RAM的数据区域Extern void callasm();//定义外部汇编函数callasmVoid main(){。。。。。。Temp=P2;//传递参数到指定的储存区位置Callasm();//调用外部汇编函数callasm……}汇编语言代码段:PUBLIC CALLASM;CALLASM为其他模块调用DE SEGMENT CODE;//定义DE段为再定位程序段RSEG落DE;//选择DE为当前段TEMP落EQU 40H;//声明相同的地址值的数据区

8、域……CALLASM:PUSH ACCPUSH PSW;//保护累加器和寄存器MOV A,TEMP;//从共享的数据区域中取出数据MOV P1,APOP PSW;POP ACCRET……END1.传递的不同类型的参数,要和扬选用的寄存器一一对应,不然,将会产生参数传递错误、传递丢失等。2.C语言主程序调用汇编语言了程序时,注意累加器和寄存器的内容都必须自行保护。如果不维护不当,可能会造成不可预期的结果。一般而言,进入汇编程序后,马上将累加器A和寄存器R0~R7压栈,等

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。