UNIT-SPECIFIC ACTIVE LESSON · 2-4

`sw a4,8(t0)` 매칭

store word의 source와 base를 구분하세요.

학습 목표: S-type `sw data,offset(base)`에서 rs1=base와 rs2=data를 구분하고 분할 immediate를 복원해 encoding을 매칭한다.
공식 근거 범위: SoSe26 Probeklausur 시험 p6 Aufgabe 2의 `sw a4,8(t0)` 후보·bit열과 공식 해설 p7의 해당 pairing.

왜 이 소문제를 따로 배우는가

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`입니다.
  1. operand 역할과 register 번호를 정합니다.

    괄호 속 s0가 address base이고 t1이 store data입니다.

    종이 산출물: `rs1=s0=x8, rs2=t1=x6, imm=12`

  2. 12-bit immediate를 상·하위 조각으로 나눕니다.

    S-type에는 연속 immediate field가 없습니다.

    종이 산출물: `12=0000000|01100 → imm[11:5]=0000000, imm[4:0]=01100`

  3. 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열에서 직접 가리켜 보세요.

formatS-type sw
opcode0100011
funct3010
rs1t0=x5, 주소 base
rs2a4=x14, 저장 data
imm8, 상·하위 조각으로 분할

이제 실제 시험 문제를 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가 없다는 점까지 포함해 복원하세요.

제출 후 모델 답 보기

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입니다.

제출 후 모델 답 보기

`rs1=sp=x2`, `rs2=a0=x10`, `imm=-4=0xFFC`를 S-type에 배치하면 encoding은 `0xFEA12E23`입니다.

3. 오류 진단

학생이 `sw a4,8(t0)`를 `rs1=a4, rs2=t0`로 해독했습니다. 첫 오류를 실행 의미와 field 번호로 수정하세요.

제출 후 모델 답 보기

첫 오류는 Assembly 표기 순서를 field 순서로 본 것입니다. 괄호 안 t0가 base이므로 `rs1=t0=x5`, memory에 쓸 a4가 `rs2=a4=x14`입니다. 실행은 `memory[t0+8]←a4`입니다.

이 소문제를 끝냈다고 말할 수 있는 기준

이 소문제의 정확한 공식 페이지와 대조하기

왼쪽은 문제를 읽을 때, 오른쪽은 자신의 풀이를 끝낸 뒤에 확인하세요. 해설 이미지를 먼저 보면 중간 과정을 스스로 만드는 연습이 사라집니다.

2-4 관련 공식 시험 또는 해설 페이지
exam-p06.png · 클릭해 원본 크기로 확인
2-4 관련 공식 시험 또는 해설 페이지
solution-p07.png · 클릭해 원본 크기로 확인

Source: Probeklausur.pdf / Probeklausur Musterlösung und Hinweise.pdf · 시험 p6 · 공식 해설 p7 · SoSe26 Probeklausur 시험 p6 Aufgabe 2의 `sw a4,8(t0)` 후보·bit열과 공식 해설 p7의 해당 pairing.