factorial assembly code

gusiri의 이미지

.
.
.
.
.
.
.
.
int fact_goto(int x)
{
int result = 1;
loop:
result *= x;
x = x-1;
if (x > 1)
goto loop;
return result;
}
-------------------------------------------
_fact_goto:
pushl %ebp
movl %esp,%ebp
movl $1,%eax
movl 8(%ebp),%edx

L11:
imull %edx,%eax
decl %edx
cmpl $1,%edx
jg L11

movl %ebp,%esp
popl %ebp
ret

어셈블리를 막 배우는 초보입니다.

위코드는 factorial을 계산하는 어셈블리 코드입니다.

제가 이해가 안되는 부분은 result 값을 저장하는 %eax 를

리턴하는 부분이 어디인가 하는 겁니다.

popl %ebp 에서 그것이 이루어지는 듯 하는데...

어떤 방식에 의해서 그렇게 되는건가요?

M.W.Park의 이미지

ret에서 리턴되면 그때 %eax에 들어있는 값이 리턴 값 아닌가요?

"popl %ebp" --> 요건 return address인지 stack 반환인지에 관계있었던듯...

-----
오늘 나의 취미는 끝없는, 끝없는 인내다. 1973 法頂

-----
오늘 의 취미는 끝없는, 끝없는 인내다. 1973 法頂

gusiri의 이미지

ret 하면 자동으로 %eax 값이 리턴되는 것이군요?!

감사합니다!!

^ㅡ^