[질문] 어셈으로 짠 프로그램 실행결과값이 이상합니다.
글쓴이: keston / 작성시간: 목, 2004/08/26 - 4:37오후
"programming from the ground up" 이란 책을 공부중인데요..
22페이지에 있는 예제 소스를 제 리눅스에서 컴파일해서 실행해보면 전혀 엉뚱한 결과값이 나옵니다.
.section .data data_list: .long 3, 5, 9, 333, 206, 375, 1057, 99, 0 .section .text .globl _start _start: movl $0, %edi movl data_list(, %edi, 4), %eax movl %eax, %ebx start_loop: cmpl $0, %eax je exit_loop incl %edi movl data_list(, %edi, 4), %eax cmpl %ebx, %eax jle start_loop movl %eax, %ebx jmp start_loop exit_loop: movl $1, %eax int $0x80
최대값을 구하는 아주 간단한 건데요..
eax에 값들을 차례로 가져와서 비교한후 ebx에 최대값이 들어가며 0을 만나면 루프를 탈출하고 최대값은 exit()의 상태값(ebx 레지스터)으로 알아냅니다..
근데 컴파일하고 실행하면
as max.s -o max.o
ld max.o -o max
./max
echo $?
33
이렇게 최대값이 아닌 엉뚱한 값이 나오네요..
뭐가 잘못된건가요?
Forums:
exit...
exit 값으로 결과를 알아보는 듯한데...
그값은... 부호없는 한바이트 즉, 255를 넘지 못하는 걸로 알고있습니다만..
다시말해 최대값인 1057이 한바이트로 짤려서 33이네요.
출력을 해서 확인하시던가 해야겠군요..
그럼 참고가 되셨길.
hint
1057 = 1024 + 33
답변 감사합니다. :D 그럼 굳이 .long 형으로 잡을 필요가 없었
답변 감사합니다. :D
그럼 굳이 .long 형으로 잡을 필요가 없었군요..
[quote="keston"]답변 감사합니다. :D 그럼 굳이 .lo
이 코드를 사용하신다면 .long 형이 되야하지 않을까요?
오늘 우리는 동지를 땅에 묻었습니다. 그러나 땅은 이제 우리들의 것입니다.
아직도 우리의 적은 강합니다. 그러나 우리는 그들보다 많습니다.
항상 많을 것입니다.
댓글 달기