程序语言混编

程序语言混编

ID:26375028

大小:119.50 KB

页数:30页

时间:2018-11-26

程序语言混编_第1页
程序语言混编_第2页
程序语言混编_第3页
程序语言混编_第4页
程序语言混编_第5页
资源描述:

《程序语言混编》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、汇编语言没有高级语言要占用较大的存储空间和较长的运行时间等缺点,它的运行速度快是高级语言所不能比拟的。可以说高级语言与汇编语言各有千秋。有时我们采用高级语言编程速度达不到要求,全部采用汇编语言编程工作量又大,此时可以采用"混合"编程,彼此相互调用,进行参数传递,共享数据结构及数据信息,是一种有效的编程方法。这种方法可以发挥各种语言的优势和特点,充分利用现有的多种实用程序、库程序等使软件的开发周期大大缩短。1高级语言与汇编语言的接口需要解决的问题1、需要说明和建立调用者与被调用者间的关系被调用的过程或函数应预先说明为

2、外部类型,如汇编子程序,应用PUBLIC说明其可被外部模块引用;调用程序则应预先说明要引用的外部模块名。2、参数传递问题在汇编子程序之间通常采用寄存器作为参数传递的工具,汇编语言与高级语言程序间的参数传递,一般采用堆栈来传递,即调用程序将参数依次压入堆栈中,当被转调用程序后,再从堆栈中依次弹出参数作为操作数使用。为此,必须了解各种语言的堆栈结构、生成方式和入栈方式等。BASIC、FORTRAN、PASCAL等语言其参数进栈顺序是与参数在参数表中出现的顺序相同,即从右到左;而C语言则相反。2C语言与汇编语言的接口2.

3、1C语言调用汇编子程序●在C程序中使用关键字"ExTERn"对函数作显式说明。●参数传递顺序是按其在参数表中出现的顺序的反序被压入堆栈中,即第一个参数最后进入堆栈,它在栈中的地址最低。●对不同的存储模式(极小、小、紧凑、中、大和巨)要选用不同的汇编语言格式,如C程序为小模式,汇编用近过程,C程序为大模式,汇编用远过程。●汇编程序取C的参数。远过程返回地址占四个字节,BP压入占二字节,所以第一个参数在BP+6所指向的单元。对于近过程第一个参数在BP+4所指向的单元。●汇编程序中寄存器的保护。TuRboC允许子过程使用

4、SI和DI存放局部变量,当寄存器变量多于二个时,多余部分会自动转到堆栈中存储。因此,汇编过程的格式为:PUSHBPMOVBP,SPPUSHDIPUSHSI……….语句………….POPSIPOPDIPOPBPRET●返回值。每种C数据类型都有一个标准的返回位置,一般在AX中(极小、小、中模式),DX:AX(紧凑、大、巨模式),如:chaR,unSignEdchaR,Enum,ShoRTinT等,返回值位置为AX,且返回数据必须放置在RET指令之前。汇编子程序要定义为远过程,并用PUBLIC伪指令把过程名定义为公共

5、。例:#includE〃STdio.h〃#includE〃STdlib.h〃chaRMESSagE[]=〃MESSagE〃;inTfaRREVSTR(chaRfaRSTR);Voidmain(Void){REVSTR((chaRfaR)MESSagE);printf(〃%S〃,MESSagE);}REVSTR.asm…PUBLIC-REVSTR-REVSTRPROCPUSHBPMOVBP,SPPUSHDSPUSHSIPUSHDI…POPSIPOPAXMOVDS,AXPOPBPMOVAX,CXRETREVSTREND

6、PEND2.2C语言嵌入汇编在C程序中允许直接编写汇编语言代码,这称作嵌入汇编。C程序中嵌入汇编后可以无分号(C语言的语句以分号结束,汇编语句是C语言中唯一以换行结束的语句),以关键词ASM张一个嵌入汇编指令,如需多个ASM语句,可以将它们放在花括号内。如,ASMMOVAX,DX/注释/ASMPUSHAX}/注释/C语言允许嵌入四类汇编命令:一般指令、串指令、跳转指令、数据分配和定义指令,嵌入汇编比调用汇编子程序更方便、灵活、功能也更强。但嵌入汇编不是一个完整的汇编程序,所以许多错误不能马上检查出来。3结束语采用两

7、种或两种以上的编程语言组合编程,彼此相互调用,进行参数传递,是一种有效的程序设计方法。这种方法可以充分发挥各种语言的优势,充分利用现有的实用程序,是当前程序接口技术的一个重要研究和应用领域WIN-TC使用TC2内核所以嵌入汇编得用TC2的语法:方法是使用asm关键字:其格式是:asmopcode<;newline>例如:main(){char*c="hello,worldr$";asmmovah,9asmmovdx,casmint33printf("Yousucessed!");}/***

8、************C内嵌汇编示例***************/#include"stdio.h"#include"conio.h"intmin(intv1,intv2){asmmovax,v1;asmcmpax,v2;asmjleminexit;asmmovax,v2;minexit:return(_AX);}main(){printf("min(1

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

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

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