欢迎来到天天文库
浏览记录
ID:33589165
大小:236.16 KB
页数:10页
时间:2019-02-27
《c语言与汇编语言混合编程的方法》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、维普资讯http://www.cqvip.com1993矩化工电子计算第2期C语言与汇编语言混合编程的方法f/1)(南京犬李葛于如丽顶吾学系)摘要本文通过实例阐述了当前较为漉行的两种c语盲(MicrosoftC和Turboc)与汇编语盲混台绾程的方法及其有关技术问题.√√关键词迫堤豆内部汇编一、概述C语言是一种高效且有力的语言,而MicrosoftC和TurboC是当前最为流行的两种C语言的编译版本,尽管它们能够产生极快而又极紧凑的目标代码,然而它们还是不可能达到汇编语盲所生成的高质量的目标码。在某些特殊应用场合中,还需借助于汇编语言实现一些特定的
2、操作,倒如有些对浮点数操作速度要求极高,还有的函数要求访问计算机系统的硬件资源或操作系统的某些特定功能,象对某种硬设备进行准确定时等,此时用汇编语言实现就比用C语言较方便且目标质量更高。相反.在用汇编语言编程过程中,有些过程或某些算法的予程序用汇编语言完成较为周难,而用C语言书写可用C的现有函数,则更为自然且更具商用价值。因此,在虚用开发中两种语言的混合使用是经常发生的。一般而言,在高级语言中使用汇编语言主要有以下几个原因‘:·提高程序中某些关键部分的执行速度与效率一·完成高级语言中难以实现或没有的功能一·缩短程序中某些模块的目标代码以减少存储开销
3、,·使用汇编语言的通用软件包·利用别’人已开发的较为成熟的汇编子程序。注意,C语言与汇编语言混合编程是一项高级技术,为使混合编写的程序能生成高质而有效的目标代码.还必须搞清楚宿主计算机的内存储器组织.操作系统和连接程序(uNK)等一些问题,例如,程序代码段和数据段的划分.全局变量的存取,以及连接程序如何将不同模块中程序段与数据段·(或称代码与数据)进行组合,以达到提高程序的执行速度和缩短程一.1一维普资讯http://www.cqvip.com序代码长度等。所有这些问题都与特定的计算机系统有关。本文讨论的宿主计算机是运行MDOS的IBMPC及其兼容
4、的系列计算机,而MicrosoftC和TurboC以及汇编程序(MASM)均是该系列上最为流行的编译程序。二、调用约定所谓调用约定是指在混合语言编程中.使用各种语言编写程序(包括函觳、过程、子程序甚至全局变量等)时所应共同遵循的一些准则.只有双方都按照同一个约定来编程才能把它们有效地结合起来t达到相互调用或引用的目的,这些约定包括两者之间相互传送参数的方式与顺序.寄存器使用以及返回值的方法等。在讨论调用约定之前.先介绍一下IBMPC机(cPu为Imel80X86)的内存组织形式.将有助于混合编程的实现。1.内存组织形式与段结构以Imel80X86馓
5、处理器为CPU的IBMPC系列把内存分成若干个段.例如程序代码段、数据段、堆栈段等,每个段最大可达64kB。段的划分由CPU中的四个段寄存器(cs,DS,SS,E)来指出。每个段内的偏移量由其它寄存器指出,IP,sI,DI等。于是内存的物理地址由段址和段内偏移量两部分构成。对于上述段结构的操作.在汇编语言和C语言中都提供了相应的手段.在汇编语言中通过SEGMENT.ENDS和ASSUME两条伪指令来实现的。sEG—MENT—ENDS的语言格式为{段名SEGMENT(定位方式>(联合方式>(类型名>;._汇编语句.’i段名NDS其中段名是为该段所起的
6、名字,.汇编程序将为该段分配存储器的起始地址。程序设计者必须为每一个段(程序段或数据段)取一个名字.并且允许几个不同的段起相同的名字。定位方式是指该段起始地址的定位对齐方式,连接程序按以下几种定位方式把联合后的段连接起来生成目标代码。定位方式有BYTE(字节)、WoRD(字.2字节,.DWORD(双字。4’字节).PARA(节.16字节),PAGE(页,256字节),缺省时为PARA定位方式。联台方式是对名字相同l韵段的处理方法,即把程序的不阿模块中段名相同的段联合成一个大段放在连续的内存区域中。并共用一个段寄存器,联合时段与段之间仍按各自的定位方
7、式要求.联台方式有PUBLIC、STACK、COMMON、MEMORY、AT地址和PRIVATE(不指定方式)六种。各种联合方式的细节请参阅汇编语言手册。段的类型是指给同一种类型源码(程序或数据)取的名字,连接程序把类型名相同的源码段放在内存连续的区域内,但仍是不同的段。请注意.一般情况下.连接程序所期望的代码段、敷据段和堆栈段的类型名分别为‘CODE’,‘DATA’和‘STACK’。另外。在汇编语盲中还提供一种段的组合办法,即利用GROUP曲指令把模块中不同名的段组合成一个组。并装入同一个物理段(组的长度不超过6dkB)中。其优点可得到较为紧凑且
8、执行速度快的代码。在C编译程序生成的目标模块中.也含有与汇编语言中相应的段和组的信息。C源程序中一2一’维普资讯http:
此文档下载收益归作者所有