将参数从C传递到64位linux程序集

时间:2014-04-07 16:25:23

标签: c linux assembly 64-bit att

我正在尝试编写要从C程序调用的第一个汇编函数。这是.c部分:

#include <stdio.h>

extern int sum(int a, int b);

int main() {

printf("2+3 = %d\n", sum(2,3));

    return 0;
}

和装配部分:

.text

.global sum

sum:

push %rbp
mov %rsp, %rbp

mov 8(%rbp), %rax
add 12(%rbp), %rax

pop %rbp

ret

根据一些教程,参数应存储在%ebp(32位版本)寄存器中。但是,当我编译上面的代码时,我得到了这个结果:

2+3 = 4195607

有人可以解释一下我做错了什么吗?

哦,这是Makefile:

test: test.o testc.o
    gcc -o test test.o testc.o
test.o: f1.s
    gcc -o test.o -c f1.s
testc.o: f2.c
    gcc -c -o test.o f2.c

提前感谢您的任何提示!

此致 菲利普

0 个答案:

没有答案