C/C++语言是一个被广泛使用的程序设计语言,它不仅具有良好的高级语言特征,而且还具有一些低级语言的特点,如:寄存器变量、位操作等。所以,C语言的程序与汇编语言程序之间能很平滑地衔接。另外,目前主要的C语言程序开发环境,如:Turbo C/C++、Borland C/C++等,也都提供了很好的混合编程手段。
这里介绍汇编语言和C语言的混合编程和调用方法。虽然其它高级语言,如:Pascal、Basic等,也可与汇编语言混合使用,但出于其应用范围的考虑,不再对它们进行介绍,感兴趣的读者可参阅有关技术资料。
汇编指令的嵌入
为了提高C语言程序内某特殊功能段的处理效率,我们可以在其源程序中嵌入一段汇编语言程序段。这样做,虽然能达到提高了程序处理效率的目的,但它无疑以丧失源程序的可移植性为代价。所以,当想用C语言和汇编语言混合编程时,程序员需要权衡采用这种方法的利与弊。
在C语言中,嵌入汇编语言的语法如下(*):
asm <opcode> <operands> <; or newline>
注意:这里的分号';'不是汇编语言中起注释作用的分号,而是作为语句的分隔符。
若C语言源程序中嵌入一条汇编语句,则可按下列方式来做:
asm mov ax, data
若要嵌入一组汇编语句,则需要用括号'{'和'}'把它们括起来。
asm {
mov ax, data1
xchg ax, data2
mov data1, ax //实现整型变量data1和data2之值的交换
}
例 在C语言源程序中嵌入汇编语言语句实现赋值语句A=A+B+C,其中:A、B、C都是整型变量。
解: ……
asm {push ax //实现整型变量A=A+B+C
mov ax, A
add ax, B
add ax, C
mov A, ax
pop ax
}