---
schema_version: 1
exam_id: "sose26-probeklausur"
aufgabe: 2
unit_id: "2-3"
source_group_id: "2"
official_exam: true
official_solution: true
language: "ko"
---

# 2-3 — `beq s0,s1,12` 매칭

> **학습 목표:** B-type bit열에서 beq opcode/funct3와 s0·s1 register field를 확인하고 분산 immediate를 재조립해 +12를 검증한다.
>
> **왜 따로 배우는가:** Branch immediate는 눈에 보이는 연속 숫자가 아닙니다. opcode로 B-type을 고정하고 register를 먼저 검증한 뒤 `imm[12|10:5|4:1|11]`를 제자리로 돌리는 절차가 음수 loop branch에도 그대로 쓰입니다.
>
> **범위:** Aufgabe 2 · 8점 Aufgabe의 최소 학습 단위 · 시험 p6 · 공식 해설 p7

## 1. 문제 원문 (Deutsch)

이 unit은 공식 Teilaufgabe 또는 표의 한 행·한 access를 학습 가능한 최소 단위로 다시 나눈 것입니다. 아래 전사는 source group `2`의 공식 독일어 문제 원문이며, 페이지 이미지를 바로 뒤에 함께 두어 코드·표·도식을 대조할 수 있게 했습니다.

~~~text
Aufgabe 2: Binärcode und Assemblerzuordnung

Unten sind 9 RISC-V-Befehle und 8 binäre Repräsentationen gegeben. Verbinden Sie die passenden Paare miteinander.

Hinweise:

- Nicht alle der dargestellten Befehle und Bitsequenzen gehören zusammen. Falls Sie ein Element ohne passende Entsprechung identifizieren, streichen Sie es durch.
- nop und ret sind sogenannte Pseudoinstruktionen. Um diese dekodieren zu können, schreiben Sie diese zuerst als Basis-Instruktion auf. Diese finden Sie in der RISC-V Reference¹ im Moodle.
- In dieser Aufgabe wird die Bitdarstellung von links (Bit 31) nach rechts (Bit 0) gelesen.

|  |  |
|---|---|
| `0x00000013` | `beq s0, s1, 12` |
| `00000000100101000000011001100011` | `sw a4, 8(t0)` |
| `0x00008067` | `add t0, a6, t2` |
| `00000000111000101010010000100011` | `jal ra, 32` |
| `0x007802B3` | `nop` |
| `00000010000000000000000011101111` | `ret` |
| `0xFE6298E3` | `bne t0, t1, -16` |
| `00000000111101110001011000110011` | `sll a2, a4, a5` |
|  | `addi t0, a6, 2` |

¹ https://moodle.informatik.tu-darmstadt.de/pluginfile.php/331793/mod_resource/content/9/RISC-V%20Reference.pdf
~~~

![공식 시험 원문 — exam-p06.png](../../assets/exam-p06.png)

*공식 시험 원문: `exam-p06.png` · Probeklausur.pdf · PDF p.6*

### 이 unit에서 풀 항목

주어진 branch bit열 중 +12 offset을 찾으세요.

## 2. 쉬운 한국어 해석

문제 2: 이진 코드와 어셈블리 명령 연결

아래에 9개의 RISC-V 명령과 8개의 이진 인코딩 표현이 주어져 있다. 서로 맞는 쌍을 연결하시오.

유의사항:

- 제시된 모든 명령과 bit sequence가 서로 대응하는 것은 아니다. 대응 항목이 없는 요소를 발견하면 취소선을 그으시오.
- nop과 ret은 이른바 pseudoinstruction이다. 이를 decode하려면 먼저 base instruction으로 써라. 해당 base instruction은 Moodle의 RISC-V Reference¹에서 찾을 수 있다.
- 이 문제의 bit 표기는 왼쪽이 Bit 31이고 오른쪽이 Bit 0이다.

| 이진 인코딩 표현 | RISC-V 명령 |
|---|---|
| `0x00000013` | `beq s0, s1, 12` |
| `00000000100101000000011001100011` | `sw a4, 8(t0)` |
| `0x00008067` | `add t0, a6, t2` |
| `00000000111000101010010000100011` | `jal ra, 32` |
| `0x007802B3` | `nop` |
| `00000010000000000000000011101111` | `ret` |
| `0xFE6298E3` | `bne t0, t1, -16` |
| `00000000111101110001011000110011` | `sll a2, a4, a5` |
|  | `addi t0, a6, 2` |

¹ https://moodle.informatik.tu-darmstadt.de/pluginfile.php/331793/mod_resource/content/9/RISC-V%20Reference.pdf

### 이 unit에 해당하는 최소 작업

주어진 branch bit열 중 +12 offset을 찾으세요.

이 문제에서 최종 결과만 맞히는 것보다 중요한 것은 `2-3`에 필요한 중간 판단을 답안지에 남기는 것입니다.

## 3. 무엇을 묻는 문제인가

### 공식 문제의 요구사항

- 8개의 encoded machine word를 각각 대응하는 RISC-V 명령과 연결한다.
- 대응 항목이 없는 요소를 찾아 취소선으로 표시한다.
- nop과 ret을 decode하기 전에 각각 base instruction으로 확장한다.

### 조건과 제약

- 명령 후보는 9개이고 encoding 후보는 8개이다.
- 모든 항목이 대응한다고 가정하지 말고 field를 decode해 일대일로 검증한다.
- nop과 ret은 pseudoinstruction이므로 base instruction을 먼저 써야 한다.
- 32-bit 표기는 왼쪽부터 Bit 31, 오른쪽 끝이 Bit 0이다.
- hex로 적힌 항목과 32자리 binary로 적힌 항목을 모두 instruction encoding 후보로 취급한다.

### 원문 오탈자·도식 관련 주의

- 원문은 ‘8 binäre Repräsentationen’이라고 부르지만 여덟 항목 중 네 개는 0x 접두사가 붙은 hexadecimal 표기이고 네 개만 32자리 binary bit sequence로 직접 표기되어 있다.
- PDF의 두 열은 같은 행끼리 이미 대응한다는 뜻이 아니라 연결할 두 후보 목록이다. 이를 보존하기 위해 열 순서와 행 배치만 표로 옮겼다.
- 각주 URL은 PDF에서 ‘RISC-V%’와 ‘20Reference.pdf’ 사이가 줄바꿈되어 있으나 실제 URL의 percent-encoding인 ‘%20’으로 연결해 기록했다.

### 도식 시각 확인 상태

- **도식 의존 여부:** 이 최소 unit의 핵심 판정은 텍스트·수식·코드로 재현할 수 있습니다.
- **공식 페이지 상태:** exam-p06.png, solution-p07.png가 원문 대조용으로 렌더되어 연결되어 있습니다.

### 이 unit의 학습 목표

- **관찰 가능한 목표:** B-type bit열에서 beq opcode/funct3와 s0·s1 register field를 확인하고 분산 immediate를 재조립해 +12를 검증한다.
- **출제 의도:** Branch immediate는 눈에 보이는 연속 숫자가 아닙니다. opcode로 B-type을 고정하고 register를 먼저 검증한 뒤 `imm[12|10:5|4:1|11]`를 제자리로 돌리는 절차가 음수 loop branch에도 그대로 쓰입니다.
- **공식 근거 범위:** SoSe26 Probeklausur 시험 p6 Aufgabe 2의 `beq s0,s1,12` 후보·bit열과 공식 해설 p7의 해당 pairing.
- **Aufgabe 공통 선수지식:** 32-bit instruction을 opcode(하위 7 bit)부터 읽고, opcode가 정한 format에 따라 rd/funct3/rs1/rs2/immediate를 분해합니다. Hex는 먼저 4-bit 묶음으로 binary로 바꿉니다.

## 4. 선수 개념과 핵심 용어

### beq

- **뜻:** 두 register가 같으면 PC-relative target으로 branch하는 B-type instruction입니다.
- **이 문제에서:** opcode `1100011`과 funct3 `000`을 함께 확인합니다.

### B-immediate

- **뜻:** B-type에서 여러 field 위치에 흩어져 저장되는 signed branch offset입니다.
- **이 문제에서:** 조각을 `imm[12:1]` 순서로 재조립해 +12를 얻습니다.

### s0 / s1

- **뜻:** ABI register 이름으로 각각 x8과 x9입니다.
- **이 문제에서:** rs1=`01000`, rs2=`01001` field를 검증합니다.

### implicit bit 0

- **뜻:** branch target 정렬 때문에 offset의 최하위 bit가 0으로 간주되어 encoding에 저장되지 않는 bit입니다.
- **이 문제에서:** 재조립한 immediate 조각 뒤에 0을 붙여 실제 Byte offset을 계산합니다.

### 이 문제에 적용할 풀이 규칙

### 규칙 1. B-type 재조립 순서

encoding 위치 `bit31, bits30:25, bits11:8, bit7`을 값의 순서 `imm[12], imm[10:5], imm[4:1], imm[11]`로 읽고 마지막 `imm[0]=0`을 붙입니다.

- **시험지에 남길 것:** 저장 위치는 `imm[12|10:5|4:1|11]`, 수치 복원 순서는 `imm[12|11|10:5|4:1|0]`로 두 줄에 나누어 적습니다.

### 규칙 2. register 방향 규칙

`beq rs1,rs2,offset`은 두 source를 비교하며 rd field가 없습니다.

- **시험지에 남길 것:** bits[19:15]에 rs1=s0, bits[24:20]에 rs2=s1을 표시합니다.

### 규칙 3. offset 검산 규칙

Branch encoding은 절대 target이 아니라 현재 PC에 더할 signed Byte offset을 담습니다.

- **시험지에 남길 것:** `target=PC+12`를 써서 해독값의 의미를 확인합니다.

### 공식 문제 전에 푸는 작은 유사 예제

**문제:** hex `0x00208463`을 B-type으로 해독하세요.

**주어진 것**

- x1과 x2를 source로 사용합니다.
- opcode `0x63`, funct3 `000`은 beq입니다.

### 예제 단계 1. opcode와 funct3로 mnemonic을 정합니다.

- **왜:** B-type 안에서도 beq/bne 등 조건을 먼저 구분해야 합니다.
- **종이에:** `opcode=1100011, funct3=000 → beq`

### 예제 단계 2. rs1과 rs2 field를 읽습니다.

- **왜:** 후보 instruction의 register 순서가 맞는지 검증합니다.
- **종이에:** `rs1=x1, rs2=x2`

### 예제 단계 3. 분산 immediate를 재조립하고 0 bit를 붙입니다.

- **왜:** encoding에 없는 최하위 0까지 복원해야 Byte offset이 됩니다.
- **종이에:** `imm=+8`

**예제 정답:** `0x00208463`은 `beq x1,x2,8`입니다.

**독립 검산:** PC가 `0x1000`이라면 taken target이 `0x1008`인지 확인합니다.

## 5. 공식 정답 요약

**공식 결론:** `beq s0,s1,12` ↔ `00000000100101000000011001100011`.

### 시험지 문장별 정답 해설

아래는 시험지의 항목 순서를 그대로 유지합니다. 각 항목에서 원문 → 한국어 번역 → 정답 → 판단 근거 → 실제로 쓸 답을 바로 이어서 읽으세요.



### 현재 소문제의 요구·판단·답을 한 흐름으로 연결

### `2-3`에서 정확히 답할 대상

- **시험지가 요구하는 답:** 주어진 branch bit열 중 +12 offset을 찾으세요.
- **이 소문제의 공식 답:** `beq s0,s1,12` ↔ `00000000100101000000011001100011`.

### 판단 1. 오른쪽 opcode `1100011`을 찾아 B-type임을 확인합니다.

- **왜:** immediate 조각의 의미는 format에 의존하므로 B-type 확정이 먼저입니다.
- **이 판단에서 답안지에 남길 것:** `bits[6:0]=1100011 → B-type`

### 판단 2. funct3 `000`으로 beq를 확인합니다.

- **왜:** 같은 branch opcode에서 비교 조건은 funct3가 결정합니다.
- **이 판단에서 답안지에 남길 것:** `funct3=000 → beq`

### 판단 3. rs1=s0(x8)과 rs2=s1(x9)을 확인합니다.

- **왜:** 조건이 맞아도 비교 register가 다르면 주어진 instruction의 encoding이 아닙니다.
- **이 판단에서 답안지에 남길 것:** `rs1 bits[19:15]=01000`, `rs2 bits[24:20]=01001`을 표시합니다.

### 판단 4. B-immediate 조각을 재조립해 +12인지 확인합니다.

- **왜:** 마지막으로 offset까지 일치해야 register가 같은 다른 beq 후보와 구분됩니다.
- **이 판단에서 답안지에 남길 것:** 저장 조각 `imm[12|10:5|4:1|11]`을 추출한 뒤 수치 순서 `imm[12|11|10:5|4:1|0] = 0000000001100₂ = +12`를 적습니다.

### 위 판단이 최종 답으로 이어지는 이유

B-type은 rs1=s0(x8), rs2=s1(x9), funct3=000이고 signed immediate 조각이 여러 위치에 흩어집니다.

### 답안 작성 시 주의

B-immediate의 최하위 bit는 항상 0이라 encoding에 직접 저장되지 않습니다.

![공식 Musterlösung/Hinweise — solution-p07.png](../../assets/solution-p07.png)

*공식 Musterlösung/Hinweise: `solution-p07.png` · Probeklausur Musterlösung und Hinweise.pdf · PDF p.7*

## 6. 풀이 전략

1. opcode 1100011을 찾습니다.
2. funct3=000으로 beq를 확인합니다.
3. rs1=01000, rs2=01001을 확인합니다.
4. immediate를 재조립해 +12인지 확인합니다.

## 7. 단계별 상세 풀이

### 단계 1. 오른쪽 opcode `1100011`을 찾아 B-type임을 확인합니다.

- **이유:** immediate 조각의 의미는 format에 의존하므로 B-type 확정이 먼저입니다.
- **종이에 남길 것:** `bits[6:0]=1100011 → B-type`
- **완료 기준:** 후보 bit열이 branch family로 분류되어 있습니다.
- **막힐 때 힌트:** hex라면 하위 7 bit가 `0x63` 계열인지 보세요.
- **가장 흔한 첫 오류:** bit31부터 immediate를 연속 12 bit로 읽는 것입니다.

### 단계 2. funct3 `000`으로 beq를 확인합니다.

- **이유:** 같은 branch opcode에서 비교 조건은 funct3가 결정합니다.
- **종이에 남길 것:** `funct3=000 → beq`
- **완료 기준:** bne나 blt가 아닌 beq라는 근거가 있습니다.
- **막힐 때 힌트:** bits[14:12] 세 bit를 읽으세요.
- **가장 흔한 첫 오류:** opcode만 보고 모든 branch를 beq라고 부르는 것입니다.

### 단계 3. rs1=s0(x8)과 rs2=s1(x9)을 확인합니다.

- **이유:** 조건이 맞아도 비교 register가 다르면 주어진 instruction의 encoding이 아닙니다.
- **종이에 남길 것:** `rs1 bits[19:15]=01000`, `rs2 bits[24:20]=01001`을 표시합니다.
- **완료 기준:** 두 ABI 이름, x번호, 5-bit field가 서로 일치합니다.
- **막힐 때 힌트:** Assembly 표기 첫 source가 rs1, 둘째 source가 rs2입니다.
- **가장 흔한 첫 오류:** s0와 s1의 field 위치를 바꾸거나 s0를 x0로 읽는 것입니다.

### 단계 4. B-immediate 조각을 재조립해 +12인지 확인합니다.

- **이유:** 마지막으로 offset까지 일치해야 register가 같은 다른 beq 후보와 구분됩니다.
- **종이에 남길 것:** 저장 조각 `imm[12|10:5|4:1|11]`을 추출한 뒤 수치 순서 `imm[12|11|10:5|4:1|0] = 0000000001100₂ = +12`를 적습니다.
- **완료 기준:** 최하위 implicit 0과 decimal +12가 모두 표시되어 있습니다.
- **막힐 때 힌트:** encoding에는 imm[0]이 없으므로 맨 뒤에 0을 붙이세요.
- **가장 흔한 첫 오류:** imm bit를 encoding에 놓인 순서 그대로 이어 잘못된 값을 만드는 것입니다.

### Instruction field 검산

bit열을 느낌으로 고르지 말고 다음 field를 실제 위치에서 확인합니다.

- **format:** B-type beq
- **opcode:** 1100011
- **funct3:** 000
- **rs1:** s0=x8 = 01000
- **rs2:** s1=x9 = 01001
- **imm:** +12, bit 0은 암묵적 0

## 8. 문제와 공식 해설의 비교·검증

- **문제가 요구하는 것:** 주어진 branch bit열 중 +12 offset을 찾으세요.
- **공식 해설이 제시하는 결론:** `beq s0,s1,12` ↔ `00000000100101000000011001100011`.
- **결론을 재현하는 핵심 논리:** B-type은 rs1=s0(x8), rs2=s1(x9), funct3=000이고 signed immediate 조각이 여러 위치에 흩어집니다.
- **검증 방법:** 위 micro-step의 `종이에 남길 것`을 순서대로 만들고 각 `완료 기준`을 확인합니다. 최종 산출물이 공식 결론과 같은지 대조합니다.
- **전제와 주의 범위:** B-immediate의 최하위 bit는 항상 0이라 encoding에 직접 저장되지 않습니다.
- **채택할 시험 답:** 이 가이드에서는 공식 Musterlösung의 결론을 시험 답으로 유지하며, 일반 ISA 또는 다른 구현과 달라질 수 있는 부분은 위 전제와 주의 범위에서 분리합니다.

## 9. 시험장에서 쓸 최종 답안

`beq s0,s1,12` ↔ `00000000100101000000011001100011`.

답안지에는 결과만 쓰지 말고, 7절의 중간 산출물 가운데 판정을 증명하는 식·bit field·register 상태·cycle·cache 상태를 함께 남기세요.

## 10. 자주 하는 실수와 검산 체크리스트

### 대표 실수

- B-immediate의 최하위 bit는 항상 0이라 encoding에 직접 저장되지 않습니다.
- bit31부터 immediate를 연속 12 bit로 읽는 것입니다.
- opcode만 보고 모든 branch를 beq라고 부르는 것입니다.
- s0와 s1의 field 위치를 바꾸거나 s0를 x0로 읽는 것입니다.
- imm bit를 encoding에 놓인 순서 그대로 이어 잘못된 값을 만드는 것입니다.

### 빠른 self-check

- **회상 질문:** 왜 branch offset은 보통 짝수 단위인가요?
- [ ] B-type bit열에서 opcode, funct3, rs1, rs2, immediate를 순서대로 표시할 수 있다.
- [ ] 임의의 작은 짝수 branch offset을 encode/decode할 때 implicit bit 0을 빠뜨리지 않는다.

## 11. 짧은 확인 문제와 전이 연습

### 개념 재구성

**문제:** B-type encoding 위치 네 묶음을 실제 immediate bit 순서로 재배열하는 공식을 쓰고 imm[0]이 저장되지 않는 이유를 설명하세요.

**힌트:** bit31과 bit7이 각각 immediate의 어느 bit인지 복원하세요.

<details>
<summary>정답과 채점 기준 보기</summary>

**모범 답:** `bit31→imm[12]`, `bits30:25→imm[10:5]`, `bits11:8→imm[4:1]`, `bit7→imm[11]`로 재배열하고 끝에 `imm[0]=0`을 붙입니다. branch target이 정렬되어 offset이 짝수 단위이므로 bit 0을 저장하지 않습니다.

**채점 기준**
  - bit31→imm[12]|bit31->imm[12]
  - bits30:25→imm[10:5]|bits30:25->imm[10:5]
  - bits11:8→imm[4:1]|bits11:8->imm[4:1]
  - bit7→imm[11]|bit7->imm[11]
  - imm[0]=0
  - 짝수|정렬

</details>

### 변형 문제

**문제:** `beq x3,x4,16`을 B-type hex로 encoding하세요.

**힌트:** +16의 imm[4:1]은 `1000`이고 나머지 상위 immediate 조각은 0입니다.

<details>
<summary>정답과 채점 기준 보기</summary>

**모범 답:** `rs1=x3`, `rs2=x4`, funct3=`000`, offset=16을 배치하면 `beq x3,x4,16 = 0x00418863`입니다.

**채점 기준**
  - rs1=x3
  - rs2=x4
  - 000
  - offset=16
  - 0x00418863

</details>

### 오답 진단

**문제:** 학생이 공식 bit열의 immediate 조각을 `bit31→imm[11]`, `bit7→imm[0]`으로 읽어 +6을 얻었습니다. 첫 field 오류와 +12 복원에서 빠진 동작을 지적하세요.

**힌트:** B-type에서 저장하지 않는 최하위 bit를 찾으세요.

<details>
<summary>정답과 채점 기준 보기</summary>

**모범 답:** 첫 오류는 bit31을 imm[11]로 본 것입니다. bit31은 imm[12]이고 bit7은 imm[11]입니다. 조각을 올바르게 재배열한 뒤 저장되지 않은 `imm[0]=0`을 붙여야 실제 offset +12가 됩니다.

**채점 기준**
  - bit31
  - imm[12]
  - bit7
  - imm[11]
  - imm[0]=0
  - +12

</details>

## 12. 근거 자료

- `[문제 출처] current:Probeklausur.pdf` — 시험 p6 · 공식 해설 p7
- `[공식 해설] current:Probeklausur Musterlösung und Hinweise.pdf` — 시험 p6 · 공식 해설 p7
- `[정확한 원문 group] 2` — 시험 p.6 · 공식 해설 p.7
- `[소문항 범위] SoSe26 Probeklausur 시험 p6 Aufgabe 2의 `beq s0,s1,12` 후보·bit열과 공식 해설 p7의 해당 pairing.`
- `[개념 근거 · file-level] current:Vorlesung/Rechnerorganisation - Teil 1.pdf` — RISC-V instruction format과 machine language
- `[개념 근거 · file-level] current:Uebung/Übung 1 Musterlösung.pdf` — RISC-V format과 encoding
- `[개념 근거 · file-level] current:Uebung/Übung 2 Musterlösung/Rechnerorganisation_Übung2_Lösung.pdf` — Immediate와 assembler hand-trace
- `[개념 근거 · file-level] current:Uebung/RISC-V Reference.pdf` — register 별칭, opcode, pseudoinstruction

### 이 파일에서 직접 대조한 공식 이미지

- `exam-p06.png` — Probeklausur.pdf · PDF p.6
- `solution-p07.png` — Probeklausur Musterlösung und Hinweise.pdf · PDF p.7

정확한 강의 슬라이드 한 페이지를 확정하지 못한 개념 자료는 `file-level`로 표시했습니다. 페이지 번호를 추측해서 만들지 않았습니다.
