요즘 Programming from the Ground Up을 보고 있습니다.
전에 KLDP에서 추천이 나온 책(관련글)이고,
선배가 적극 추천한 책이라 벼르고 있었으나
어쩌다 보니 이제서야 보고 있는 것이지요.^^;;;;
(게으름의 극치.;;;)
이 책이 마음에 드는 것은 리눅스 상에서 할 수 있다는 점입니다.
다른 책들은 대부분 MASM을 이용하더군요.
(HLA도 있었지만...)
이는 윈도우 상에서 해야 하는 것이라
저 같이 집과 사무실을 옮겨다니면서 공부하는 사람에게는
여간 불편한 일이 아니었습니다.
그런데 이 책을 가지고 서버상에서 놀 수 있으니
그게 정말 좋더군요.^^
잡담이 조금 길었습니다.
이 책에서 나오는 내용 중 함수 호출 시 반드시 해야 한다는 구문인

의 존재이유를 잘 몰랐습니다.
왜 예전의 ebp를 stack에 집어넣어야 하고,
esp를 ebp에 넣어야 하는지를 말이죠.
스택을 사용하는데 esp하나면 충분하지 않나 생각했습니다.
그러다 그 책에 나오는 예제를 분석하다가 그 이유를 알았지요.

위의 소스는 4! 즉, Factorial를 구현한 것입니다.
재귀함수의 대표적인 예이지요.
위 소스를 어셈하여 나온 결과물입니다.

24라 계산이 잘 되었군요.
이를 분석해 본 제 노트입니다.

저만 알기 위해 만든 노트이니 다른 분은 잘 모르시겠죠.^^;;
이 글을 적은 이유는 노트를 남기기 위함도 있지만,
질문을 남기기 위함입니다.
1. 함수 호출 시 esp는 stack의 top을
ebp는 호출한 함수의 base pointer를 가리키는가?
2. ret 호출 시 return address를 pop했을 것이므로
esp는 호출된 함수의 파라메터를 가리키는가?
3. 위는 base pointer addressing 방법인데,
다른 방법으로 호출하는 것은 어떤식일까?
제 생각에는 이미 보았으나 지나쳤거나
앞으로 해당 책에서 볼 수 있는 답이라 생각됩니다.
찾으면 덧글이나 추가글로 답을 적어야겠습니다.^^
참조
Programming from the Ground Up
Programming from the Ground Up 번역본
- 다음 문자열의 길이는? NoSyu 풀이 (6)2009/02/14
- Programming from the Ground Up - chap5 궁금점 (0)2007/03/02
- 함수 호출 종료시 esp와 ebp (0)2007/02/23
- xor eax, eax < mov eax, 0 (4)2006/04/02
- Cache에 관한 글 (0)2006/03/30
- Understanding CPU Caching and Performance 04/04 (0)2006/03/30
- Understanding CPU Caching and Performance 03/04 (0)2006/03/30
글에 잘못된 점, 다른 점, 부족한 점이 있다면 지적해주세요.
댓글, 트랙백, 메일 모두 고맙습니다.







댓글을 달아 주세요