[메모리] 스택 push와 pop 알아보기
push and pop
push와 pop은 스택을 다루는 자료구조를 이루는 두 개의 관리 함수이다. 어셈블리 언어에서는 함수의 파라미터를 메모리에 저장해 두거나 연산 후에 반환할 값을 메모리에서 빼내는 작업을 push와 pop이라고 한다. 이 때의 메모리 영역을 스택이라고 한다.
push와 pop은 각각 한 줄의 명령어로 사용되는 데 실제로 어떤 역할을 하는지 알아볼 거다!!
- push
push %rax
push는 %rax에 있는 값을 스택에 넣는 것을 약속한 명령어이다. %rax레지스터에 저장된 값을 스택에 넣는 명령어이다. 간단한 명령어로 바꾸어 표현하면 다음과 같다.
subq $8 %rsp
movq %rax (%rsp)
- pop
pop
어셈블리 언어는 함수에서 값을 리턴하기 전에 항상 %rax에 값을 넣어주는 것을 약속으로 한다. 따라서 pop 명령어는 스택에 있는 값을 빼내어 %rax 레지스터 저장하는 역할을 한다. pop 명령어는 간단한 명령어로 다시 표현하면 다음과 같다.
movq (%rsp) %rax
addq $8 %rsp
위에 코드를 다시 보면 스택을 가르키는 %rsp레지스터 값만 바꿔주고 빼낸 값을 메모리에서 지우지 않는 게 보인다. 그 이유는 메모리는 계속해서 값을 쓰기 때문에 스택의 top을 가르키는 %rsp만 관리해주면 굳이 값을 지울 필요가 없다.
![](https://i.imgur.com/db8YwnM.png)
댓글
댓글 쓰기