본문 바로가기

시스템 소프트웨어 개발을 위한 Arm 아키텍처의 구조와 원리/1장: Arm 프로세서 소개

[ARM] 레지스터란(ARMv7, ARMv8)

여러분이 어셈블리 명령어를 작성하거나 C 프로그래밍을 하면 컴파일러는 ARM 코어가 실행할 수 있는 어셈블리 명령어로 변환합니다.
그런데 대부분 ARM 어셈블리 명령어는 레지스터와 함께 구성돼 있어, 레지스터에 친숙해질 필요가 있습니다.
 
그렇다면 레지스터란 무엇일까요? 레지스터는 ARM 코어가 어떤 연산을 수행할 때 데이터를 저장하는 임시 저장 공간입니다. 
이를 쉽게 CPU 공간의 메모리라고도 설명하기도 합니다. 이제 ARM 사에서 배포한 문서에서 레지스터를 설명한 부분을 보면서 레지스터에 대해 조금 더 알아봅시다. 
 
ARMv7 아키텍처의 레지스터
 
---
출처: DDI0406C_arm_architecture_reference_manual.pdf
A2.3 ARM core registers
 
In the application-level view, an ARM processor has:
•  thirteen general-purpose 32-bit registers, R0 to R12
•  three 32-bit registers with special uses, SP, LR, and PC, that can be described as R13 to R15.
---
 
위 내용은 "R0~R12 레지스터는 범용 용도로 사용되며 SP, LR, PC와 같이 (R13~R15) 레지스터는 
특별한 용도로 사용된다"라고 해석할 수 있습니다.
 
범용 레지스터는 어셈블리 명령어를 실행할 때 연산에 주로 사용되며, 주로 데이터를 저장합니다.
대신 스페셜 레지스터는 프로세스의 실행 흐름을 나타내는 역할을 수행합니다. 
SP, LR, PC 레지스터를 알면 프로세스가 어느 코드까지 실행됐는지 파악할 수 있습니다.
 
 
ARMv8 아키텍처의 레지스터
 
이번에는 ARMv8 아키텍처의 64비트 명령어 기준으로 레지스터 세트에 대해 알아봅시다.
 
---
출처: 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입니다.
 
Reference: ARM 프로세서의 주요 기능
 
ARM 프로세서는 왜 배워야 할까
ARM 프로세서 학습하는 방법의 문제점
ARM 프로세서 소개  
ARM 아키텍처를 구성하는 주요 기능
   ● 어셈블리 명령어란  
   ● ARM의 동작 모드와 익셉션 레벨   
 
Written by <디버깅을 통해 배우는 리눅스 커널의 구조와 원리> 저자