APP下载

汇编语言与C语言的混合程序设计技术

2013-04-29康晶晶

计算机时代 2013年6期
关键词:汇编语言C语言

康晶晶

摘 要: 汇编语言作为一种面向机器的语言,具有占用存储空间小、运行速度快的优点,并可直接控制硬件,在某些场合具有重要的作用;然而,汇编语言的编写和调试却相对困难和复杂,在进行数值混合运算与数据处理上尤为突出。C语言具有开发效率高,功能丰富、使用灵活、表达能力强的优点。在软件开发中,采用汇编语言与C语言混合程序设计技术,能有效提高运行效率。笔者结合自身工作经验,具体探讨了这一混合程序设计技术,希望能为广大同行提供借鉴。

关键词: 汇编语言; C语言; 混合编程

中图分类号:TP311.1 文献标志码:A 文章编号:1006-8228(2013)06-01-02

Exploration on design technique of hybrid programming of assembly language and C language

Kang Jingjing

(Institute of Information, Shanxi Agricultural University, Jinzhong, Shanxi 030800, China)

Abstract: Assembly language, as a machine-oriented language, has advantages of less storage space and faster processing, and can directly control hardware. It plays an important role in some occasions. However, writing and debugging in assembly language are relatively difficult and complicated, especially when conducting numerical hybrid computing and data processing. C language shows strengths of high efficiency of development, abundant feature, flexibility, strong expression abilities. During developing software, hybrid programming of assembly language and C language can effectively improve operational efficiency. Combined with author's own work experience, the technique is discussed in detail, in order to provide a reference for the peers.

Key words: assembly language; C language; hybrid programming

0 引言

在大型程序的设计中,如果将汇编语言程序和高级语言程序结合使用,能充分发挥其各自的优点,实现两种语言的混合编程。在程序设计中,C语言可以调用汇编语言的子程序,而汇编语言也可调用C语言的子程序,还可在C语言程序中嵌入汇编语句,具有极大的优点[1]。同时,在混合编程中,模块的连接、参数的传递和调用关系的确定等都是应当引起编程者注意的重要问题。

1 汇编语言与C语言混合编程的方法

汇编语言与C语言混合编程的方法主要包括以下几种:

⑴ 在C语言程序中使用汇编程序定义的常量与变量[2];

⑵ 在C语言程序中内嵌汇编语句,实现C语言不能做到的对硬件的控制功能;

⑶ 在C语言程序中使用内部函数调用汇编语句;

⑷ 混合编程时,单个任务可被分成若干个功能模块,每个功能模块均以子程序或函数的形式存在,根据各单一模块的特点,选择合适的编程语言进行独立编程,然后通过对应的语言编译系统编译成目标文件,最后将诸多目标文件集合在一起成为一个可执行文件。

1.1 C语言程序嵌入汇编语句

在C语言中,可直接编写汇编语言代码,在C语言中嵌入汇编语句时不需要分号,具体语法为:

asm

如果要嵌入一组语句,则需要用大括号{}将其括起来:

asm {

mov ax,data1

xchg ax,data2

mov data1,ax

}

C语言允许嵌入的汇编命令包括四类:一般指令、跳转指令和数据定义、串操作指令、分配指令。

1.2 C语言调用汇编语言子程序

为了实现C语言对汇编语言子程序的调用,汇编语言源程序一定要严格依据编译系统要求或约定的段组合和段顺序。

⑴ 汇编语言子程序格式

汇编语言子程序的格式通常为:

MYCODE SEGMENT PARA PUBLIC ‘CODE

PUBLIC_函数名;公共符号说明

DGROUP GROUP MYDATA,MYBBS

MYDATA SEGMENT WORD PUBLIC ‘CODE

...定义变量,初始化数据

MYDATA ENDS

MYBBS SEGMENT WORD PUBLIC ‘CODE

...非初始化数据,开辟内存区

MY BBS END

ASSUME

CS:MYCODE,DS:DGROUP,SS:DGROUP

...

_函数名 PROC NEAR/FAR

PUSH BP

MOV BP,SP

PUSH SI

PUSH DI

...程序主体语句

POP DI

POP SI

POP BP

RET

_函数名 END UP

...

MYCODE ENDS

END

⑵ 被调用汇编语言的子程序格式

将被调用的程序的格式与一般汇编语言程序的格式相对比,可得以下结论:

第一,由于汇编语言子程序与C语言程序共用一个堆栈段,因此,汇编语言子程序的开头必须运行以下两个命令:

PUSH BP

MOVE BO,SP

第二,将要被C语言程序调用的子程序必须要以PUBLIC伪操作来说明该子程序是外部调用的。

第三,C语言程序允许子程序使用DI和SI存放局部变量,当变量超过两个时才可存放在堆栈中,因此,模式中出现了PUSH DI与PUSH SI语句[3]。

第四,在整个程序中,定义了MYCODE代码段、MYDATA初始化数据段、MYBBS费初始化数据段,并将MYBBS与MYDATA合成为DGROUP段组,且同一段组中各段共享基址。

第五,程序主体语句部分要有函数值返回语句,该返回值必须在RET语句前。

第六,被调用过程要以RET命令返回。

第七,结束处的END只表示程序的结束,未标示启动位置。

1.3 汇编语言调用C语言子程序

汇编语言具有C语言难以比拟的优势,如:输入时可采用任意进制的数据,并可直接对其读取。因此,可以在汇编程序中调用C语言子程序。

汇编语言主程序的格式与其子程序相同,只需在程序开始处添加语句:

EXTERN 函数名

用以说明该函数是被调用的C语言子程序,是外部的。

在主过程语句中,可通过CALL语句调用外部函数,格式为:

CALL NEAR PTR 函数名

当C语言子程序作为子程序时,其中可只含有C函数,无需EXTERN说明。

2 C语言与汇编语言的连接

2.1 参数传递

C语言和汇编语言在调用时会有参数传递的问题,通常采用堆栈来传递,在汇编语言中,将BP作为基址寄存器,先将来源于C语言的参数压入堆栈,当使用这些参数时,再通过BP利用不同的偏移量对堆栈中的数据进行存取[4]。

2.2 确定调用关系

对将要调用的函数或过程,应进行事先说明,建立调用、被调用关系,被调用的函数或过程应先说明外部类型,调用程序也应说明要引用的外部模块。

此外,还应依据存储模式的不同而确定汇编语言格式,C程序大模式通常对应汇编程序的远类型过程,而C程序小模式通常对应汇编程序的近类型过程[5]。

2.3 C语言与汇编语句程序的模块连接

汇编语言与C语言模块的正确连接有两点要求:汇编模块与C模块的存储方式须一致;汇编模块必须遵从与C模块兼容的命名约定。编译系统在编译C源程序时,会在函数名和变量名前加下划线,为保持连接前后的一致性,所有被C语言调研的汇编子程序标示符都应加下划线。同时,为使汇编语言标示符在C语言中可见,必须以PUBLIC定义。汇编语言中的C语言函数与变量,须在其前加下划线,汇编程序开始部分调用的C函数与变量则应以EXTERN说明[6]。

3 结束语

综上所述,C语言与汇编语言混合编程可互相取长补短,发挥各自优势,进行参数传递、共享数据结构和数据信息,从而用以开发出更安全、实用、可靠的元件,使软件开发与编程事半功倍。

参考文献:

[1] 宋金华.汇编语言和C语言在图形处理中的综合应用[J].湖北广播电

视大学学报,2010.10(12):11-12

[2] 张银,索旭华,廖建林,郭娟.AOCC应用软件的快速仿真平台的研究

与技术实现[J].航天控制,2010.4(2):55-56

[3] 罗南超,向昌成,李唐辉.汇编语言实现多种进制的通用输入输出[J].

电脑知识与技术,2008.5(36):120-121

[4] 王文东,李竹林,尚建人.汇编语言与C语言的混合程序设计技术[J].

计算机技术与发展,2006.8(8):89-90

[5] 左艳丽.C语言和汇编语言混合编程的方法和实现[J].职教与经济研

究(娄底职业技术学院学报),2008.6(3):12-13

[6] 王咏宁.高级语言与汇编语言混合编程的实现方法[J].科技信息(学术

研究),2007.10(24):101-102

猜你喜欢

汇编语言C语言
基于Visual Studio Code的C语言程序设计实践教学探索
高等学校计算机专业课程教学改革实践——以汇编语言与接口技术课程为例
汇编语言与C语言的混合程序设计技术研究
基于C语言的计算机软件编程
C语言程序设计课程教学与学科专业相结合的探索
提高《汇编语言程序设计》教学效率的思考与实践
高职高专院校C语言程序设计教学改革探索
试论汇编语言与C语言的混合程序设计技术
论子函数在C语言数据格式输出中的应用
非计算机专业C语言教学探讨