이어서 X30 레지스터를 스펙 문서 분석을 통해 알아봅시다.
출처: ARM® Cortex®-A Series Programmer's Guide for ARMv8-A https://developer.arm.com/documentation/den0024/latest/
6.4 Flow control
...
Calls to subroutines, where it is necessary for the return address to be stored in the link register (X30), use the BL instruction. This does not have a conditional version. BL behaves as a B instruction with the additional effect of storing the return address, which is the address of the instruction after the BL, in register X30.
X30 레지스터를 설명한 내용인데, 요약하면 다음과 같습니다.
X30은 BL 명령어를 실행해 주소나 함수로 분기했을 때 서브루틴에서 복귀할 주소를 저장하는 레지스터다.
---
[중요] Armv7의 R14_<mode> 레지스터와 Armv8의 X30 레지스터
Armv7 아키텍처에서는 R14가 각 동작 모드별로 존재했습니다. R14는 서브루틴(함수 호출)을 호출할 때 복귀할 주소뿐만 아니라 익셉션이 유발된 후 복귀할 주소를 저장했습니다.
그런데 Armv8 아키텍처에서는 익셉션이 발생한 후 복귀할 주소를 저장하는 ELR_ELx(Exception Link Register)를 익셉션 레벨별로 정의합니다. 그래서 Armv8 아키텍처에서 X30은 익셉션 레벨별로 존재하지 않습니다.
---
이처럼 SP와 X30 레지스터는 Armv8 아키텍처에서 정의된 다른 범용 레지스터와 달리 서브루틴으로 분기하기 위해 사용됩니다.
이번 절에서 소개한 SP_ELn과 X30 레지스터를 표로 정리해 봅시다.
표 13.1 SP_ELn과 X30 레지스터의 특징
어셈블리 명령어를 분석할 때 SP_ELn과 X30 레지스터를 보면 그 역할과 기능이 잘 떠올랐으면 좋겠습니다.
<강의 영상>
.
'시스템 소프트웨어 개발을 위한 Arm 아키텍처의 구조와 원리 > 13장: Armv8 - AAPCS' 카테고리의 다른 글
[Arm프로세서] AAPCS: Armv8: 함수를 호출하기 위한 디자인 (0) | 2024.12.24 |
---|---|
[Arm프로세서] AAPCS: Armv8: SP_ELn와 X30 레지스터란 (2) | 2024.12.22 |
[Arm프로세서] AAPCS: Armv8 아키텍처에서 AAPCS 관련 레지스터 (0) | 2024.12.22 |
[Arm프로세서] Armv8 - SP_ELn과 X30 레지스터란? (0) | 2024.01.19 |
[Arm프로세서] Armv8 - AAPCS 관련 레지스터 (0) | 2024.01.17 |