汇编语言与C/C的混合编程.ppt
《汇编语言与C/C的混合编程.ppt》由会员分享,可在线阅读,更多相关《汇编语言与C/C的混合编程.ppt(37页珍藏版)》请在三一办公上搜索。
1、第7章 汇编语言与CC+的混合编程,2,教学重点,第7章介绍实际应用当中,常见的混合编程问题,重点是参数传递方法混合编程的两种方式模块连接的约定规则模块连接的参数传递方法C+代码优化,什么是混合编程,多种程序设计语言间,通过相互调用、参数传递、共享数据结构和数据信息而形成程序的过程就是混合编程程序的大部分采用高级语言编写,以提高程序的开发效率;在某些部分,利用汇编语言编写,以提高程序的运行效率,混合编程方法,嵌入式汇编在C/C+语言中直接使用汇编语言语句,简洁直观、功能较弱模块连接两种语言分别编写独立的程序模块,分别产生目标代码OBJ文件,然后进行连接,形成一个完整的程序使用灵活、功能强,要解
2、决参数传递问题,混合编程的关键问题,建立不同语言之间的接口在不同格式的两种语言间提供有效的通讯方式,作出符合两种语言调用约定的某种形式说明,实现两种语言间的程序模块互相调用、变量的相互传送以及参数和返回值的正确使用,7.1 Turbo C嵌入式汇编方式,格式asm 操作码 操作数 举例asm mov ax,ds;asm pop ax;asm pop ds;asm ret;asm push ds/*asm语句是C程序中唯一可以用换行结尾的语句*/,7,若干注意事项,操作码支持8086/8087指令或若干伪指令:db/dw/ddextern 操作数是操作码可接受的数据:立即数、寄存器名,还可以是C
3、语言程序中的常量、变量和标号等内嵌的汇编语句可以用分号“;”结束,也可以用换行符结束 使用C的注释,如/*/正确运用通用寄存器、标号等,8,访问C语言的数据,嵌入的汇编语句除可以使用指令允许的立即数、寄存器名外,还可以使用C语言程序中的任何符号(标识符),包括变量、常量、标号、函数名、寄存器变量、函数参数等;C编译程序自动将它们转换成相应汇编语言指令的操作数,并在标识符名前加下划线。对于具有内嵌汇编语句的C程序,C编译器要调用汇编程序进行汇编。汇编程序在分析一条嵌入式汇编指令的操作数时,若遇到了一个标识符,它将在C程序的符号表中搜索该标识符;但8086寄存器名不在搜索范围之内,而且大小写形式的
4、寄存器名都可以使用。,9,访问C语言的数据,例7.1:用嵌入汇编方式实现取两数较小值的函数min/*LT701.C*/int min(int var1,int var2)/*用嵌入汇编语句实现的求较小值*/asm mov ax,var1 asm cmp ax,var2 asm jle minexit asm mov ax,var2minexit:return(_AX);/*将寄存器AX的内容作为函数的返回值*/main()/*C语言主程序*/min(100,200);,注意事项,10,嵌入汇编的编译过程,C语言程序中含有嵌入式汇编语言语句时C编译器首先将C代码的源程序(.c)编译成汇编语言源文
5、件(.asm)然后激活汇编程序Turbo Assembler将产生的汇编语言源文件编译成目标文件(.obj)最后激活Tlink将目标文件链接成可执行文件(.exe)。,/*LT702.C*/#include void upper(char*dest,char*src)asm mov si,src/*dest和src是地址指针*/asm mov di,destasm cldloop:asm lodsb/*C语言定义的标号*/asm cmp al,aasm jb copy/*转移到C的标号*/asm cmp al,zasm ja copy/*不是a到z之间的字符原样复制*/,例7.21/2,asm
6、 sub al,20h/*小写字母转换成大写*/copy:asm stosbasm and al,al/*C语言中,字符串用NULL(0)结尾*/asm jnz loopmain()/*主程序*/char str=This Started Out As Lowercase!;char chr100;upper(chr,str);printf(Origin string:n%sn,str);printf(Uppercase String:n%sn,chr);,例7.22/2,DEMO例7.2,13,7.2 Turbo C模块连接方式,要注意模块连接的约定规则命名约定:汇编语言过程应采用C语言类型
7、 声明约定寄存器使用约定存储模式约定:采用相同的存储模式参数传递是关键通过堆栈传递入口参数通过寄存器返回出口参数,7.2.1 混合编程的约定规则,;汇编语言子程序:lt703s.asm.model small,c;小型存储模式.datamsgdb Hello,C and Assembly!$.codePUBLIC displaydisplayprocmov ah,9;小型模式不必设置DSmov dx,offset msg;寄存器AX和DX无须保护int 21hretdisplayendpend,例7.31/2,7.2.2 编译和连接过程,/*C语言程序:lt703.c*/extern void
8、 display(void);/*说明display是外部函数*/main()display();,利用汇编程序编译汇编语言程序成目标代码文件:ML/c lt703s.asm 或 masm lt703s.asm利用C编译程序编译C程序、连接目标代码文件:TCC-c lt703.c,例7.32/2,DEMO,16,编译和连接过程,利用连接程序将各个目标代码文件连接在一起,得到可执行程序文件,例如:TLINK libc0s lt703 lt703s,lt703.exe,libcs注意:直接使用Turbo C的连接程序TLINK进行连接时,用户必须指定要连接的与存储模式一致的初始化模块和函数库文件,
9、并且初始化模块必须是第一个文件。编译和连接也可以利用命令行一次完成,一般格式为:TCC-mx-I包含文件路径-L库文件路径 filename1 filename2.例如,上例可以利用如下命令:TCC-ms-Iinclude-Llib lt703.c lt703s.obj,17,7.2.3 混合编程的参数传递,Lt0701.c 的编译结果如教材P218 mov ax,200 push ax;压入参数200(第2个参数)mov ax,100 push ax;压入参数100(第1个参数)call near ptr _min;调用min(100,200)pop cx;两条出栈指令用于平衡堆栈 pop
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 混合 编程
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-6586375.html