例子:在C的main函数中调用汇编语言写的addone函数,把传入的参数加一然后返回。
汇编里面首先要把用到的寄存器压栈,使用指令global使函数可以在其他文件中调用,顺便说一句,C中的static函数之所以只能在本文件中可用,就是编译后的汇编文件没有用global指令,汇编的返回值放在EAX寄存器中。
汇编文件名是addone.asm,汇编方法在后面,内容如下:
global addone ;
addone: MOV RAX, [RSP + 20] ; stack top + 20 bytes
ADD RAX, 1
RET
传入的参数在栈顶以下20个字节处,为什么是20我也不知道,是在C的编译后的汇编中看出来的,C文件文件名calladdone.c,内容如下:
#include <stdio.h>
int main(){
int a = 3;
// printf("before call, a is %d.\n", a);
a = addone(a);
//printf("after call, a is %d.\n", a);
return 0;
}
编译后的C文件如下:
.file "calladdone.c"
.text
.globl main
.type main, @function
main:
.LFB0:
.cfi_startproc
pushq %rbp
.cfi_def