Programming/Assembly

어셈블리어 - 함수

lee308812 2021. 3. 14. 15:19

단순히 Parameter 및 반환값 없이 Hello World를 출력하는 함수를 만들고 호출하는 예제는 아래와 같다.

 

함수에서 인자값과 반환값을 사용하기 위해서는 Stack 메모리 영역을 사용한다.

Stack 메모리 영역과 관련된 포인터 레지스터는 다음과 같다.

 

IP (Instruction Pointer) : 다음에 수행 할 명령어 주소

SP (Stack Pointer) : 현재 Stack의 top 주소

BP (Base Pointer) : 스택과 관련해 상대 주소를 계산하기 위한 용도

 

어셈블리어에서 스택에 push/pop 하기 위해서는 다음과 같이 사용한다.

push 1
pop rax		; 스택에서 pop하여 rax로 가져옴

 

Stack에 1,2,3을 push하고 pop을 한번하는 과정에서 메모리의 변화는 다음과 같다.

참고로 스택에 push할 때 top의 위치는 높은 주소에서 낮은 주소 순으로 변화한다.

 

[ 초기상태 ]

[ push 1 이후 ]

[ push 2 이후 ]

 

[ push 3 이후 ]

[ pop rax 이후 ]

 

연습문제) 두 수 A,B를 받아서 합을 리턴하는 함수를 작성 및 호출하여 그 값을 출력하라.

스택변화과정.pptx
0.50MB

 

위 프로그램을 실행할 때마다 스택 변화과정은 첨부파일 참고.