어셈블리어를 하는데 세그멘테이션 오류가 나와요 도와주세요

Samuro의 이미지


#include <stdio.h>
#include <stdlib.h>
 
int is_prime (int number);
 
int main (int argc, char *argv[])
{
int number;
 
if (argc != 2)
{
printf ("Usage: %s <number>\n", argv[0]);
exit (1);
}
 
number = atoi(argv[1]);
if(is_prime(number))
printf("%d is a prime number.\n", number);
else
printf("%d is not a prime number.\n", number);
 
return 0;
}

위는 c언어 소스고요

.text
.align 4
.globl is_prime
.type is_prime,@function
 
 
is_prime:
pushl %ebp
movl %esp, %ebp
movl 8(%ebp), %eax   //number를 eax에 복사
movl %eax, %ecx  //eax를 ecx에 복사
sarl $1, %ecx      //ecx를 1/2함
jmp .L3     
.L2:
cltd         //edx를 eax부호확장함
idivl %ecx    //number를 ecx로 나눈다
testl %edx, %edx   //number%ecx가 0인지 확인한다
je .L4       //0이면 .L4로 보내서 끝낸다
subl $1, %ecx   //ecx-1
.L3:
cmpl $2, %ecx   //ecx가 2 이상이면 반복한다.
jge .L2
.L4:
movl %edx, 4(%ebp) //리턴 값으로 number%ecx값을 복사한다.
 
movl %ebp, %esp
popl %ebp
ret

이건 제가짠 어셈블리코드입니다. makefile로 된체로 받아서 제가 어셈블리만 짠 다음 make했는데 make할때는 컴파일 오류같은건 없었습니다. ./prime 123 이런식으로 입력하면 소수인지 확인하는건데 지금 세그멘테이션 오류가 뭣때문에 나는건지 모르겠습니다. 제가 짠 코드자체에 문제가 있는건가요?
hys545의 이미지

어셈블리로 구현한 부분하고 같은 기능을 하는 함수를 c언어로 작성해서
컴파일해서 제대로 되나 확인하고
제대로 되면
최적화 안하고! 컴파일러로 어샘블로만 출력하게 해서 비교해보는게 어떨까여.

즐린