ARMv8 Registers

ARMv8 아키텍처는 64비트 레지스터 아키텍처로, 고성능 및 저전력 임베디드 시스템에서 사용되는 주요 기술이다. 이 아키텍처에는 다양한 레지스터가 존재 하는데, 이 글에서는 이러한 레지스터에 대해 알아본다.

General-Purpose Registers

AArch64 는 모든 Exception Level에서 항상 사용가능한 31개의 64bit 범용 레지스터를 제공한다.

각 AArch64 64bit 범용 레지스터(X0-X30)은 하위 32bit(W0-W30) 형식을 갖는다.

  • 32bit 레지스터(Wn)은 해당 64bit 레지스터(Xn)의 하위 절반을 구성한다.
  • 즉, W0은 X0 하위 word에 맵핑되고, W1은 X1의 하위 워드에 맵핑된다.

Wn 레지스터에서 읽으면 해당 X 레지스터의 상위 32비트를 무시하고 변경되지 않은 채로 둔다. Wn 레지스터에 쓰면 X 레지스터의 상위 32비트가 0으로 설정된다. 즉, 0xFFFFFFFF을 W0에 쓰면 X0이 0x00000000FFFFFFFF로 설정된다.

AArch64 Special Registers

AArch64는 범용 레지스터외에도 여러 특수 레지스터(Special Registers)도 제공된다.

Zero Register

X31 또는 W31이라는 레지스터는 별도로 없고, 다만 X31은 Zero 레지스터 ZR을 나타내도록 인코딩 된다. 이러한 Zero 레지스터는 32비트, 64비트에서 WZR/XZR 로 표현된다.

PC (Program Counter)

PC 는 다음에 실행할 명령어의 위치를 저장하는 레지스터로 ARMv7과 달리 프로그래머가 직접 접근하여 수정하는 것은 불가능하다.

SP (Stack Pointer)

SP는 스택의 현재 위치를 가리키는 레지스터로 Exception Level에 따라 SP_ELn으로 사용한다.

ELR (Exception Link Register)

ELR레지스터는 Exception Level에 따라 ELR_ELn 으로 사용gkrh, Exception 복귀 시 돌아갈 return address를 저장한다. (복귀할 Exception Level이 없는 EL0는 제외)

ARMv8 아키텍처에서는 AArch64에서 실행될 때 예외 반환 상태가 각 Exception Level에 대해 다음 전용 레지스터에 보관된다.

  • 예외 링크 레지스터(ELR).
  • 저장된 프로세서 상태 레지스터(SPSR).
EL0EL1EL2EL3
스택 포인터 (SP)SP_EL0SP_EL1SP_EL2SP_EL3
예외 링크 레지스터(ELR)ELR_EL1ELR_EL2ELR_EL3
저장된 프로세스 상태 레지스터(SPSR)SPSR_EL1SPSR_EM2SPSR_EL3

System Registers

AArch64에서 시스템 구성은 시스템 레지스터를 통해 제어되며, MSRMRS 명령어를 사용하여 액세스 된다. 이는 일반적으로 CP15(Coprocessor 15)작업을 통해 이러한 레지스터에 액세스하는 ARMv7과는 대조된다. 레지스터의 이름은 액세스할 수 있는 가장 낮은 예외수준을 알려준다.

예를 들어:

  • TTBR0_EL1은 EL1, EL2 및 EL3에서 액세스할 수 있다.
  • TTBR0_EL2는 EL2 및 EL3에서 액세스할 수 있다.

시스템 레지스터에 액세스 하는 코드는 다음 형식을 취한다.

MRS  x0, TTBR0_EL1          // Move TTBR0_EL1 into x0
MSR  TTBR0_EL1, x0          // Move x0 into TTBR0_EL1

시스템 제어 레지스터 (System Control Register, SCTLR)

SCTLR은 주로 시스템 전반의 동작을 제어하는 데 사용되는 레지스터로, 가상 메모리, 캐시, 예외 처리 등의 기능을 활성화 또는 비활성화할 수 있다.

현재 상태 레지스터 (Current State Register, CPSR/SPSR)

CPSR은 현재 프로세서 상태를 나타내는 데 사용되며, SPSR은 예외 처리 시 CPSR 값을 저장하는 데 사용다. 각 비트는 다른 프로세서 상태를 나타낸다.

예외 벡터 레지스터 (Exception Vector Register, VBAR)

VBAR은 예외 처리를 위해 예외 벡터 테이블의 베이스 주소를 저장하는 데 사용되며, 예외가 발생하면 해당 벡터 테이블에서 처리 루틴을 찾아간다.

중앙 예외 레지스터 (Central Exception Register, CER)

CER은 각 예외의 활성화 상태 및 우선순위를 설정하는 데 사용된다. 예외는 IRQ, FIQ, SError 등이 있다.

NEON & Floating-point Registers

ARMv8에는 V0-V31이라는 라벨이 붙은 32개의 128비트 부동 소수점 레지스터도 있다. 32개의 레지스터는 스칼라 부동 소수점 명령어에 대한 부동 소수점 피연산자와 NEON 연산에 대한 스칼라 및 벡터 피연산자를 모두 보유하는 데 사용된다.

참고

답글 남기기