汇编语言和C语言混合编程
本章主要介绍汇编语言和C语言的混合编程和调用方法。C语言程序可以与汇编语言程序混合使用,以提高程序处理效率。但是,这种方法也会以丧失源程序的可移植性为代价。
12.1 汇编指令的嵌入
在C语言中,可以使用汇编语言程序段来提高程序处理效率。嵌入汇编语言的语法如下:
asm <opcode> <operands> <; or newline>
例如,要嵌入一条汇编语句,可以按下列方式来做:
asm mov ax, data
若要嵌入一组汇编语句,需要用括号'{'和'}'把它们括起来:
asm {mov ax, data1
xchg ax, data2
mov data1, ax
}
12.2 C语言程序的汇编输出
在Turbo C++或Borland C++编程环境下,可以使用TCC或BCC命令把一个C语言的源程序转换成汇编语言的源程序。通过阅读汇编语言程序,可以很准确地知道C语言语句的功能是如何实现的。
例如,下面是一个C语言程序和其相对应的汇编语言程序:
C语言程序:
#include<stdio.h>
int sum(int a, int b, int c) {
return (a + b + c);
}
void main() {
int a, b, c;
a = b = 12;
c = 32;
printf("%d", sum(a, b, c));
}
汇编语言程序:
; 一系列辅助说明信息
_TEXT segment byte public 'CODE'
; 代码段的开始
int sum(int a, int b, int c);
; C 语言语句
{
;return (a + b + c);
}
void main();
{
int a, b, c;
; 局部变量是用堆栈来存储的,请见 第 7.5.10 节
a = b = 12;
; 给局部变量赋值
c = 32;
;printf("%d", sum(a, b, c));
; 调用系统标准函数
}
_TEXT ends
; 代码段的结束
_DATA segment word public 'DATA'
; 数据段的定义
s @ label byte db '%d'
db 0
_DATA ends
public _main
; 下面说明函数的属性,请见 第 7.6.3 节
public @sum $qiii
extrn _printf:near
s @equs
end
12.3 简单的屏幕编辑程序
下面是一个简单的屏幕编辑的C语言程序,它不仅涉及到键盘处理、光标定位、屏幕输出、字符颜色等,而且还运用了C语言和汇编语言的混合编程方法。
该程序的功能:
◆可用移动光标键↑ 、↓ 、←和→移动光标1 行或 1 列,也可用TAB/Shift+TAB 、Home和 End键跳跃地移动光标;
◆当光标已在第 1 行,再向上移动时,这时,光标被定位到第25 行,反之也然;
◆当光标已在第 0 列,还要向左移动时, 光标被定位到第79 列,反之也然;
◆当按下 ^W或^Z 时,屏幕将向上或向下滚动1 行;
◆显示当前键盘的状态:大小写状态、数字键盘状态和插入/ 修改状态;
◆如果按普通的键,将在屏幕上显示相应的字符。
本章主要介绍了汇编语言和C语言的混合编程和调用方法,旨在提高程序处理效率和可移植性。