Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 链接并编译汇编函数_C_Gcc_Assembly - Fatal编程技术网

C 链接并编译汇编函数

C 链接并编译汇编函数,c,gcc,assembly,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, %

我有这样一个汇编函数

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文件中编写的主函数调用这个函数,这里有一个指令的“最小”前缀-用于ELF/SysV i386,并且:

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

.size   rfact, .-rfact
最简单的编译方法是:
gcc[-m32]-c-prfact.S


使用
-P
选项,您可以使用C样式的注释,而不必担心行号输出等问题。这将生成一个可以链接的对象文件。如果默认情况下gcc以x86-64为目标,则需要使用
-m32
标志。

对此表示抱歉。当我粘贴它时,我没有意识到它被弄坏了。我现在已经修好了!
.size   rfact, .-rfact