1
汇编语言程序与高级语言程序的连接
连接中要解决的问题,
1,存储器分配问题
2,两种语言之间的控制传送问题
3,变量传送问题
调用协议,
1,用于 C/C++语言的 C语言调用协议
2,用于 BASIC,PASCAL,FORTRAN语言的
PASCAL语言调用协议
2
C 语言和汇编语言混合编程
(一 ) C 语言程序中直接嵌入汇编代码
内嵌汇编语言格式,
asm <操作码 > <操作数 > <; 或换行符 >
例,test1.c
#include <stdio.h>
main()
{ asm mov ah,2;
asm mov dl,'*';
asm int 21h;
printf("test\n");
}
3
(二 ) 在 C 程序中直接调用汇编子程序
.model small
.code
public _max_num
_max_num proc near
push bp
mov bp,sp
mov cx,[bp+4]
dec cx
jcxz exit
mov ax,[bp+6]
comp,add bp,2
cmp ax,[bp+6]
jge gtest
mov ax,[bp+6]
gtest,loop comp
exit,pop bp
ret
_max_num endp
end
#include <stdio.h>
extern int max_num(int count,
int v1,int v2,int v3,
int v4,int v5,int v6);
main()
{ int i;
i= max_num(6,-35,17,0,
63,-121,112);
printf("max is %d",i);
}
例,c_max.c asm_max.asm
4
参数传递,
C 程序调用汇编子程序时,参数是通过 堆栈 传递给汇编子程序的,
并且参数入栈的顺序是 从右到左
V6 高地址
v5
v4
v3
v2
BP+6 ? v1
BP+4 ? 6
返回地址
BP ? BP 低地址
5
汇编语言子程序的返回值,
当被调用的汇编子程序有值返回给调用它的 C 程序时,这个值通过
AX 和 DX 寄存器进行传递。
数 据 类 型 数据长度
(字节) C语言 汇编语言
char DB 1
int DW 2
long int / float DD 4
double DQ 8
变量的数据类型
6
汇编子程序框架,
只有严格按照 C 语言编译系统要求编制的汇编子程序才能被
C程序正确调用。
1,C语言编译系统将不同类型的变量存放在不同的段中,并且把
_DATA,CONST,_BSS 和 STACK 段组合成一个 DGROUP
段组。
2,C语言编译系统对不同段的定位类型, 组合类型及类别名规定
了统一的名称 。