여러분이 어셈블리 명령어를 작성하거나 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 <디버깅을 통해 배우는 리눅스 커널의 구조와 원리> 저자
'시스템 소프트웨어 개발을 위한 Arm 아키텍처의 구조와 원리 > 1장: Arm 프로세서 소개' 카테고리의 다른 글
[ARM프로세서] ARM 프로세서를 공부하는 방법의 문제점 (0) | 2023.06.10 |
---|---|
[ARM프로세서] ARM 프로세서를 일반 SW 개발자도 배워야 하는 이유 (0) | 2023.06.10 |
[ARM프로세서] 소프트웨어 개발자가 ARM 프로세서를 배워야 하는 이유 (0) | 2023.06.10 |
[ARM] ARM Errata란 (0) | 2023.06.09 |
[ARM] ARM 프로세서 소개 - RISC와 CISC란 무엇인가? (0) | 2023.06.09 |