関数を作成して x86 アセンブリ (AT&T 構文) で呼び出す非常に簡単な例を教えてください。実際、数値を計算する関数を作成しようとしていますfactorial
。これは私がやったことです:
#include<syscall.h>
#include<asm/unistd.h>
# Calculates Factorial, Argument is passed through stack
.text
.global _start
_start:
pushl $5 #factorial of this value will be calculated
call Fact
movl %eax, %ebx #eax contains the result, Result is the return val of the program
movl $1, %eax
int $0x80
ret
Fact:
popl %ebx #Return address
popl %edx
movl $1, %ecx #Will be used as a counter
movl $1, %eax #Result(Partial & complete) will be stored here
LOOP:
mul %ecx
inc %ecx
cmp %ecx, %edx
jle LOOP
pushl %ebx #Restore the return address
ret
何Segmentation Fault
度も何度もエラーが発生します。でGASを使用していUbuntu
ます。