어셈블리어를 하는데 세그멘테이션 오류가 나와요 도와주세요
글쓴이: Samuro / 작성시간: 수, 2013/05/01 - 5:12오후
#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 이런식으로 입력하면 소수인지 확인하는건데 지금 세그멘테이션 오류가 뭣때문에 나는건지 모르겠습니다. 제가 짠 코드자체에 문제가 있는건가요?
Forums:
확실하지는 않은데..
어셈블리로 구현한 부분하고 같은 기능을 하는 함수를 c언어로 작성해서
컴파일해서 제대로 되나 확인하고
제대로 되면
최적화 안하고! 컴파일러로 어샘블로만 출력하게 해서 비교해보는게 어떨까여.
즐린
댓글 달기