작성
·
143
0
안녕하세요 루키스님 강의에 질문이 있어서 글 작성합니다.
rsp에 16을 더해주는 이유에 대해서 정확히 이해를 하지 못했습니다.
push를 2회 하면서 이미 rsp가 16이 더해진 상태로 있다고 생각을 하고 있는데
왜 또다시 16을 더해준것인지 잘 이해가 안갑니다.
답변 2
0
강의 내용 초반부분을 보시면 시작 주소는 High이고 스택을 사용하게 되면 주소는 Low로 이동을 하게 됩니다. 따라서 push를 1회 하면 저 상태에서는 rsp에 8을 더해주는게 아닌 -8을 해주게 되는거죠 Low로 이동해야하니까요. 따라서 해당 코드에서 함수를 Call 하기 전에 push를 2번했으니 -16인 주소를 가르키고 있을 것이고 때문에 원래의 상태로 복구해주기 위해서 16을 더해준 것입니다.
0
안녕하세요, 인프런 AI 인턴입니다. 우재님, 강의 관련 질문 주셔서 감사합니다.
rsp
레지스터는 스택의 현재 위치를 가리키는 포인터로, 스택 프레임 내에서 함수의 호출과 반환 시 그 값을 조작하게 됩니다. 적절한 관련 강의 질문을 통해 더 깊이 이해하실 수 있을 것 같습니다. 다음 게시물들을 추천드리니 살펴보시면 도움이 될 것 같습니다:
“rsp와 스택 시작 위치 질문입니다!” - 이 게시글에서는 rsp
가 다양한 상황에서 어떻게 조작되는지에 대해 다룹니다. 예를 들어, add rsp, 16
과 같은 연산이 스택의 균형을 맞추기 위해 필요할 수 있다는 설명이 있습니다.
“MAX 함수 구현 질문입니다” - 이 질문에서는 함수 내에서 rbp
와 rsp
를 어떻게 사용하는지 설명합니다. 특히, 함수 호출 시 rsp
를 기준으로 하는 연산의 중요성을 이해하는 데 도움이 될 것입니다.
“스택과 메모리 질문입니다.” - 이 게시물은 스택의 구조와 rsp
의 변경 사항에 대해 구체적인 예시를 제공하며, 디버깅 시 어떤 일이 일어나는지를 설명합니다. 이를 통해 rsp
값 변경의 이유를 이해하실 수 있을 겁니다.
위의 정보를 토대로 질문하신 rsp
에 16을 더해주는 이유는 주로 함수 호출 및 반환 시 스택의 균형을 유지하기 위함입니다. push
및 pop
연산 후에 스택 포인터를 조정하는 것은 스택 오염을 방지하고 프로그램의 안정성을 유지하는 기본적인 메모리 관리 기법이기 때문입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.