第 7 章
教学重点
第7章介绍实际应用当中,常见的混合编程问题,重点是参数传递方法
混合编程的两种方式
模块连接的约定规则
模块连接的参数传递方法
C++代码优化
什么是混合编程
多种程序设计语言间,通过相互调用、参数传递、共享数据结构和数据信息而形成程序的过程就是混合编程
程序的大部分采用高级语言编写,以提高程序的开发效率;在某些部分,利用汇编语言编写,以提高程序的运行效率
混合编程方法
嵌入式汇编——
在C/C++语言中直接使用汇编语言语句,
简洁直观、功能较弱
模块连接——
两种语言分别编写独立的程序模块,分别产生目标代码OBJ文件,然后进行连接,形成一个完整的程序
使用灵活、功能强,要解决参数传递问题
混合编程的关键问题
建立不同语言之间的接口
在不同格式的两种语言间提供有效的通讯方式,作出符合两种语言调用约定的某种形式说明,实现两种语言间的程序模块互相调用、变量的相互传送以及参数和返回值的正确使用
Turbo C嵌入式汇编方式
格式
asm 操作码操作数<;或换行>
举例
asm mov ax,ds;
asm pop ax; asm pop ds; asm ret;
asm push ds
若干注意事项
操作码支持8086/8087指令或若干伪指令:db/dw/dd和extern
操作数是操作码可接受的数据:立即数、寄存器名,还可以是C语言程序中的常量、变量和标号等
内嵌的汇编语句可以用分号“;”结束,也可以用换行符结束
使用C的注释,如/ * …* /
正确运用通用寄存器、标号等
/ * */
#include <>
void upper(char *dest,char *src)
{ asm mov si,src
/* dest和src是地址指针*/
asm mov di,dest
asm cld
loop: asm lodsb /* C语言定义的标号*/
asm cmp al,'a'
asm jb copy /* 转移到C的标号*/
asm cmp al,'z'
asm ja copy
/* 不是’a’到’z’之间的字符原样复制*/
-1/2
asm sub al,20h /*小写字母转换成大写*/
copy: asm stosb
asm and al,al
/* C语言中,字符串用NULL(0)结尾*/
asm jnz loop
}
main() /* 主程序*/
{
char str[]="This Started Out As Lowercase!";
char chr[100];
upper(chr,str);
printf("Origin string:\n%s\n",str);
printf("Uppercase String:\n%s\n",chr);
}
-2/2
Turbo C模块连接方式
要注意模块连接的约定规则
命名约定:汇编语言过程应采用C语言类型
声明约定
寄存器使用约定
存储模式约定:采用相同的存储模式
参数传递是关键
通过堆栈传递入口参数
通过寄存器返回出口参数
第7章 汇编语言与CC++的混合编程 来自淘豆网www.taodocs.com转载请标明出处.