inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

ARM Cortex-M 프로세서 프로그래밍

s211_AAPCS

push pop 질문

190

박진수

작성한 질문수 8

1

안녕하세요 강사님 강의 듣다가 궁금한 점이 있습니다.
push {lr}

bl F11
POP {pc}

 

이렇게 동작할 때, lr값을 스택에 저장을 하고 나면 sp가 하나 증가하지 않나요? pop {pc}를 하면 스택메모리에서 현재 스택포인터가 가리키고 있는 아무것도 없는 쪽을 읽어서 pc에 저장해야되는게 아닌가요?

임베디드 arm-architecture cortex

답변 2

0

홍영기

안녕하세요. 박진수님
push {lr} 이후 sp가 증가하지 않고 감소하게 됩니다. ARM 아키텍처에서 스택 메모리는 주소를 감소시켜가면서 값을 저장하기 때문에, 스택에 값을 푸시하면 sp가 감소합니다.

pop {pc}를 수행하면 현재 스택 포인터가 가리키는 위치의 값을 pc에 로드한 후, 스택 포인터는 원래 위치로 증가하게 됩니다. 따라서 pop {pc} 이후 pc에는 정확히 반환 주소가 저장되므로 정상적인 서브루틴 리턴 동작이 수행됩니다.

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다. 박진수님!

ARM Cortex-M 프로세서에서의 pushpop 명령어 동작에 대해 설명드리겠습니다.

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에 로드하여 이전 실행 위치로 되돌아갑니다.

관련 내용을 더 깊이 이해하시려면 아래의 유사 질문 및 답변들을 참고하시면 도움될 것 같습니다:

  1. push pop 명령 및 기타 질문 드립니다.
  2. thumb2명령어와 thumb명령어가 섞여있을 때 플래시 메모리 읽기 동작

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

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