我有一个像这样的汇编函数
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函数中调用此函数答案 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
标志。