基于汇编语言与C/C++语言混合编程的设计研究

2017-04-15 05:42:50山东省潍坊第一中学高68级李明阳
电子世界 2017年3期
关键词:汇编语言子程序C语言

山东省潍坊第一中学高68级 李明阳

基于汇编语言与C/C++语言混合编程的设计研究

山东省潍坊第一中学高68级 李明阳

计算机与人们的生活已经紧密的联系在一起,计算机功能的实现主要依靠计算机语言,通过计算机语言编制相应的程序。在涉及到大规模程序设计的时候,采用单一语言就无法发挥应有的优势,不同语言进行混合编程能够实现优势互补,对于实际问题的解决非常有效。本文就基于汇编语言与C/C++语言混合编程的设计研究作简要的阐述。

汇编语言;C++;设计研究

汇编语言的特点在于占用的空间小,运行的速度快,是面向机器的一种语言,在某些场合具有无可替代的作用。其不足之处在于较为高级的语言程序编写存在一定难度,在处理数据时这一点体现的更加明显。C++是一种高级语言,功能丰富,表达灵活,开发高效,在应用性方面要胜过汇编语言。但是在考虑到执行速度,占用空间的前提下,C++语言则不具有优势。

一、两种语言进行混合编程的约定

两种语言进行混合编程的时候主要有以下几个方面的约定。

C++与汇编语言进行编程的时候,首先要采用一致的调用协议,C++有三种调用协议。其次是入口及返回参数的确定,在C++中所有的调用都是32位的偏移地址。最后是要声明公用函数名与变量名。

C语言在调用汇编语言时标识符前要添加下划线,相互调用的时候,汇编语言中标识符要依照C++语言的习惯。

声明约定,对于需要调用的外部函数,变量都进行相应的说明,标识符是为了在其它的模块可见[1]。对于BP,DS,CS,SS,SP在使用并改变其值时候,需要进行保护。两种程序的语言在存储模式方面要相同。存储模式相同就会产生兼容的调用及返回类型。

最后一点是传递参数的确定,压入堆栈与实参数表参数的顺序是相反的。

二、混合编程的方法

两种语言进行混合编程的方式主要有两种,一种是在C++源程序中直接插入汇编语言代码,此种方式也被称之为嵌入式汇编。另一种则是在程序中调用外部语言。

对于嵌入式汇编而言,在C++源程序中需要的地方插入汇编指令,并在嵌入的汇编指令加上相应的关键字。C++中内嵌汇编语言,在VisualC++6.0操作的时候,嵌入汇编指令,需要使用到关键字。其中在asm中的组汇编指令可以有标号,C++中的语句以及汇编指令也可以跳转,跳转位置是该组汇编指令中的标号或者是指令组之外的标号。那么,除此之外,asm所带的汇编指令调用的只能是无重载的全局C++函数,并且对函数的类型有一定的要求。以C++实现相同次数的减法为例,通过对两个程序运算比较,采用嵌入式汇编的速度要比单纯的采用C++语句快,从时间上计算,前者与后者相比,能够节约百分之三十的时间。对于实用性较高的工业领域,以及存在大量计算的开发软件中,采用两种语言进行混合编程的方法可以大大提升程序运行时的速度。

C++程序调用汇编程序。采用嵌入式汇编的方法,主要适用于程序较短的情况,然而在实际的运用中,通常通过语言调用的方式来实现。在汇编语言作为C++语言的外部子程序进行调用的时候,汇编程序的开存在两个必须要执行的命令,分别是movbp,sp与pusbbp。此处的两条指令是参数传递的关键,使得bp成为指向堆栈元素的指针。在这两命令后加上相应的语句就可以实现对不同数据的分配。其中局部数据的总的大小和是以字节进行计算的,局部数据保留空间则是通过sp值的减小来实现,在汇编的时候应该恢复该空间。在对某个参数进行访问的时候,可以通过bp与参数的位移量来进行确定。在此假设返回位置的字节数为N,参数与bp之间所占的字节的总数为M,则参数的部的位移量就是两者的和再加上二。

汇编程序退出的时候,如果在一开始就保存了寄存器值,那么就应该以与入栈相反的顺序弹出。在已分配局部空间数据的前提下,应该执行相应的命令,并返回调用程序。在调用结束后,子程序通过寄器DX与AX进行返回值传递,并且当返回值的类型是简单型的时候,在字节数不超过4字节时,返回值的长度与默认的存放器的关系有一定的对应规律。

C语言程序调用汇编语言子程序[2]。为了确保调用功能的正常,汇编源程序要严格依照编译系统的要求进行段组合。被调用的汇编语言子程序有一定的格式约定。由于程序存在堆栈段是面向机器的,对于汇编子程序开头有一定的特殊要求。为确保C语言主程序在调用的过程中不至于存在问题,需要用关键字对函数做显示的说明,被调用的语言过程为外部函数。

汇编语言程序调用C语言子程序。C语言不具有汇编语言的某些方面的优势,比如汇编程序在输入过程中可以直接读取数据。该种模式下,主程序的格式与子程序格式一致,唯一存在差别的是在程序的开头位置需要加入一定的语句,同时也省略了部分堆栈操作语言。

C语嵌入汇编语言。C语言中可以直接编写汇编语言的代码,汇编语句在C语言中嵌入没有分号,在嵌入一组语言的时候,则需要用一定的符号进行处理。在该种模式下,C语言允许嵌入四种命令,分别是一般指令,串操作指令,跳转指令,分配指令。

两种程序的相互调用。混合编程要注意几个方面的问题。参数传递的原则,寄存器的正确使用,存储模式,函数与变量之间的相互调用问题,子程序的返回值。汇编语言要用到多个寄存器,C++语言也会用到一定量的寄存器,对于寄存器应该重点关注,否则可能会导致程序的失败。C++语言中,BP作为参数及自动变量区的基地址。由于编译后的文件在函数与变量前自动的添加了下划线,汇编语言在调用C++语言的时候,同样要在函数名与变量名前添加下划线,并且在汇编程序的开始部分要对调用的变量及函数进行相应说明。反之或是C++语言程序调用汇编语言程序,汇编语言应该进行说明,并且变量与函数的第一个符号为下划线。当C++语言调用汇编语言子程序时,被调用的子程序返回调用它的程序的时,返回值是通过寄存器传递的。并且视返回值的不同情况放于不同的存储器中[3]。

三、结束语

C/C++语言与汇编语言结合在一起的混合编程应用性非常的广泛,二者结合在一起,能够有效的避免单一语言的不足,并将优势进行一步发挥,不足之处在结合后也会互补。C语言与汇编语言之间可以是调用与被调用的关系,也可以相互调用的关系。二者结合的时候要注意到相关方面的问题,比如内存模式与寄存器的不同分配对程序的影响。在编程的时候,尽可能的利用各自的优势,将过程简化,以最小的努力换取最大的收获。

[1]夏娟,赵梅.汇编语言与C/C++语言的混合编程[J].苏州市职业大学学报,2012(01).

[2]周晓燕.ARM汇编语言与C/C++语言混合编程实现方法[J].电子技术与软件工程,2014(03).

[3]李飒瑛.C语言与汇编语言混合编程技术研究[J].电子技术与软件工程,2013(14).

[4]孟祥娜.汇编语言与C语言混合编程方法探讨[J].电脑编程技巧与维护,2015(06).

猜你喜欢
汇编语言子程序C语言
基于Visual Studio Code的C语言程序设计实践教学探索
计算机教育(2020年5期)2020-07-24 08:52:56
高等学校计算机专业课程教学改革实践——以汇编语言与接口技术课程为例
计算机教育(2020年5期)2020-07-24 08:52:50
汇编语言与C语言的混合程序设计技术研究
电子制作(2019年10期)2019-06-17 11:45:16
基于C语言的计算机软件编程
电子制作(2018年16期)2018-09-26 03:27:08
提高《汇编语言程序设计》教学效率的思考与实践
高职高专院校C语言程序设计教学改革探索
浅谈子程序在数控车编程中的应用
论子函数在C语言数据格式输出中的应用
子程序在数控车加工槽中的应用探索
西门子840D系统JOG模式下PLC调用并执行NC程序