目的
掌握C语言程序跨文件调用汇编函数的规则
前置知识
参数访问
若希望汇编语言函数和C一起工作,就必须显式地遵守C样式的函数样式,也就是汇编函数的标准格式
C程序调用汇编函数时,会将参数放在堆栈中,参数分布如下
可以通过ebp作为基址访问参数
若函数有返回值,系统默认将eax的值返回
上下文保存
函数中可用的寄存器如右
有一些寄存器在主程序中被用到,所以使用前需要先保存
汇编函数模板

实际应用
源程序
try12.c
extern void Print_Addresult(int a, int b);
extern void Print_Mulresult(int a, int b);
int main(){
int num1=10, num2=90;
Print_Addresult(num1, num2);
Print_Mulresult(num1, num2);
return 0;
}
try13.s
.data
str0:
.asciz "The result is %d.\n"
.text
.type Print_Addresult, @function
.global Print_Addresult
Print_Addresult:
pushl %ebp
movl %esp, %ebp
movl 8(%ebp), %edx
movl 12(%ebp), %ecx
addl %edx, %ecx
pushl %ecx
pushl $str0
call printf
addl $8, %esp
movl %ebp, %esp
popl %ebp
ret
try14.s
.data
str0:
.asciz "The result is %d.\n"
.text
.type Print_Mulresult, @function
.global Print_Mulresult
Print_Mulresult:
pushl %ebp
movl %esp, %ebp
movl 8(%ebp), %edx
movl 12(%ebp), %ecx
imull %edx, %ecx
pushl %ecx
pushl $str0
call printf
addl $8, %esp
movl %ebp, %esp
popl %ebp
ret
编译执行
一键编译执行

编译、链接和执行

版权声明:本文为dc12499574原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。