第12章 汇编语言和C语言

C/C++语言是一个被广泛使用的程序设计语言,它不仅具有良好的高级语言特征,而且还具有一些低级语言的特点,如:寄存器变量、位操作等。所以,C语言的程序与汇编语言程序之间能很平滑地衔接。另外,目前主要的C语言程序开发环境,如:Turbo C/C++、Borland C/C++等,也都提供了很好的混合编程手段。

本章主要介绍汇编语言和C语言的混合编程和调用方法。虽然其它高级语言,如:Pascal、Basic等,也可与汇编语言混合使用,但出于其应用范围的考虑,不再对它们进行介绍,感兴趣的读者可参阅有关技术资料。

12.1 汇编指令的嵌入

为了提高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之值的交换
}

例12.1 在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
}