ZERO-BASE LESSON · AUFGABE 2

RISC-V 32-bit 명령어를 레고 블록처럼 분해하기

32개의 0과 1을 통째로 읽지 않습니다. 오른쪽 7 bit인 opcode가 먼저 ‘어떤 모양의 상자’를 쓸지 정하고, 그 뒤에 정해진 위치에서 register와 immediate를 꺼냅니다.

학습 목표: 공식 시험 시험 p6 · 공식 해설 p7를 풀기 전에 필요한 개념을 처음부터 만듭니다. 이 페이지를 읽은 뒤 소문제 카드에서 실제 시험 풀이 순서를 연습하세요.

교재처럼 순서대로 읽는 본문

이 글은 요약 카드가 아닙니다. 처음 보는 용어의 뜻부터 시작해, 왜 그런 규칙이 생겼는지와 문제에서 어떻게 사용하는지를 한 흐름으로 설명합니다.

이 장을 공부하는 이유

32개의 0과 1을 통째로 읽지 않습니다. 오른쪽 7 bit인 opcode가 먼저 ‘어떤 모양의 상자’를 쓸지 정하고, 그 뒤에 정해진 위치에서 register와 immediate를 꺼냅니다.

읽고 나면 할 수 있어야 하는 것

먼저 비유로 머릿속 구조 만들기

택배 송장의 바코드를 읽는 것과 같습니다. 맨 먼저 상품 종류(opcode)를 읽어 송장 양식을 고르고, 그 양식에 적힌 위치에서 보내는 사람(rs1), 추가 물건(rs2), 받는 사람(rd), 거리(immediate)를 읽습니다.

RISC-V instruction 해독 순서다섯 단계의 왼쪽에서 오른쪽으로 진행하는 개념 흐름도RISC-V instruction 해독 순서 32-bit word 오른쪽부터 시작 opcode format 결정 field 분리 rd·rs1·rs2 immediate 재배열·부호확장 역검산 assembly 복원

그림은 왼쪽에서 오른쪽으로 읽습니다. 각 화살표는 앞 단계의 결과가 다음 단계의 입력이 된다는 뜻입니다. 흐름도만 크게 열기

용어를 평범한 문장으로 바꾸기

독일어와 영어 용어를 소리만 외우지 말고, 아래 설명을 자신의 말로 다시 말해 보세요.

opcode [6:0]
instruction 가족과 format을 결정하는 하위 7 bit
funct3 / funct7
같은 opcode 가족 안에서 실제 연산을 구분하는 추가 표지
rd / rs1 / rs2
destination / source register field
sign-extension
signed 값을 유지하면서 상위 bit를 sign bit로 채우는 것
Pseudoinstruktion
assembler가 실제 base instruction으로 바꾸는 편리한 별칭

개념을 처음부터 연결하기

1. Hex를 binary로 바꾸기

Hex 한 자리는 정확히 4 bit입니다. 예를 들어 0x13 = 0001 0011입니다. 32-bit word는 8개의 hex 자리로 왼쪽 0까지 채워야 field 위치가 밀리지 않습니다.

2. Register 역할 구분

`sw a4,8(t0)`에서 t0는 주소 base라 rs1, a4는 저장할 data라 rs2입니다. 표기에 먼저 나온 register가 항상 rs1이라는 규칙은 없습니다.

3. Immediate 재배열

B/J/S format은 hardware 배선과 정렬을 위해 immediate bit가 흩어져 있습니다. 그림의 위치에서 조각을 모으고, branch/jump의 암묵적 bit 0=0을 붙인 다음 sign-extension합니다.

이 챕터에서 계속 사용할 손풀이 표

아래 표는 정답표가 아니라 작업 기억을 외부에 꺼내 놓는 worksheet입니다. 소문제를 풀 때마다 빈 칸을 직접 채우세요.

32-bit instruction field worksheet
확인 순서Field기록할 값
1opcode [6:0]7-bit 값과 format
2rd / rs1 / rs2ABI 이름·x번호·5-bit
3funct3 / funct7연산을 구분하는 값
4immediate조각·sign-extension·10진 값
5검산다시 decode한 assembly

수식은 위아래 구조로 읽기

평문으로 제곱과 분수를 이어 쓰면 구조를 놓치기 쉽습니다. 아래 수식은 브라우저의 MathML로 렌더되며, 지수·아래첨자·분수를 실제 수학 표기처럼 보여 줍니다.

32-bit instruction field 합계

7+5+3+5+5+7=32 bits

R-type의 opcode, rd, funct3, rs1, rs2, funct7 폭을 모두 더하면 32 bit입니다.

두 자리 Hex가 표현하는 bit 수

2 hex digits×4 bits=8 bits

Hex 한 자리는 정확히 4 bit이므로 8자리 Hex가 32-bit instruction 하나입니다.

작은 숫자로 한 번 직접 해보기

`nop = addi x0,x0,0`입니다. imm=0, rs1=0, funct3=000, rd=0, opcode=0010011을 I-type 칸에 넣으면 `000000000000 00000 000 00000 0010011` = `0x00000013`이 됩니다.

이 예제에서 중요한 것은 숫자 자체가 아니라, 어떤 값을 먼저 구하고 그 결과를 다음 계산에 넣는지입니다. 종이에 중간값을 생략하지 않고 적어 보세요.

초보자가 자주 멈추는 지점

bit 31부터 바로 읽기 시작해도 되나요?

전체 표기는 왼쪽이 bit 31이지만 format을 모르면 field 경계를 정할 수 없습니다. 먼저 오른쪽 opcode [6:0]를 읽어 format을 고르세요.

negative immediate가 큰 hex 값처럼 보여요.

해당 immediate bit 폭에서 최상위 bit가 1이면 signed로 sign-extension합니다. 32-bit 전체를 unsigned로 읽으면 branch 방향이 반대가 됩니다.

register 이름만 맞으면 충분한가요?

아닙니다. 같은 register라도 rd·rs1·rs2 중 어느 field인지가 다릅니다. 특히 store는 저장할 data가 rs2이고 주소 base가 rs1입니다.

시험지에서 손으로 쓰는 순서

  1. pseudo instruction이면 base instruction으로 먼저 펼칩니다.
  2. 오른쪽 7 bit opcode를 읽고 format 표를 고릅니다.
  3. rd/rs1/rs2를 5-bit 숫자로 확인합니다.
  4. funct field와 immediate를 복원합니다.
  5. assembly를 다시 만들어 원래 후보와 완전히 같은지 역검산합니다.

이 순서를 외우는 목적은 답을 암기하는 것이 아닙니다. 중간 과정을 답안지에 남겨 부분점수를 얻고, 어디에서 잘못됐는지 스스로 찾기 위한 체크포인트입니다.

10개 소문제로 개념 적용하기

각 소문제에는 이 장의 설명을 다시 포함한 독립 수업 페이지가 있습니다. 따라서 링크로 바로 들어가도 선행지식 없이 읽을 수 있습니다.

  1. 2-0
    매칭 전체 풀이 루틴

    9개 instruction과 8개 encoding을 짝지으세요. · 5 micro-work

    독립 수업 열기 →
  2. 2-1
    `nop` ↔ `0x00000013`

    `nop`의 실제 encoding을 찾으세요. · 3 micro-work

    독립 수업 열기 →
  3. 2-2
    `ret` ↔ `0x00008067`

    `ret`의 실제 encoding을 찾으세요. · 3 micro-work

    독립 수업 열기 →
  4. 2-3
    `beq s0,s1,12` 매칭

    주어진 branch bit열 중 +12 offset을 찾으세요. · 4 micro-work

    독립 수업 열기 →
  5. 2-4
    `sw a4,8(t0)` 매칭

    store word의 source와 base를 구분하세요. · 4 micro-work

    독립 수업 열기 →
  6. 2-5
    `add t0,a6,t2` 매칭

    R-type add의 세 register를 확인하세요. · 3 micro-work

    독립 수업 열기 →
  7. 2-6
    `jal ra,32` 매칭

    J-type jump offset과 rd를 확인하세요. · 3 micro-work

    독립 수업 열기 →
  8. 2-7
    `bne t0,t1,-16` 매칭

    negative branch offset을 복원하세요. · 4 micro-work

    독립 수업 열기 →
  9. 2-8
    `sll a2,a4,a5` 매칭

    shift amount가 register에서 오는 R-type을 찾으세요. · 3 micro-work

    독립 수업 열기 →
  10. 2-9
    남는 `addi t0,a6,2`

    모든 쌍을 지운 뒤 unmatched instruction을 찾으세요. · 3 micro-work

    독립 수업 열기 →

출처

Source: Probeklausur.pdf / Probeklausur Musterlösung und Hinweise.pdf · 시험 p6 · 공식 해설 p7. 공식 답의 숫자와 course-specific datapath/FSM 가정은 변경하지 않았습니다.