2014-02-13 181 views
2

我有像这样链接和编译汇编函数

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系统来说是什么?我想从写在普通的C文件中的主函数调用rfactmain.c

+0

对不起。我没有意识到,当我粘贴它时,它已经被弄坏了。我已经修好了! – Aman

回答

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标志。