RV32I는 기본적으로 32개의 범용 레지스터와 1개의 PC(Program Counter)를 갖고 있습니다.
1. 범용 레지스터(x0 ~ x32)
모든 레지스터는 32비트 크기입니다. 각 레지스터는 숫자 이름(x0 ~ x31)이 있지만, 프로그래밍 편의를 위해 역할에 따른 ABI(Application Binary Interface) Name을 주로 사용합니다.
| 레지스터 (Alias) | 이름 | 설명 |
| x0 (zero) | Hard-wired Zero | 항상 0입니다. 값을 쓰려고 해도 무시되며, 읽으면 항상 0입니다. |
| x1 (ra) | Return Address | 함수 호출 후 돌아갈 주소를 저장합니다. |
| x2 (sp) | Stack Pointer | 스택의 현재 위치를 가리킵니다. |
| x3 (gp) | Global Pointer | 전역 변수 영역을 가리킵니다. |
| x4 (tp) | Thread Pointer | 스레드 로컬 저장소를 가리킵니다. |
| x5~7, x28~31 | Temporaries | 임시 데이터를 저장합니다. (함수 호출 시 보존되지 않음) |
| x8 (s0/fp) | Saved / Frame Pointer | 보존 레지스터 혹은 프레임 포인터로 사용됩니다. |
| x9, x18~27 | Saved Registers | 함수 호출 전후로 값이 보존되어야 하는 데이터용입니다. |
| x10~11 (a0~1) | Arguments / Return Value | 함수의 매개변수 전달 및 결과값을 반환할 때 사용합니다. |
| x12~17 (a2~7) | Arguments | 함수의 추가 매개변수 전달용입니다. |
2. 주요 특징
2.1 x0 (zero)의 존재
- RISC-V의 가장 큰 득징 중 하나입니다. "0"이라는 상수가 하드웨어적으로 고정되어 있어 별도의 명령어를 줄일 수 있습니다.
예를 들어, 레지스터 간 값 복사는 add x1, x2, x0( x1 = x2 + 0)과 같은 방식으로 처리됩니다.
2.2. PC가 범용 레지스터와 따로 존재
-현재 실행중인 명령어의 주소를 가리키는 레지스터가 범용 레지스터에는 포함되지 않습니다. 제어 흐름 명령어를 통해서만 PC를 변경할 수 있게 제한하여 코드의 흐름을 명확하게 관리할 수 있습니다.
(ARM-32에서 PC 범용 레지스터를 공유하여 사용한다. 모든 명령어가 PC에 접근할 수 있기 때문에, 복잡한 예외 규칙을 추가해야한다.)
2.3 정렬
- RV32I에서 명령어는 기본적으로 4바이트 경계에 정렬되어야 합니다.
3. 요약
RV32I는 범용레지스터(x0 ~ x31)과 PC를 포함해 총 32개의 레지스터를 가집니다.
'RISC-V > RISC-V 개념' 카테고리의 다른 글
| [RISC-V] RV32I ISA - Computation (0) | 2026.03.08 |
|---|---|
| [RISC-V] RV32I ISA (0) | 2026.03.05 |
| [RISC-V] 5편 RISC-V의 미래: 기회와 도전 — ISA 생태계 전환기의 기술·시장 분석 (1) | 2026.03.04 |
| [RISC-V] 4편 RISC-V 메모리 모델·캐시 계층·MMU·가상 메모리·TLB (0) | 2026.03.03 |
| [RISC-V] 3편 RISC-V 명령어의 실제 실행 과정: 파이프라인·예외·트랩·CSR (0) | 2026.02.10 |