작성
·
152
0
강의 마지막 부분을 보면
add rsp, 16을 한뒤에
pop rbx
pop rax
를 하셨는데요,
이과정에서 실질적으로 push 5, 2가 pop이 되지 않았는데도
정상적으로 rbx에 값이 이전에 push했던 값으로 돌아오는것을
확인 하였습니다.
그렇다면 현재 stack에 Top에 해당하는 주소값은 사실상 rsp라고 생각 되는데 맞는건지 궁금해서 질문 드립니다.
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
질문하신 내용에 대해 말씀드리자면, rsp(스택 포인터)는 현재 스택의 최상단을 가리키는 레지스터입니다. 스택은 후입선출(LIFO) 구조를 가지기 때문에, 가장 마지막에 push된 값이 가장 먼저 pop됩니다.
add rsp, 16
명령은 rsp 레지스터의 값을 16만큼 증가시켜, 이전에 push된 두 값(각각 8바이트를 가정할 경우) 위로 rsp를 이동시키는 과정입니다. 따라서, 이후 pop rbx
, pop rax
를 통해 레지스터에 값을 복원할 때, 이전에 push했던 값들이 정상적으로 pop되어 rbx와 rax에 저장됩니다.
여기서 중요한 점은, add rsp, 16
이 실행되었을 때 실제 스택에서 데이터가 제거되는 것이 아니라 스택 포인터(rsp)의 위치만 옮겨진다는 것입니다. 따라서, 이후 실행되는 pop 명령어를 통해 이전에 push했던 값을 정상적으로 복원할 수 있습니다.
결론적으로, rsp는 스택의 최상단 주소를 가리키며, 이를 통해 스택 내 데이터의 pop과 push가 이루어집니다. 질문하신 내용과 관련하여, 말씀하신 내용이 맞습니다. 스택에 Top에 해당하는 주소값은 rsp로 생각하시면 됩니다.