왜 이 소문제를 따로 배우는가
Assembly 표기에서 먼저 보이는 register가 destination처럼 느껴지지만 Store에는 rd가 없습니다. 주소를 만드는 register와 memory에 쓸 register를 역할로 구분해야 datapath와 encoding 문제 모두 맞힐 수 있습니다.
이 페이지는 Aufgabe 2의 공통 템플릿이 아니라 2-4 `sw a4,8(t0)` 매칭에 필요한 내용만 담습니다. 챕터 전체 배경이 필요하면 Aufgabe 2 개념 수업을 먼저 읽으세요.
이 소문제에서 실제로 쓰는 용어
정의뿐 아니라 이 문제의 어느 판단에 쓰이는지까지 연결합니다.
- sw
- register의 하위 32-bit word를 계산된 memory address에 저장하는 S-type instruction입니다.이 소문제에서: funct3 `010`과 store opcode `0100011`을 확인합니다.
- rs1 (base)
- effective address `rs1+immediate`의 기준이 되는 source register입니다.이 소문제에서: `sw a4,8(t0)`에서 괄호 속 t0(x5)를 rs1로 둡니다.
- rs2 (store data)
- memory에 실제로 쓸 값을 제공하는 source register입니다.이 소문제에서: `sw a4,8(t0)`의 첫 operand a4(x14)를 rs2로 둡니다.
- S-immediate
- 12-bit signed offset이 `imm[11:5]`와 `imm[4:0]`으로 나뉘어 저장되는 field입니다.이 소문제에서: 상·하위 조각을 합쳐 offset 8인지 확인합니다.
이 소문제 전용 규칙과 종이 작업
괄호가 base 규칙
RISC-V store 표기 `sw rs2,imm(rs1)`에서 괄호 안 register가 address base인 rs1이고 첫 register가 data source인 rs2입니다.
종이에: `address=base+imm`, `memory[address]←data`를 operand 아래에 씁니다.
Store에는 rd 없음
Store 결과는 register가 아니라 memory에 기록되므로 R-type/I-type의 rd 위치가 immediate 하위 조각으로 재사용됩니다.
종이에: S-type layout에 `imm[11:5]|rs2|rs1|funct3|imm[4:0]|opcode`를 씁니다.
signed 조각 재결합
두 immediate 조각을 `imm[11:5]` 다음 `imm[4:0]` 순서로 붙인 뒤 12-bit signed 값으로 읽습니다.
종이에: 상위와 하위 조각 사이에 연결선을 그어 하나의 12-bit 값을 만듭니다.
Aufgabe 전체 흐름은 챕터 흐름도에서 확인할 수 있습니다. 여기서는 현재 판단에 직접 필요한 규칙만 적용합니다.
이 소문제 전용 작은 예제
`sw t1,12(s0)`을 hex로 encoding하세요.
주어진 것
- t1=x6, s0=x8입니다.
- sw opcode는 `0100011`, funct3는 `010`입니다.
- operand 역할과 register 번호를 정합니다.
괄호 속 s0가 address base이고 t1이 store data입니다.
종이 산출물: `rs1=s0=x8, rs2=t1=x6, imm=12`
- 12-bit immediate를 상·하위 조각으로 나눕니다.
S-type에는 연속 immediate field가 없습니다.
종이 산출물: `12=0000000|01100 → imm[11:5]=0000000, imm[4:0]=01100`
- S-type field를 조립해 hex로 바꿉니다.
opcode, funct3, 두 source, 두 immediate 조각을 모두 검산합니다.
종이 산출물: `0000000 00110 01000 010 01100 0100011 = 0x00642623`
예제 답과 독립 검산 보기
`sw t1,12(s0)`의 encoding은 `0x00642623`입니다.
독립 검산: 해독했을 때 bits[19:15]=x8, bits[24:20]=x6이 되는지 역으로 읽습니다.
이 instruction의 field를 실제로 채우기
아래 표는 이 소문제만의 값입니다. 일반 format 표와 섞지 말고 각 행을 bit열에서 직접 가리켜 보세요.
| format | S-type sw |
|---|---|
| opcode | 0100011 |
| funct3 | 010 |
| rs1 | t0=x5, 주소 base |
| rs2 | a4=x14, 저장 data |
| imm | 8, 상·하위 조각으로 분할 |
이제 실제 시험 문제를 micro-work로 풀기
공식 시험이 요구하는 것
store word의 source와 base를 구분하세요.
공식 답을 보기 전, 내 답 먼저 남기기
완성 문장이 아니어도 좋습니다. 중간값·register·cycle·cache state처럼 채점 가능한 흔적을 먼저 적으세요.
각 작업의 중간 산출물을 직접 적고 완료 조건을 만족한 뒤 체크하세요. 단계별 이유·산출물·오류가 현재 소문제에 맞게 따로 작성되어 있습니다.
오른쪽 opcode `0100011`을 찾아 S-type store임을 확인합니다.
- 왜 하는가
- S-type layout을 적용하기 전에 instruction family를 확정해야 합니다.
- 종이 산출물
- `bits[6:0]=0100011 → Store/S-type`
- 완료 조건
- 후보 bit열이 load나 R-type이 아닌 store로 분류되었습니다.
막혔을 때 단계 힌트·대표 오류
힌트: hex encoding의 하위 7 bit는 `0x23` 계열입니다.
이 단계의 대표 오류: `lw`와 같은 load opcode `0000011`로 읽는 것입니다.
funct3 `010`으로 word store를 확인합니다.
- 왜 하는가
- 같은 store opcode에서 sb, sh, sw의 data 크기는 funct3가 구분합니다.
- 종이 산출물
- `funct3=010 → sw(32-bit word)`
- 완료 조건
- Store family뿐 아니라 word 크기까지 확인했습니다.
막혔을 때 단계 힌트·대표 오류
힌트: bits[14:12]를 보세요.
이 단계의 대표 오류: opcode만 맞으면 byte/halfword/word 종류도 맞다고 가정하는 것입니다.
rs1=t0(x5)와 rs2=a4(x14)를 역할로 확인합니다.
- 왜 하는가
- `sw a4,8(t0)`에서 t0는 address base, a4는 memory에 쓸 data입니다.
- 종이 산출물
- `address=t0+8; memory[address]←a4`, `rs1=00101`, `rs2=01110`을 적습니다.
- 완료 조건
- Assembly operand, ABI 이름, x번호, field 위치가 모두 일치합니다.
막혔을 때 단계 힌트·대표 오류
힌트: 괄호 안을 rs1, 쉼표 앞 첫 register를 rs2로 읽으세요.
이 단계의 대표 오류: 표기 순서대로 a4를 rs1/base로 두는 것입니다.
나뉜 immediate 상·하위 조각을 합쳐 8인지 확인합니다.
- 왜 하는가
- 같은 register를 쓰는 다른 store offset과 구분하려면 주소 차이까지 맞아야 합니다.
- 종이 산출물
- `imm[11:5]|imm[4:0] = 0000000|01000 = 8`을 씁니다.
- 완료 조건
- 12-bit immediate와 decimal 8이 모두 표시되어 있습니다.
막혔을 때 단계 힌트·대표 오류
힌트: bits[31:25]가 상위 7 bit, bits[11:7]이 하위 5 bit입니다.
이 단계의 대표 오류: 두 조각을 반대 순서로 붙이거나 bits[11:7]을 rd로 읽는 것입니다.
공식 답을 열기 전 마지막 회상
`sw t1,12(s0)`에서 rs1과 rs2는 각각 무엇인가요?
내 풀이 후 공식 결론·이유·대표 함정 확인
공식 결론
`sw a4,8(t0)` ↔ `00000000111000101010010000100011`.
왜 이 답이 되는가
S-type에서 rs1은 주소 base, rs2는 memory에 쓸 data입니다. `sw a4,8(t0)`는 rs1=t0(x5), rs2=a4(x14), imm=8입니다.
대표 함정
표기 순서만 보고 a4를 base로 착각하지 마세요.
명령어와 식을 줄 단위로 읽기
본문 속 code를 한 줄씩 분리했습니다. 각 줄에서 source, operation, destination을 표시하세요.
sw a4,8(t0)
00000000111000101010010000100011새 문제로 전이하기
세 문항은 앞 문장의 반복이 아닙니다. 직접 답을 입력하면 rubric의 필수 기준을 하나씩 검사하고, 첫 누락 기준을 알려 줍니다.
1. 개념 재구성
`sw rs2,imm(rs1)`의 S-type field 순서와 실행 의미를 rd가 없다는 점까지 포함해 복원하세요.
주소 계산 source와 memory data source를 따로 쓰세요.
제출 후 모델 답 보기
S-type field는 `imm[11:5] | rs2 | rs1 | funct3 | imm[4:0] | opcode`입니다. 실행 의미는 `address=rs1+imm`, `memory[address]←rs2`이고 결과를 register에 쓰지 않으므로 rd가 없습니다.
2. 변형 문제
`sw a0,-4(sp)`을 hex로 encoding하세요. a0=x10, sp=x2입니다.
-4의 12-bit Zweierkomplement는 `0xFFC`입니다.
제출 후 모델 답 보기
`rs1=sp=x2`, `rs2=a0=x10`, `imm=-4=0xFFC`를 S-type에 배치하면 encoding은 `0xFEA12E23`입니다.
3. 오류 진단
학생이 `sw a4,8(t0)`를 `rs1=a4, rs2=t0`로 해독했습니다. 첫 오류를 실행 의미와 field 번호로 수정하세요.
주소를 만드는 register는 괄호 안에 있습니다.
제출 후 모델 답 보기
첫 오류는 Assembly 표기 순서를 field 순서로 본 것입니다. 괄호 안 t0가 base이므로 `rs1=t0=x5`, memory에 쓸 a4가 `rs2=a4=x14`입니다. 실행은 `memory[t0+8]←a4`입니다.
이 소문제를 끝냈다고 말할 수 있는 기준
이 소문제의 정확한 공식 페이지와 대조하기
왼쪽은 문제를 읽을 때, 오른쪽은 자신의 풀이를 끝낸 뒤에 확인하세요. 해설 이미지를 먼저 보면 중간 과정을 스스로 만드는 연습이 사라집니다.
Source: Probeklausur.pdf / Probeklausur Musterlösung und Hinweise.pdf · 시험 p6 · 공식 해설 p7 · SoSe26 Probeklausur 시험 p6 Aufgabe 2의 `sw a4,8(t0)` 후보·bit열과 공식 해설 p7의 해당 pairing.

