더북(TheBook)

왼쪽 상단에 있는 어셈블리어를 볼까요? mov A, BB에서 A로 복사(move)하는 명령어고, push AA의 데이터를 스택에 쌓는 명령어입니다. eax는 범용 레지스터입니다. 명령어를 해석해 보면 main 스택 프레임의 n 값을 범용 레지스터 eax로 복사한 다음 다시 스택에 쌓습니다. 이때 main 스택 프레임에서 adder 스택 프레임으로 바로 복사하는 것이 아니라 레지스터를 거쳐 스택에 할당한다는 점에 유의하세요.

그림 9-6을 보면 ban처럼 순서대로 쌓입니다(그림 9-6). call func(함수 인스트럭션 주소 값)은 함수 호출이 끝나고 돌아올 주소 값을 스택에 쌓고 func 함수의 인스트럭션이 있는 곳으로 점프(jump)하는 명령어입니다. 어셈블리 코드를 보면 인자 n, b, a가 순서대로 쌓이고(인자의 할당을 함수를 호출한 쪽(caller)에서 담당), 다음 행에서 adder 함수를 호출(call)합니다.

198

그림 9-6 스택 프레임 할당 ②

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.