2014-02-13 66 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標誌。