c语言与汇编语言混合编程的研究与实践

c语言与汇编语言混合编程的研究与实践

ID:34457616

大小:121.15 KB

页数:5页

时间:2019-03-06

c语言与汇编语言混合编程的研究与实践_第1页
c语言与汇编语言混合编程的研究与实践_第2页
c语言与汇编语言混合编程的研究与实践_第3页
c语言与汇编语言混合编程的研究与实践_第4页
c语言与汇编语言混合编程的研究与实践_第5页
资源描述:

《c语言与汇编语言混合编程的研究与实践》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、维普资讯http://www.cqvip.com第l0卷第2期达县师范高等专科学校学报(自然科学版)2000年6月Vo1.10No.2JournalofDaxianTeachersCollege(NaturalScienceEdition)Jnn.2000C语言与汇编语言混合编程的研究与实践;(达县师专枷理糸,口川达州635000)【摘要】本文介绍了TurboC的调用协议及其被C调用的汇编语言于程序的格式,最后蛤出了实现步骤及实例。【关键词】turboC至童塑旦堡塾C言泥舌编往[中圉分类号]TP313[文献标识码]B[文章编号]1008-4886(2000)02-0054-05

2、TJu『,,cL,、它函数也可互相调用,但绝不允许其它函数调用主函数。函数分为两类+无参函数和有参函数,调用1引言无参函数井不将数据传递给被调用函数+但可返回c语言是结构化、模块化、可编译的通用程序设函数值,一般用来执行指定的一组操作。对有参函计语言。由于其强大的功能,丰富的表达能力,高教数,函数之间是通过参数和返回值发生联系的。Tur—的代砑,良好的可移植性和灵栝性+较强的硬件控制boC的编译程序利用堆栈来实现函数之阃的参数传能力等特点,已被广泛用于系统软件、实用程序和应递一用寄存器来保存函数的返回值。例如+当在main用软件开发之中。但是,在直接与硬件接口、实时控()函数中

3、调用dive(a+b)时,其参数是从右至左制以厦运算速度要求很高的情况下,仍离不开汇编(先b后a)被压入堆拽的。井允许汇编子程序(过程)语言。在实际的软件设计中,经常会碰到C与编混使用寄存器sI和Dl来存放局部变量+子程序在执合编程的问题,这是一项繁杂而细致的工作。因此,行时,栈指针sP的当前值要传到基址指针寄存器正确地掌握C与汇编的接口技术是十分必要的BP中,以便使用BP的阗接寻址,从栈中读取数据,供子程序使用这样子程序在一般情况下应有如下2TurboC的调用协议指令:Basic语言提供了USR和cALL语句直接实现pushbppushdiBasic与汇编接口,但C语言不提供

4、这样的接口语pushsi句,汇编子程序只作为c的一十函数出现因此,在如果子程序中只有一个局部变量如x+仅用sI来存C程序中调用一个编程序r实际上是调用一十函数。要正确的实现C与编的接口,必须首先了解放其值就足够了。此种情况下,在子程序的开始部分TurboC在谓用函数时的若干协定。应有三条指令,用来保护sI和BP的内容,井使BP指向栈区菜单元。2.1利用堆栈传递参数pushhp一个用C语言编写的程序,都是由一个主函敷和若干个函数组成的。主函数可调用其它函数.其·[来稿日期]1999—5—12[作者简介]胡忠,男,选师专物理牟讲师。54维普资讯http://www.cqvip.co

5、mmovbp,sp返回值的处理过程(ep传递过程)如下:pusnSl(1)在汇编语言于程序中,把要返回给c程序的这时栈区情况如图1所示返回值,用mov指令传递到相应的寄存器中。(2】在C程序的调用函教中(被编译的编语言程序中)再用mov指令从寄存器中取出,传递蛤指定一(si)一的变量,如把ax中的返回值传递给C程序的生局变bp一(bp)‘量su中,其语句为bp+2movwordptrDGR0UPj‘su,ax一()一bp+4一(a)一bp+63编辑c程序及汇编语言子程序一(b)一上面首指出,C与汇编混合编程是一项繁杂而仔细的工作,编语言所编制的那一部分程序,实际图1保护现场后的

6、栈区情况上是作为C的一些函致而存在的。下面以一十除法由于系统堆栈是以字为单位的,变量类型为nt程序为倒进行说明。a和intb故也以字为单位压入堆栈中。每一种数据C\TCER>TYPEfile.ci类型在堆栈中所占的字节效如表1所示。返回地址intsu:车应是lP和CS的值,而这里是近调用,只需保存IPmain()值就行了然后在处理过程调用时,near调用,保存{su=dive(10,2){返回地址的编移量IP的值;far调用,保存返回地址printf(d\n,su)

7、的段地址cs值和填移量lP值。衰1参数传递时数据所占{

8、}的字节数3.1C程序首先将上述程序分成两个C源程序如下

9、2.2利用寄存器存放返回值crC\USER>TYPEm.ci汇编语言于程序的返回值,根据其类型进行存mtsuI放,若为8位或16位的,包括char.unsignedchar、main()short、unsignedshort、int、unsignedint和nearpoint—fsu—dire(10,2)}er.则存放在ax寄存器中;若为32位的,包括long、printf(d\n,su);unsignedlong、float和farpointer,贝I存放到dx(高16位)和ax(低16位

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。