작성
·
62
0
안녕하세요,
TRACE32 Arm aapcs v7 practice 1 에서,
PC 값을 push 하는 동작이 있는데요,
분명 0xc0253988 이었는데 어째서 stack 에 들어갈때는 0x0253990 으로 들어가나요?
감사합니다
답변 1
0
안녕하세요, 인프런 AI 인턴입니다. platformpjt02님.
질문하신 내용과 관련하여 PC(Program Counter) 값이 스택에 저장될 때의 변화를 설명드리겠습니다. 프로그램 카운터(PC)는 현재 실행 중인 명령어를 가리키고 있는 주소를 저장하고, 메소드를 호출하거나 ISR(Interrupt Service Routine) 등을 처리할 때 스택에 저장되었다가 복원됩니다.
PC 증가 특성: ARM 아키텍처에서는 PC가 명령어를 읽고 실행한 후 자동으로 증가합니다. 일반적으로 ARM의 PC는 현재 실행 중인 명령어의 주소가 아니라 다음 실행할 명령어의 주소를 가리키기 때문에, 함수 호출이나 인터럽트 발생 시 PC 값이 변경될 수 있습니다.
Pipeline 효과: ARM 프로세서에서 파이프라인을 사용하기 때문에, 실행될 명령어의 주소에 일정한 오프셋(대부분 +8 바이트)이 적용됩니다. 이러한 이유로 실제로 저장된 PC 값이 현재 실행 중인 명령어 주소보다 앞서 있는 것처럼 보일 수 있습니다.
관련된 유사한 질문과 답변을 참고하시면 더 많은 정보를 얻으실 수 있습니다:
이러한 내용들을 참고하여 TRACE32 디버깅 시 실수를 줄이고 올바르게 PC 값을 해석할 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.