강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

최민우님의 프로필 이미지
최민우

작성한 질문수

시스템 소프트웨어 개발을 위한 Arm 아키텍처의 구조와 원리 - 2부 저자 직강 (2024년 버전)

Armv7-A: BL 명령어 실행 후 스택 Push 및 Pop 디버깅 실습 (Practice1-Part2)

스택에 PUSH되는 PC 값

작성

·

8

·

수정됨

0

안녕하세요,

 

섹션15. AAPCS : TRACE32 디버깅 실습 (2024년 버전) 의

 

119. Armv7-A: BL 명령어 실행 후 스택 Push 및 Pop 디버깅 실습 (Practice1-Part2) 강의에

 

3분10초쯤에서

 

push {r4,r5,r11,r12,r14,pc} 명령을 실행하는데, 왜 스택에 push 되는 pc 값이 C0253990 인지를 모르겠습니다.

 

그러니까 스택 화면(d.v 윈도우)에서 스택 주소(CC181BFC)에 push되는 값이 pc 값이 C0253990으로 확인되는데, 해당 push 명령은 C0253988 이고, 명령 실행시 레지스터 화면(r 윈도우)에서도 pc 값이 C0253988에서 C025398C로 변경되는데 스택에 push되는 pc 값은 왜 C0253990 ... 인가요 ... ?

 

++++
개인적으로 조사해보니...

ARMv7에서 파이프라인 성능향상을 위해 2개의 명령어를 prefetch 해놓았기 때문이라고 하는 것 같은데요 ... 그럼 trace32의 레지스터 화면(r 윈도우)의 값이 잘못되고, 스택 메모리 화면(d.v 윈도우)의 값이 맞다는걸...까요?

답변 1

0

안녕하세요, 인프런 AI 인턴입니다. 최민우님.

강의에서 언급된 ARM 아키텍처의 BL 명령어와 스택에 PUSH 되는 PC 값에 관련하여 설명드리겠습니다.

ARM의 PUSH 명령어와 PC 값

  1. PC의 역할: ARM 아키텍처에서 PC(Program Counter)는 현재 실행 중인 명령어의 주소를 나타냅니다. 명령어가 실행될 때마다 PC는 다음 명령어를 가리키도록 증가합니다.

  2. BL 명령어: BL (Branch with Link) 명령어는 서브루틴 호출을 위한 것으로, 현재 주소 + 8 (파이프라인에 의해)로 계산된 다음 명령어의 주소를 LR (Link Register)에 저장한 후에 새로운 주소로 분기합니다.

  3. 스택에 저장되는 PC 값: 스택에 직접 PCPUSH할 때는 일반적으로 명령어가 실행되기 전에 이미 PC가 증가했기 때문에, 실제로 PUSH되는 값은 현재 실행 중인 명령어 주소 +8이 반영된 값이 스택에 저장됩니다. 이는 ARM 아키텍처의 파이프라인과 지연된 실행 때문입니다.

강좌에서 C0253988 위치에서 명령어가 실행되었더라도, PC는 이미 그 이후 주소(예: C0253990)를 가리키게 되어 스택에 PUSH될 때 해당 주소가 저장된 것입니다.

관련 추가 자료 및 참고

혹시 더 자세한 설명이 필요하시다면 강의 내에서 추가적으로 예제를 확인하거나, 질문을 통해 지식 공유자님께 직접 질문하시는 것도 좋은 방법입니다.

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

최민우님의 프로필 이미지
최민우

작성한 질문수

질문하기