C 语言内嵌汇编 在C 语言中如何使用汇编语言呢?这个问题在 不同的编译器中,具体实现方法是不同的。不过在实现大方上也不过就是有两种,而且各种编译器的实现方法也是大同小异。一种是在C 语言中嵌入汇编语言代码, 另一种是让C 语言从外部调用汇编。下面我们就以 Borland 格式为例来说一说具体用法。但是,GCC 与Microsoft 的实现方法的与Borland 只在格式上有点区别。当然,GCC 的嵌入汇编是 AT&T 格式的。还好,不管什么格式,只是表达形式的不同而已,其内在含义是一模一样的。还是那句话各种编译器的实现方法是大同小异的,并没有本 质的区别。另外在最后还附带了一篇介绍在GCC 中使用内嵌汇编的文章。 一、两种实现方式 首先,我们看一看在C 语言中如何嵌入汇编语言代码。在C 语言中嵌入汇编语言代码,也有两种格式,一种是单句的,一种是模块的。 我们来看看一些简单的例子。 例子 1: 单句格式的: main() { asm mov ah,2; asm mov bh,0; asm mov dl, 20; asm mov dh,10; asm int 10h; /*调用BIOS 中断设置光标位置*/ } 模块格式的: main() { asm{ mov ah,2 mov bh,0 mov dl, 20 mov dh,10 int 10h } } 在这个小程序里面并没有突出“嵌入”二字。不过从这个程序中可以看出其基本格式。嵌入的各行代码前面加上 asm 关键字或者把汇编语句放入 asm 代码块中,每行以分号或换行符结束,而注释必须是 C 语言格式的。 下面我们来看一个让 C 语言和汇编协作的例子: 例子 2: main() { char const *MESSAGE=” OutPut from asm..\n$” ; asm{ mov ah, 9 mov dx, MESSAGE int 21h } } 上面这个例子十分的简单,它的纯 C 语言版本是: #i nclude main() { printf(“ OutPut from asm..\n$” ); } 接下来我们看一看如何让 C 语言调用汇编例程。我们还是看一个简单的小程序: C 语言部分如下: extern cursor (int,int), main() { cursor(15,12); } 汇编语言部分如下: .MODEL SMALL .CODE PUBLIC _CURSOR PROC PUSH BP MOV BP,SP MOV DH,[BP+4] MOV DL,[BP+6] MOV AH,02 MOV BH,00 INT 10H POP BP RET _CURSOR ENDP 通过上面这个程序,你会看到调用汇编语言的关键就是如何传递参数。事实上,是通过堆栈来传递的但是具体规则是什么呢?下面我就来看看。 二、调用规则...