链接并编译汇编函数

时间:2014-02-13 23:34:34

标签: c gcc assembly

我有一个像这样的汇编函数

rfact:  
pushl   %ebp
movl    %esp, %ebp
pushl   %ebx
subl    $4, %esp
movl    8(%ebp), %ebx
movl    $1, %eax
cmpl    $1, %ebx
jle     .L53
leal    -1(%ebx), %eax
movl    %eax, (%esp)
call    rfact
imull   %ebx, %eax
.L53:   
addl    $4, %esp
popl    %ebx
popl    %ebp
ret 

我知道我不能将其保存为rfact.s并进行编译。必须将某些项(例如.text)附加到程序集的顶部。什么是Linux系统?我想从一个名为rfactmain.c

的普通c文件中编写的main函数中调用此函数

1 个答案:

答案 0 :(得分:3)

这是指令的'最小'前缀 - 对于ELF / SysV i386和GNU as

.text
.p2align 4

.globl  rfact
.type   rfact, @function

我还建议在最后附加一个函数大小指令:

.size   rfact, .-rfact

最简单的编译方式是:gcc [-m32] -c -P rfact.S
使用-P选项,您可以使用C风格的注释,而不必担心行号输出等。这会产生一个可以链接的目标文件。如果gcc默认为x86-64,则需要-m32标志。