资源描述:
《汇编语言与CC的混合编程课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、教学重点第7章介绍实际应用当中,常见的混合编程问题,重点是参数传递方法混合编程的两种方式模块连接的约定规则模块连接的参数传递方法C++代码优化1什么是混合编程多种程序设计语言间,通过相互调用、参数传递、共享数据结构和数据信息而形成程序的过程就是混合编程程序的大部分采用高级语言编写,以提高程序的开发效率;在某些部分,利用汇编语言编写,以提高程序的运行效率混合编程方法嵌入式汇编——在C/C++语言中直接使用汇编语言语句,简洁直观、功能较弱模块连接——两种语言分别编写独立的程序模块,分别产生目标代码OBJ文件,然后进行连接,形成一个完整的程序使用灵活、功能强,要解决参数传递问题混合编程
2、的关键问题建立不同语言之间的接口在不同格式的两种语言间提供有效的通讯方式,作出符合两种语言调用约定的某种形式说明,实现两种语言间的程序模块互相调用、变量的相互传送以及参数和返回值的正确使用7.1TurboC嵌入式汇编方式格式asm操作码操作数<;或换行>举例asmmovax,ds;asmpopax;asmpopds;asmret;asmpushds/*asm语句是C程序中唯一可以用换行结尾的语句*/若干注意事项操作码支持8086/8087指令或若干伪指令:db/dw/ddextern操作数是操作码可接受的数据:立即数、寄存器名,还可以是C语言程序中的常量、变量和标号等内嵌的汇编语
3、句可以用分号“;”结束,也可以用换行符结束使用C的注释,如/*…*/正确运用通用寄存器、标号等6访问C语言的数据嵌入的汇编语句除可以使用指令允许的立即数、寄存器名外,还可以使用C语言程序中的任何符号(标识符),包括变量、常量、标号、函数名、寄存器变量、函数参数等;C编译程序自动将它们转换成相应汇编语言指令的操作数,并在标识符名前加下划线。对于具有内嵌汇编语句的C程序,C编译器要调用汇编程序进行汇编。汇编程序在分析一条嵌入式汇编指令的操作数时,若遇到了一个标识符,它将在C程序的符号表中搜索该标识符;但8086寄存器名不在搜索范围之内,而且大小写形式的寄存器名都可以使用。7访问C语言
4、的数据例7.1:用嵌入汇编方式实现取两数较小值的函数min/*LT701.C*/intmin(intvar1,intvar2)/*用嵌入汇编语句实现的求较小值*/{asmmovax,var1asmcmpax,var2asmjleminexitasmmovax,var2minexit:return(_AX);/*将寄存器AX的内容作为函数的返回值*/}main() /*C语言主程序*/{min(100,200);}注意事项8嵌入汇编的编译过程C语言程序中含有嵌入式汇编语言语句时C编译器首先将C代码的源程序(.c)编译成汇编语言源文件(.asm)然后激活汇编程序TurboAss
5、embler将产生的汇编语言源文件编译成目标文件(.obj)最后激活Tlink将目标文件链接成可执行文件(.exe)。9/*LT702.C*/#includevoidupper(char*dest,char*src){asmmovsi,src/*dest和src是地址指针*/asmmovdi,destasmcldloop:asmlodsb/*C语言定义的标号*/asmcmpal,'a'asmjbcopy/*转移到C的标号*/asmcmpal,'z'asmjacopy/*不是’a’到’z’之间的字符原样复制*/例7.2-1/2asmsubal,20h/*小写字母转
6、换成大写*/copy:asmstosbasmandal,al/*C语言中,字符串用NULL(0)结尾*/asmjnzloop}main()/*主程序*/{charstr[]="ThisStartedOutAsLowercase!";charchr[100];upper(chr,str);printf("Originstring:%s",str);printf("UppercaseString:%s",chr);}例7.2-2/2DEMO例7.27.2TurboC模块连接方式要注意模块连接的约定规则命名约定:汇编语言过程应采用C语言类型声明约定寄存器使用约定存储模式
7、约定:采用相同的存储模式参数传递是关键通过堆栈传递入口参数通过寄存器返回出口参数7.2.1混合编程的约定规则12;汇编语言子程序:lt703s.asm.modelsmall,c;小型存储模式.datamsgdb’Hello,CandAssembly!$’.codePUBLICdisplaydisplayprocmovah,9;小型模式不必设置DSmovdx,offsetmsg;寄存器AX和DX无须保护int21hretdisplayendpend例7.3-1/27.2.2编译和连