지난 포스팅에서는 RV32I를 하드웨어와 소프트웨어라는 두 가지 관점에서 분류해 보았습니다. 이전 내용이 궁금하시다면 아래 글을 참고해주세요.
https://idkihg.tistory.com/143
[RISC-V] RV32I ISA
RV32I ISA(Instruction Set Architecture)는 최소한의 명령어로 모든 계산을 수행한다는 RISC-V의 철학을 보여줍니다. 전체 명령어는 총 47개 뿐이며, 모든 명령어 길이는 32비트로 고정되어 있습니다. 1. 하드
idkihg.tistory.com
1) ISA Computation
https://idkihg.tistory.com/146
[RISC-V] RV32I ISA - Computation
지난 포스팅에서는 RV32I를 하드웨어와 소프트웨어라는 두 가지 관점에서 분류해 보았습니다. 이전 내용이 궁금하시다면 아래 글을 참고해주세요.https://idkihg.tistory.com/143 [RISC-V] RV32I ISARV32I ISA(Inst
idkihg.tistory.com
3) ISA Control Transfer
https://idkihg.tistory.com/148
[RISC-V] RV32I ISA - Control Transfer
지난 포스팅에서는 RV32I를 하드웨어와 소프트웨어라는 두 가지 관점에서 분류해 보았습니다. 이전 내용이 궁금하시다면 아래 글을 참고해주세요. 아울러 소프트웨어적 분류를 바탕으로 연재 중
idkihg.tistory.com
4) ISA Miscellaneous Instructions
https://idkihg.tistory.com/149
[RISC-V] RV32I ISA - Miscellaneous Instructions
지난 포스팅에서는 RV32I를 하드웨어와 소프트웨어라는 두 가지 관점에서 분류해 보았습니다. 이전 내용이 궁금하시다면 아래 글을 참고해주세요. 아울러 소프트웨어적 분류를 바탕으로 연재 중
idkihg.tistory.com
이번 글에서 메모리 접근의 핵심인, Load & Stores 명령어들을 하나씩 파헤쳐 보겠습니다.
1. Loads & Stores 연산의 분류
RV32I의 Load & Store 명령어는 데이터를 읽어오는 I-Type과 데이터를 메모리에 저장하는 S-Type으로 나뉩니다. RISC-V는 오직 이 명령어들을 통해서만 메모리에 접근할 수 있는 'Load/Store 구조'를 가집니다.

✔ I-type(Load): 메모리에서 데이터를 읽어 레지스터에 씁니다.
- lw(load word)
- lh(load halfword)
- lb(load byte)
- lhu(load halfword unsigned)
- lbu(load byte unsigned)
✔ S-type(Store): 레지스터의 값을 메모리에 저장합니다.
- sw(store word)
- sh(store halfword)
- sb(store byte)
2. Load 명령어 (Memory Read)
Load 명령어는 메모리에서 데이터를 가져와 레지스터에 저장합니다. 이때 주소 계산은 항상 sign-extended된 12비트 imm을 사용합니다. 종류는 lb, lh, lw, lbu, lhu 총 5가지 입니다. 아래는 Load 명령어의 하드웨어 비트 필드 구조입니다.

- lb rd, imm[11:0](rs1) => rd = sign-extended(mem[rs1 + sign-extended(imm[11:0])][7:0])
- lh rd, imm[11:0](rs1) => rd = sign-extended(mem[rs1 + sign-extended(imm[11:0])][15:0])
- lw rd, imm[11:0](rs1) => rd = sign-extended(mem[rs1 + sign-extended(imm[11:0])][31:0])
- lbu rd, imm[11:0](rs1) => rd = zero-extended(mem[rs1 + sign-extended(imm[11:0])][7:0])
- lhu rd, imm[11:0](rs1) => rd = zero-extended(mem[rs1 + sign-extended(imm[11:0])][15:0])
3. Store 명령어(Memory Write)
Store 명령어는 레지스터에 저장된 값을 메모리의 특정 주소에 기록합니다. Load와 달리 저장하는 것이므로 부호 확장 옵션이 따로 없습니다. 종류는 sb, sh, sw 총 3가지 입니다. 아래는 store 명령어의 하드웨어 비트 필드 구조입니다.

- sb rs2, imm[11:0](rs1) => mem[x[rs1] + sign-extended(imm[11:0])] = x[rs2][7:0]
- sh rs2, imm[11:0](rs1) => mem[x[rs1] + sign-extended(imm[11:0])] = x[rs2][15:0]
- sw rs2, imm[11:0](rs1) => mem[x[rs1] + sign-extended(imm[11:0])] = x[rs2][31:0]
4. 요약 및 마무리
지금까지 RV32I의 메모리 접근 핵심인 Load & Store 명령어들을 살펴보았습니다.
- Load: 메모리의 데이터를 레지스터로 가져오기
- Store: 레지스터의 데이터를 메모리로 보내
지난번에 다룬 산술 연산(add, sub)과 논리 연산(and, or, xor)이 레지스터 안에서 '계산'을 담당한다면, 오늘 배운 Load/Store는 그 계산을 위한 데이터를 가져오고 결과를 저장하는 역할을 합니다. 이 단순한 조합들이 모여 복잡한 소프트웨어를 구동하는 힘이 됩니다. 이것이 바로 RISC가 추구하는 단순함의 미학입니다.
'RISC-V > RISC-V 개념' 카테고리의 다른 글
| [RISC-V] RV32I ISA - Miscellaneous Instructions (0) | 2026.03.12 |
|---|---|
| [RISC-V] RV32I ISA - Control Transfer (0) | 2026.03.10 |
| [RISC-V] RV32I ISA - Computation (0) | 2026.03.08 |
| [RISC-V] RV32I ISA (0) | 2026.03.05 |
| [RISC-V] RV32I 레지스터 (0) | 2026.03.05 |