이번에는 ARMv8 아키텍처의 64비트 명령어 기준으로 레지스터 세트에 대해 알아봅시다. 다음은 ARM 스팩 문서에서 발췌한 내용입니다.
 
출처: DDI0487A_g_armv8_arm.pdf
B1.2.1 Registers in AArch64 state
 
In the AArch64 application level view, an ARM processing element has:
R0-R30 31 general-purpose registers, R0 to R30. Each register can be accessed as:
  • A 64-bit general-purpose register named X0 to X30.
  • A 32-bit general-purpose register named W0 to W30.
 
See the register name mapping in Figure B1-1.
---
 
R0~R30 레지스터는 범용 레지스터로 사용된다는 내용인데, 레지스터 저장하는 데이터의 크기에 따라 다음과 같은 방식으로 표기합니다.
 
   ● 64비트 크기 데이터를 저장하는 레지스터는 X0~X30로 표기
   ● 32비트의 데이터를 저장하는 경우 W0~W30으로 표기
 
대신 프로세스의 실행 흐름을 나타내는 스페셜 기능 레지스터는 PC와 SP입니다.
 
ARMv8 아키텍처(Aarch64)에서 각 익셉션 레벨 별로 사용되는 레지스터 목록은 다음과 같습니다.
 

 
그림 1.5 ARMv8(Aarch64) 아키텍처에 접근되는 레지스터 목록
 
위 그림에서 표시된 각 레지스터의 주요 기능은 다음과 같습니다.
 
   ● XZR, WZR(Zero register): 항상 0이 저장되고 0이 읽히는 레지스터입니다.
 
   ● SP_ELn: 모든 익셉션 레벨 별로 존재하는 레지스터입니다. SP_EL0은 익셉션 레벨0(EL0)에서 접근 가능한 스택 포인터 레지스터, SP_EL1은 익셉션 레벨1(EL1)에서 사용되는 스택 포인터 레지스터입니다.
 
   ● SPSR(Saved Process Status Register): 익셉션 발생시 현재의 상태 정보를 저장하는 레지스터인 PSTATS 백업하는 기능의 레지스터입니다. EL0을 제외하고 각 EL 레벨별로 존재하며, 각각의 이름은 SPSR_ELn입니다.
 
   ● ELP(Exception Link Register): 익셉션이 발생한 다음에 다시 복귀할 코드의 주소를 저장하는 레지스터입니다. EL0을 제외하고 각 EL별로 존재하며 각각의 이름은 ELR_ELn입니다. 즉, EL1에서 접근하는 ELP 레지스터는 ELP_EL1, EL2에서 접근되는 ELP 레지스터는 ELP_EL2입니다.
 
< '시스템 소프트웨어 개발을 위한 Arm 아키텍처의 구조와 원리' 저자>
 
* 유튜브 소개 영상

+ Recent posts