---
schema_version: 1
exam_id: "sose26-probeklausur"
aufgabe: 6
unit_id: "6a-2"
source_group_id: "6a"
official_exam: true
official_solution: true
language: "ko"
---

# 6a-2 — MemAdr 상태

> **학습 목표:** MemAdr 상태에서 rs1과 sign-extended immediate로 effective address를 계산해 ALUOut에 보관하는 과정을 설명하고 계산할 수 있다.
>
> **왜 따로 배우는가:** load/store는 주소 계산과 memory 접근이 다른 cycle에 일어납니다. 이를 합쳐 생각하면 FSM state와 control path를 잘못 그리게 됩니다.
>
> **범위:** Aufgabe 6 · 14점 Aufgabe의 최소 학습 단위 · 시험 p12–13 · 공식 해설 p37–38

## 1. 문제 원문 (Deutsch)

이 unit은 공식 Teilaufgabe 또는 표의 한 행·한 access를 학습 가능한 최소 단위로 다시 나눈 것입니다. 아래 전사는 source group `6a`의 공식 독일어 문제 원문이며, 페이지 이미지를 바로 뒤에 함께 두어 코드·표·도식을 대조할 수 있게 했습니다.

~~~text
Aufgabe 6: Mehrtaktprozessor

6a) FSM verstehen und beschreiben

Geben Sie in maximal drei Sätzen an, wofür jeder der folgenden Zustände verantwortlich ist.

Hinweise:

• Beschreiben Sie die konkrete Verantwortung bzw. Funktionalität des jeweiligen Zustandes.
• Ungenaue oder sachlich falsche Formulierungen (wie z.B. „im Fetch-Zustand wird die Instruktion gefetcht“) werden mit einem Punkt Abzug bewertet.

Fetch:

In diesem Zustand wird eine Instruktion aus dem Speicher unter der Adresse des PC-Registers geladen und im Instruction-Register abgelegt. Zudem wird der Wert des PC-Registers um 4 erhöht und im PC-Register aktualisiert, um den Übergang zur nächsten Instruktion zu ermöglichen.

MemAdr:

[leeres Antwortfeld]

JAL:

[leeres Antwortfeld]

BEQ:

[leeres Antwortfeld]
~~~

![공식 시험 원문 — exam-p12.png](../../assets/exam-p12.png)

*공식 시험 원문: `exam-p12.png` · Probeklausur.pdf · PDF p.12*

### 이 unit에서 풀 항목

MemAdr가 어떤 값을 계산하고 어디에 보관하는지 쓰세요.

## 2. 쉬운 한국어 해석

문제 6: 다중 사이클 프로세서(Mehrtaktprozessor)

6a) FSM 이해 및 설명

다음 각 상태가 무엇을 담당하는지 최대 세 문장으로 쓰시오.

주의사항:

• 각 상태가 맡는 구체적인 책임 또는 기능을 설명하시오.
• 'Fetch 상태에서는 명령을 fetch한다'와 같이 부정확하거나 사실과 다른 표현은 1점 감점된다.

Fetch:

이 상태에서는 PC 레지스터의 주소에 있는 명령 하나를 메모리에서 읽어 Instruction Register에 저장한다. 또한 다음 명령으로 진행할 수 있도록 PC 레지스터의 값을 4만큼 증가시키고 그 결과로 PC 레지스터를 갱신한다.

MemAdr:

[빈 답안 칸]

JAL:

[빈 답안 칸]

BEQ:

[빈 답안 칸]

### 이 unit에 해당하는 최소 작업

MemAdr가 어떤 값을 계산하고 어디에 보관하는지 쓰세요.

이 문제에서 최종 결과만 맞히는 것보다 중요한 것은 `6a-2`에 필요한 중간 판단을 답안지에 남기는 것입니다.

## 3. 무엇을 묻는 문제인가

### 공식 문제의 요구사항

- Fetch, MemAdr, JAL, BEQ 각 FSM 상태의 구체적인 책임과 수행 동작을 설명한다.
- 상태 이름을 되풀이하지 않고 memory/register/PC에 실제로 무엇을 읽고 계산하고 저장하는지 서술한다.

### 조건과 제약

- 설명은 최대 세 문장으로 제한된다.
- 각 상태의 구체적인 책임 또는 기능을 써야 한다.
- 부정확하거나 사실과 다른 문장은 1점 감점된다.
- 시험지에는 Fetch 설명이 이미 채워져 있고 MemAdr, JAL, BEQ의 답안 칸만 비어 있다.

### 원문 오탈자·도식 관련 주의

- 원문은 'jeder der folgenden Zustände'라고 쓰고 전체 설명에 'maximal drei Sätzen' 제한을 둔다. 상태별 세 문장인지 전체 세 문장인지 문법적으로 약간 여지가 있으나, 시험지 레이아웃은 상태마다 별도 답안 칸을 제공한다.
- Fetch는 빈 문제가 아니라 시험지에 완성된 설명이 미리 인쇄되어 있다. MemAdr, JAL, BEQ만 빈 칸이다.
- 'im Fetch-Zustand wird die Instruktion gefetcht'는 원문이 제시한 감점 대상 예시이므로 올바른 설명으로 취급하면 안 된다.

### 도식 시각 확인 상태

- **도식 의존 여부:** 이 최소 unit의 핵심 판정은 텍스트·수식·코드로 재현할 수 있습니다.
- **공식 페이지 상태:** exam-p12.png, solution-p37.png가 원문 대조용으로 렌더되어 연결되어 있습니다.

### 이 unit의 학습 목표

- **관찰 가능한 목표:** MemAdr 상태에서 rs1과 sign-extended immediate로 effective address를 계산해 ALUOut에 보관하는 과정을 설명하고 계산할 수 있다.
- **출제 의도:** load/store는 주소 계산과 memory 접근이 다른 cycle에 일어납니다. 이를 합쳐 생각하면 FSM state와 control path를 잘못 그리게 됩니다.
- **공식 근거 범위:** Probeklausur.pdf 시험 p12의 Mehrtakt FSM MemAdr 상태와 Probeklausur Musterlösung und Hinweise.pdf 공식 해설 p37 MemAdr.
- **Aufgabe 공통 선수지식:** State 이름을 되풀이하지 말고 그 cycle에서 ‘어디서 읽어 어디에 저장하는가’를 말합니다. 주파수는 모든 사용 cycle path 중 가장 긴 delay의 역수입니다.

## 4. 선수 개념과 핵심 용어

### effective address

- **뜻:** 실제 memory 접근에 사용할 base register 값과 offset의 합입니다.
- **이 문제에서:** lw/sw가 다음 state에서 사용할 주소를 계산할 때 사용합니다.

### rs1

- **뜻:** load/store 주소 계산의 base 값을 제공하는 source register입니다.
- **이 문제에서:** MemAdr ALU 첫 입력의 의미를 명시할 때 사용합니다.

### sign extension

- **뜻:** signed immediate의 부호를 유지하면서 processor data width로 넓히는 연산입니다.
- **이 문제에서:** 음수 offset도 base에 정확히 더할 수 있게 설명할 때 사용합니다.

### ALUOut

- **뜻:** ALU 결과를 다음 Mehrtakt state까지 보관하는 중간 register입니다.
- **이 문제에서:** MemAdr에서 계산한 주소의 destination을 명시할 때 사용합니다.

### 이 문제에 적용할 풀이 규칙

### 규칙 1. 주소는 base+signed offset이다

load/store syntax imm(rs1)의 실제 byte 주소는 Register File의 rs1 값과 확장한 immediate의 합입니다.

- **시험지에 남길 것:** instruction을 EA = R[rs1] + sext(imm) 식으로 다시 씁니다.

### 규칙 2. MemAdr는 memory access 이전 상태다

이 state의 목적은 주소 계산과 ALUOut 보관이며 Data Memory read/write는 후속 state가 수행합니다.

- **시험지에 남길 것:** MemAdr 결과 칸에는 ALUOut만 쓰고 memory data 결과 칸은 비워 둡니다.

### 공식 문제 전에 푸는 작은 유사 예제

**문제:** s1=0x0200일 때 lw t0,-8(s1)의 MemAdr state 결과를 구하세요.

**주어진 것**

- offset -8은 signed immediate입니다.
- 주소는 byte 단위입니다.
- ALU 결과는 ALUOut에 저장됩니다.

### 예제 단계 1. rs1과 immediate를 instruction에서 분리합니다.

- **왜:** base와 displacement의 역할을 바꾸지 않기 위해서입니다.
- **종이에:** base=R[s1]=0x0200, imm=-8

### 예제 단계 2. immediate를 부호 확장한 값으로 해석해 더합니다.

- **왜:** 음수 offset은 base보다 앞쪽 주소를 가리킵니다.
- **종이에:** 0x0200 + (-8) = 0x01F8

### 예제 단계 3. 결과 destination을 ALUOut으로 적습니다.

- **왜:** 다음 memory state가 안정된 effective address를 사용해야 합니다.
- **종이에:** ALUOut' = 0x01F8

**예제 정답:** MemAdr 종료 시 ALUOut=0x01F8이며 아직 t0 writeback이나 memory read 완료를 주장하지 않습니다.

**독립 검산:** offset -8을 +8로 처리하지 않았는지, 결과가 ALUOut이지 일반 rd가 아닌지 확인합니다.

## 5. 공식 정답 요약

**공식 결론:** ALU addiert Basisadresse und erweiterten Offset; die berechnete Speicheradresse wird für späteres lw/sw im ALUOut-Register gespeichert.

### 시험지 문장별 정답 해설

아래는 시험지의 항목 순서를 그대로 유지합니다. 각 항목에서 원문 → 한국어 번역 → 정답 → 판단 근거 → 실제로 쓸 답을 바로 이어서 읽으세요.



### 현재 소문제의 요구·판단·답을 한 흐름으로 연결

### `6a-2`에서 정확히 답할 대상

- **시험지가 요구하는 답:** MemAdr가 어떤 값을 계산하고 어디에 보관하는지 쓰세요.
- **이 소문제의 공식 답:** ALU addiert Basisadresse und erweiterten Offset; die berechnete Speicheradresse wird für späteres lw/sw im ALUOut-Register gespeichert.

### 판단 1. rs1 값을 읽습니다.

- **왜:** effective address의 base는 load/store의 괄호 안 register가 제공합니다.
- **이 판단에서 답안지에 남길 것:** R[rs1] 값을 base 항으로 적습니다.

### 판단 2. immediate를 extend합니다.

- **왜:** processor width의 ALU에서 signed offset을 더하려면 부호를 유지해 확장해야 합니다.
- **이 판단에서 답안지에 남길 것:** imm의 decimal/hex 값과 sext(imm)를 적습니다.

### 판단 3. ALU add를 수행합니다.

- **왜:** RISC-V load/store의 effective address는 base와 byte offset의 합입니다.
- **이 판단에서 답안지에 남길 것:** EA = R[rs1] + sext(imm)의 중간 산술을 적습니다.

### 판단 4. ALUOut에 effective address를 저장합니다.

- **왜:** Mehrtakt datapath에서 후속 lw/sw state가 이 주소를 다음 cycle에 사용합니다.
- **이 판단에서 답안지에 남길 것:** ALUOut' = EA를 박스로 표시합니다.

### 위 판단이 최종 답으로 이어지는 이유

Load/store의 effective address는 base register + sign-extended offset입니다. ALU 결과는 다음 state가 쓰도록 ALUOut에 저장됩니다.

### 답안 작성 시 주의

이 state에서 data memory read/write까지 끝난다고 쓰지 마세요. 주소 계산 단계입니다.

![공식 Musterlösung/Hinweise — solution-p37.png](../../assets/solution-p37.png)

*공식 Musterlösung/Hinweise: `solution-p37.png` · Probeklausur Musterlösung und Hinweise.pdf · PDF p.37*

## 6. 풀이 전략

1. rs1 값을 읽습니다.
2. immediate를 extend합니다.
3. ALU add를 수행합니다.
4. ALUOut에 effective address를 저장합니다.

## 7. 단계별 상세 풀이

### 단계 1. rs1 값을 읽습니다.

- **이유:** effective address의 base는 load/store의 괄호 안 register가 제공합니다.
- **종이에 남길 것:** R[rs1] 값을 base 항으로 적습니다.
- **완료 기준:** store data register와 주소 base register를 구분합니다.
- **막힐 때 힌트:** imm(rs1) 표기에서 괄호 안 이름을 찾으세요.
- **가장 흔한 첫 오류:** sw의 첫 register를 주소 base로 사용합니다.

### 단계 2. immediate를 extend합니다.

- **이유:** processor width의 ALU에서 signed offset을 더하려면 부호를 유지해 확장해야 합니다.
- **종이에 남길 것:** imm의 decimal/hex 값과 sext(imm)를 적습니다.
- **완료 기준:** 음수 immediate가 큰 unsigned 양수로 잘못 바뀌지 않습니다.
- **막힐 때 힌트:** 최상위 immediate bit가 1이면 상위 bit를 1로 채웁니다.
- **가장 흔한 첫 오류:** zero extension을 사용해 음수 offset을 양수로 만듭니다.

### 단계 3. ALU add를 수행합니다.

- **이유:** RISC-V load/store의 effective address는 base와 byte offset의 합입니다.
- **종이에 남길 것:** EA = R[rs1] + sext(imm)의 중간 산술을 적습니다.
- **완료 기준:** 단위를 byte address로 유지한 최종 EA가 있습니다.
- **막힐 때 힌트:** word index를 곱하는 문제가 아니라 instruction에 이미 byte offset이 들어 있습니다.
- **가장 흔한 첫 오류:** offset에 다시 4를 곱합니다.

### 단계 4. ALUOut에 effective address를 저장합니다.

- **이유:** Mehrtakt datapath에서 후속 lw/sw state가 이 주소를 다음 cycle에 사용합니다.
- **종이에 남길 것:** ALUOut' = EA를 박스로 표시합니다.
- **완료 기준:** 이 state에서 완료된 것과 아직 하지 않은 memory access를 분리해 설명합니다.
- **막힐 때 힌트:** 상태 이름은 MemAdr이지 MemRead 또는 MemWrite가 아닙니다.
- **가장 흔한 첫 오류:** 같은 state에서 Data Memory read/write와 register writeback까지 끝났다고 씁니다.

## 8. 문제와 공식 해설의 비교·검증

- **문제가 요구하는 것:** MemAdr가 어떤 값을 계산하고 어디에 보관하는지 쓰세요.
- **공식 해설이 제시하는 결론:** ALU addiert Basisadresse und erweiterten Offset; die berechnete Speicheradresse wird für späteres lw/sw im ALUOut-Register gespeichert.
- **결론을 재현하는 핵심 논리:** Load/store의 effective address는 base register + sign-extended offset입니다. ALU 결과는 다음 state가 쓰도록 ALUOut에 저장됩니다.
- **검증 방법:** 위 micro-step의 `종이에 남길 것`을 순서대로 만들고 각 `완료 기준`을 확인합니다. 최종 산출물이 공식 결론과 같은지 대조합니다.
- **전제와 주의 범위:** 이 state에서 data memory read/write까지 끝난다고 쓰지 마세요. 주소 계산 단계입니다.
- **채택할 시험 답:** 이 가이드에서는 공식 Musterlösung의 결론을 시험 답으로 유지하며, 일반 ISA 또는 다른 구현과 달라질 수 있는 부분은 위 전제와 주의 범위에서 분리합니다.

## 9. 시험장에서 쓸 최종 답안

ALU addiert Basisadresse und erweiterten Offset; die berechnete Speicheradresse wird für späteres lw/sw im ALUOut-Register gespeichert.

시험지의 ‘최대 3문장’ 제한을 지키면서 source, 수행 연산, destination register를 구체적으로 쓰세요.

## 10. 자주 하는 실수와 검산 체크리스트

### 대표 실수

- 이 state에서 data memory read/write까지 끝난다고 쓰지 마세요. 주소 계산 단계입니다.
- sw의 첫 register를 주소 base로 사용합니다.
- zero extension을 사용해 음수 offset을 양수로 만듭니다.
- offset에 다시 4를 곱합니다.
- 같은 state에서 Data Memory read/write와 register writeback까지 끝났다고 씁니다.

### 빠른 self-check

- **회상 질문:** `lw t0,12(s1)`의 MemAdr 결과는 어떤 식인가요?
- [ ] 양수·음수 offset의 lw/sw 세 문제를 ALUOut까지 계산할 수 있다.
- [ ] MemAdr와 실제 memory read/write state의 책임을 분리해 말할 수 있다.

## 11. 짧은 확인 문제와 전이 연습

### 개념 재구성

**문제:** MemAdr state를 하나의 register-transfer 식과 한 문장으로 재구성하세요.

**힌트:** base, sign-extended immediate, ALUOut을 포함하세요.

<details>
<summary>정답과 채점 기준 보기</summary>

**모범 답:** ALUOut' = R[rs1] + sext(imm). 이 state는 lw/sw의 effective address만 계산하고 memory 접근은 다음 state에 넘깁니다.

**채점 기준**
  - ALUOut
  - rs1|base
  - sign|sext
  - memory 접근은 다음 state

</details>

### 변형 문제

**문제:** s2=0x1000일 때 sw t3,20(s2)의 MemAdr 결과를 구하세요.

**힌트:** store data t3는 주소 계산에 더하지 않습니다.

<details>
<summary>정답과 채점 기준 보기</summary>

**모범 답:** base는 s2이고 t3는 store data이므로 ALUOut=0x1014.

**채점 기준**
  - 0x1014
  - base는 s2
  - t3는 store data

</details>

### 오답 진단

**문제:** 학생이 lw t0,-4(s1)의 MemAdr에서 ALUOut=R[t0]-4라고 적었습니다. 첫 오류를 교정하세요.

**힌트:** load syntax에서 destination과 base를 구분하세요.

<details>
<summary>정답과 채점 기준 보기</summary>

**모범 답:** t0는 load destination이고 주소 base는 괄호 안 s1입니다. 따라서 ALUOut=R[s1]+sext(-4)입니다.

**채점 기준**
  - s1
  - t0는 load destination
  - -4|sext

</details>

## 12. 근거 자료

- `[문제 출처] current:Probeklausur.pdf` — 시험 p12–13 · 공식 해설 p37–38
- `[공식 해설] current:Probeklausur Musterlösung und Hinweise.pdf` — 시험 p12–13 · 공식 해설 p37–38
- `[정확한 원문 group] 6a` — 시험 p.12 · 공식 해설 p.37
- `[소문항 범위] Probeklausur.pdf 시험 p12의 Mehrtakt FSM MemAdr 상태와 Probeklausur Musterlösung und Hinweise.pdf 공식 해설 p37 MemAdr.`
- `[개념 근거 · file-level] current:Vorlesung/Rechnerorganisation - Teil 2.pdf` — Mehrtakt datapath, FSM, timing
- `[개념 근거 · file-level] current:Uebung/Lösung 7.pdf` — Eintakt/Mehrtakt 단계 비교
- `[개념 근거 · file-level] current:Uebung/Lösung 8.pdf` — Mehrtakt FSM과 PC update

### 이 파일에서 직접 대조한 공식 이미지

- `exam-p12.png` — Probeklausur.pdf · PDF p.12
- `solution-p37.png` — Probeklausur Musterlösung und Hinweise.pdf · PDF p.37

정확한 강의 슬라이드 한 페이지를 확정하지 못한 개념 자료는 `file-level`로 표시했습니다. 페이지 번호를 추측해서 만들지 않았습니다.
