庞新法PANGXin-fa
(陕西省委党校科技教研部,西安710061)
(ResearchandTechnologyDepartment,ShaanxiProvincePartySchooloftheCPC,Xi'an710061,China)
摘要:C语言是一种高级的面向过程的开发语言,汇编语言是一种低级的面向机器的编程语言。两者在程序设计开发方面各有优劣,目前两者的混合编程得到了广泛的应用。本文通过具体的实例,说明了混合编程的基本方法,为C语言应用开发人员提供方便。
Abstract:Clanguageisahigh-levelprocessorientedlanguageandassemblylanguageisalow-levelmachineorientedprogramminglanguage.Bothintermsofprogramdesignanddevelopmenthaveadvantagesanddisadvantagesandthecurrentmixofbothprogramminghasbeenwidelyused.Thispaper,throughspecificexamples,illustratesthebasicmethodsofhybridprogrammingwhichprovidesconveniencefortheClanguageapplicationdevelopers.
关键词:C语言;汇编语言;混合编程
Keywords:Clanguage;assemblylanguage;mixedprogramming
中图分类号:TP313文献标识码院A文章编号院1006-4311(2014)24-0231-02
0引言
汇编语言是一种面向机器的语言,其优点是运行速度快,占用存储空间小,可直接对硬件进行控制。缺点是编写、调试困难、移植性差。C语言简洁、灵活、库函数丰富、调试方便、移植性好,目前已被广泛地应用于系统软件和应用软件的开发中,为了发挥各自优势,取长补短,采用混合编程。大部分程序,如界面、人机接口(外壳程序)、数据处理等用C语言编写,以提高程序的开发效率。而某些程序,如需要缩短程序的运行时间,或需要对硬件进行直接操作,或需要利用操作系统的某些功能模块,或频繁使用的程序、或需要占用内存空间少的程序(内核程序),则用汇编编写,以提高程序的运行效率。
1嵌入式汇编
嵌入式汇编也称行内汇编,源程序中直接插入汇编语句。汇编语句可直接访问C程序中定义的常量、变量、函数。不必考虑二者之间的接口,方便编程。
1.1嵌入式汇编语句的格式
格式:asm操作码操作数[;或换行]其中:操作数可以是汇编语句中的立即数、寄存器、表达式等还可以是C中的常量、变量、标号等。分号;是汇编语句结束符,并非注解,要用注解,用C的注解。如下例所示。
盂汇编语句的数据定义放在函数外面,指令放在函数里面。
所有在函数外的的汇编语句都作为数据声明处理,即在编译器编译时会将它放在数据段中,也就是说不可以在函数外面写汇编命令语句,把指令当数据。
所有在函数内的汇编语句必须是指令性语句,在编译后都放在代码段中。也就是说不可以在函数内使用汇编数据定义语句,把数据当指令。
榆不要在以asm开头的语句中使用C语言的关键字,这会导致编译错误
1.4编译过程
命令行键入命令:TCC-B-Iinclude-Llib文件名.c即可.TCC会自动调用TASM.EXE和TLINK.EXE,并且TLINK.EXE能正确的找到需要的.obj和.lib文件,要保证TC目录下存在TASM.EXE文件。如果单步编译,可能会碰到很多的问题,主要是TLINK.EXE不会自己去找.obj和.lib文件。该命令的功能是:.C寅编译TCC寅.ASM寅汇编TASM寅.OBJ寅连接TLINK寅.EXE。
2TurboC模块连接方式C、汇编程序各自编程,各自编译,然后连接在一起。
2.1汇编语言与C语言接口规则
淤命名约定:汇编的名字前加一个下划线,C的名字前不加下划线(编译后内部自动加),以确保两个模块内部名字一致。
于声明约定:汇编、C模块对自己未定义但要用的别的模块的名字要声明。
C模块声明格式:函数声明格式:extern类型函数名(形参表);如例5z1.c。
变声明格式:Extern类型变量;汇编模块声明格式:函数声明格式:extern函数名:属性(near,far)。
变声明格式:Extern变量名:属性(byte,word,dword等)自己定义的可供别的模块引用的也必须声明。汇编模块声明格式:PUBLIC名字(变量名或函数名)如例6z2.asm。
C模块声明格式:全局变量,函数名前不加static即可。
盂寄存器要保护:C调汇编程序时,汇编子程序中用到的寄存器最好全部保护,退出时恢复,以免影响主程序C的执行。
榆C、汇编程序存贮模式要一致。
2.2编译连接
淤TASM文件名,把汇编程序翻译成目标程序。TCCC文件名,把C程序翻译成目标程序,C只编译不连接。于TLINK把若干个目标程序连接成一个EXE程序。盂运行。
3结语
混合编程,主要涉及接口,汇编调C的函数、全局变量。C调汇编的函数、变量。本文对此做了浅述。
参考文献:
[1]谭浩强.C语言程序设计[M].清华大学出版社,2004.
[2]丁爱萍.C语言程序设计实例教程[M].西安电子科技大学出版社,2006.
[3](美)布鲁姆著,马朝晖译.编语言程序设计[M].北京:机械工业出版社,2006援