push pop 질문
190
작성한 질문수 8
안녕하세요 강사님 강의 듣다가 궁금한 점이 있습니다.
push {lr}
bl F11
POP {pc}
이렇게 동작할 때, lr값을 스택에 저장을 하고 나면 sp가 하나 증가하지 않나요? pop {pc}를 하면 스택메모리에서 현재 스택포인터가 가리키고 있는 아무것도 없는 쪽을 읽어서 pc에 저장해야되는게 아닌가요?
답변 2
0
안녕하세요. 박진수님
push {lr} 이후 sp가 증가하지 않고 감소하게 됩니다. ARM 아키텍처에서 스택 메모리는 주소를 감소시켜가면서 값을 저장하기 때문에, 스택에 값을 푸시하면 sp가 감소합니다.
pop {pc}를 수행하면 현재 스택 포인터가 가리키는 위치의 값을 pc에 로드한 후, 스택 포인터는 원래 위치로 증가하게 됩니다. 따라서 pop {pc} 이후 pc에는 정확히 반환 주소가 저장되므로 정상적인 서브루틴 리턴 동작이 수행됩니다.
0
안녕하세요, 인프런 AI 인턴입니다. 박진수님!
ARM Cortex-M 프로세서에서의 push와 pop 명령어 동작에 대해 설명드리겠습니다.
push {lr} 명령어는 LR(Link Register)의 값을 스택에 저장합니다. 이때 스택 포인터 SP는 감소합니다. 이는 ARM 아키텍처가 스택을 사용하는 방식 때문입니다. ARM은 “Full Descending Stack” 형태를 사용하므로, 스택에 값을 저장할 때 스택 포인터가 감소하고 값을 가져올 때 증가합니다. 따라서 push 명령어는 SP를 감소시켜, 새로운 값이 적재될 위치를 가리키도록 합니다.
이 후에 POP {pc} 를 실행하면, 스택에서 값을 꺼내어 PC(Program Counter)에 저장하게 됩니다. 스택 포인터는 이 과정에서 증가하여, 이전에 저장된 값의 위치로 돌아갑니다. 코드에서 스택의 포인터가 적절히 조정되므로 걱정하실 필요가 없습니다.
- 스택은 메모리의 한 부분으로, 함수 호출 시 리턴 주소 또는 지역 변수를 저장하는데 주로 사용됩니다.
bl F11과 같은Branch with Link명령어는 현재 주소를LR에 저장하고 F11에 분기합니다.
- 이후
POP {pc}명령어는LR로부터 리턴 주소를 되돌려 받아PC에 로드하여 이전 실행 위치로 되돌아갑니다.
관련 내용을 더 깊이 이해하시려면 아래의 유사 질문 및 답변들을 참고하시면 도움될 것 같습니다:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
stm32cubeide 관련 문의
0
44
2
DMA 관련한 강의도 제작해주실 수 있으신가요 ?
0
91
1
그림들도 해석 할 수 있어야 하나요?
1
100
2
no-stlink
1
80
2
4개의 CPU 사이클이 필요한 이유
1
99
2
MAC으로 진행 질문드려요..
1
95
2
학습 진행 시, 사용하는 Board에 대한 문의 드립니다!
0
159
2
STM32Fx Cortex ARM 프로그래밍 저자:홍봉조, 출판사:지식과 감성
0
242
1
CORTEX_02_ASSEMBLY 빌드시 에러
1
270
1
외부 ST Link 연결 이용한 SWD 방법
0
338
1
파이프라인과 명령어
1
327
1
명령어 fetch
0
238
1
lr 레지스터 LSB 값
1
258
1
Disassembly 창 문제
0
349
1
s702 강좌에서 사용한 technical reference manual 문서
1
323
1
s702에 원자적 Access 를 위한 BSRR 코드작성 부분에 대해서
1
271
1
s202 LED 점등 예제 실행시 에러
2
351
1
STM32F429I-DISC 보드의 펌웨어
2
394
1
제공되지 않은 강의교재
0
319
1
s524 테일체이닝 강의 질문
0
234
1
부트코드와 부트로더의 차이점
1
1524
1
메모리 맵 질문
0
279
1
xPSR 레지스터 플래그 값 및 기타 질문 드립니다.
1
859
2
컴퓨터 연결 및 회로도
0
420
1





