왜 이 소문제를 따로 배우는가
R-type은 immediate 재조립이 없어 보여도 add와 sub가 opcode/funct3를 공유합니다. 세 register의 방향과 funct7까지 확인하는 습관이 ‘대충 add처럼 보이는’ 오답을 막습니다.
이 페이지는 Aufgabe 2의 공통 템플릿이 아니라 2-5 `add t0,a6,t2` 매칭에 필요한 내용만 담습니다. 챕터 전체 배경이 필요하면 Aufgabe 2 개념 수업을 먼저 읽으세요.
이 소문제에서 실제로 쓰는 용어
정의뿐 아니라 이 문제의 어느 판단에 쓰이는지까지 연결합니다.
- R-type
- 두 register source에 연산을 적용해 한 register destination에 쓰는 format입니다.이 소문제에서: `funct7|rs2|rs1|funct3|rd|opcode` layout으로 후보를 해독합니다.
- rd
- 연산 결과가 기록되는 destination register field `bits[11:7]`입니다.이 소문제에서: `add t0,a6,t2`에서 t0(x5)를 확인합니다.
- funct3
- opcode 내부의 세부 연산군을 구분하는 3-bit field입니다.이 소문제에서: add/sub 후보에서 `000`인지 확인합니다.
- funct7
- R-type 세부 연산을 추가로 구분하는 상위 7-bit field입니다.이 소문제에서: funct3가 같은 add(`0000000`)와 sub(`0100000`)를 구분합니다.
이 소문제 전용 규칙과 종이 작업
세 register 방향 규칙
`add rd,rs1,rs2`에서 첫 operand만 destination이고 뒤 두 operand는 source입니다.
종이에: mnemonic 아래에 `rd ← rs1 op rs2` 식을 씁니다.
opcode+funct 결합 규칙
R-type opcode만으로 add를 확정할 수 없고 funct3와 funct7을 함께 읽어야 합니다.
종이에: `op=0110011, f3=000, f7=0000000` 세 칸을 모두 체크합니다.
ABI 이름 변환 규칙
t0, a6, t2를 각각 x5, x16, x7의 5-bit 번호로 바꿔야 encoding field와 비교할 수 있습니다.
종이에: 각 ABI 이름 바로 아래에 x번호와 5-bit binary를 적습니다.
Aufgabe 전체 흐름은 챕터 흐름도에서 확인할 수 있습니다. 여기서는 현재 판단에 직접 필요한 규칙만 적용합니다.
이 소문제 전용 작은 예제
`sub a0,a1,a2`를 hex로 encoding하세요.
주어진 것
- a0=x10, a1=x11, a2=x12입니다.
- sub는 opcode `0110011`, funct3 `000`, funct7 `0100000`입니다.
- 세 operand를 rd, rs1, rs2에 배치합니다.
Assembly 순서가 R-type register field 역할을 결정합니다.
종이 산출물: `rd=x10, rs1=x11, rs2=x12`
- sub의 funct7과 공통 funct3/opcode를 배치합니다.
add와 다른 핵심 bit는 funct7입니다.
종이 산출물: `0100000 01100 01011 000 01010 0110011`
- bit열을 hex로 변환합니다.
32-bit 후보와 정확히 비교할 수 있습니다.
종이 산출물: `0x40C58533`
예제 답과 독립 검산 보기
`sub a0,a1,a2`의 encoding은 `0x40C58533`입니다.
독립 검산: funct7만 `0000000`으로 바꾸면 같은 register의 add encoding이 되는지 확인합니다.
이 instruction의 field를 실제로 채우기
아래 표는 이 소문제만의 값입니다. 일반 format 표와 섞지 말고 각 행을 bit열에서 직접 가리켜 보세요.
| format | R-type add |
|---|---|
| opcode | 0110011 |
| rd | t0=x5 |
| funct3 | 000 |
| rs1 | a6=x16 |
| rs2 | t2=x7 |
| funct7 | 0000000 |
이제 실제 시험 문제를 micro-work로 풀기
공식 시험이 요구하는 것
R-type add의 세 register를 확인하세요.
공식 답을 보기 전, 내 답 먼저 남기기
완성 문장이 아니어도 좋습니다. 중간값·register·cycle·cache state처럼 채점 가능한 흔적을 먼저 적으세요.
각 작업의 중간 산출물을 직접 적고 완료 조건을 만족한 뒤 체크하세요. 단계별 이유·산출물·오류가 현재 소문제에 맞게 따로 작성되어 있습니다.
오른쪽 opcode `0110011`을 찾아 R-type integer register 연산으로 분류합니다.
- 왜 하는가
- R-type layout을 적용하고 immediate instruction을 제외하는 첫 기준입니다.
- 종이 산출물
- `bits[6:0]=0110011 → R-type`
- 완료 조건
- 후보가 register-register 연산 family로 분류되었습니다.
막혔을 때 단계 힌트·대표 오류
힌트: hex 하위 byte가 `0x33` 계열인지 보세요.
이 단계의 대표 오류: `addi`의 I-type opcode `0010011`과 섞는 것입니다.
funct3 `000`과 funct7 `0000000`으로 add를 확인합니다.
- 왜 하는가
- sub도 opcode와 funct3가 같으므로 funct7까지 맞아야 add입니다.
- 종이 산출물
- `f3=000, f7=0000000 → add`
- 완료 조건
- sub의 funct7 `0100000`과 비교 근거가 있습니다.
막혔을 때 단계 힌트·대표 오류
힌트: 최상위 7 bit를 확인하세요.
이 단계의 대표 오류: funct3 `000`만 보고 sub도 add로 판정하는 것입니다.
rd=t0(x5), rs1=a6(x16), rs2=t2(x7)를 확인합니다.
- 왜 하는가
- 연산 종류가 맞아도 register direction이 다르면 다른 instruction입니다.
- 종이 산출물
- `rd bits[11:7]=00101`, `rs1=10000`, `rs2=00111`을 표시합니다.
- 완료 조건
- 세 ABI 이름과 세 5-bit field가 모두 공식 후보와 일치합니다.
막혔을 때 단계 힌트·대표 오류
힌트: `add t0,a6,t2`는 `t0 ← a6+t2`로 읽으세요.
이 단계의 대표 오류: rd를 bits[19:15]에서 찾거나 a6와 t2를 destination으로 읽는 것입니다.
공식 답을 열기 전 마지막 회상
R-type에서 destination field는 bit 몇 번 영역인가요?
내 풀이 후 공식 결론·이유·대표 함정 확인
공식 결론
`add t0,a6,t2` ↔ `0x007802B3`.
왜 이 답이 되는가
R-type은 rd, rs1, rs2 세 register와 funct3/funct7로 연산을 구분합니다.
대표 함정
sub는 같은 funct3를 쓰지만 funct7가 0100000입니다.
명령어와 식을 줄 단위로 읽기
본문 속 code를 한 줄씩 분리했습니다. 각 줄에서 source, operation, destination을 표시하세요.
add t0,a6,t2
0x007802B3새 문제로 전이하기
세 문항은 앞 문장의 반복이 아닙니다. 직접 답을 입력하면 rubric의 필수 기준을 하나씩 검사하고, 첫 누락 기준을 알려 줍니다.
1. 개념 재구성
R-type field 순서를 bit31부터 bit0까지 복원하고 add와 sub를 구분하는 최소 field 조합을 설명하세요.
두 연산은 opcode와 funct3를 공유합니다.
제출 후 모델 답 보기
R-type 순서는 `funct7 | rs2 | rs1 | funct3 | rd | opcode`입니다. add와 sub는 opcode `0110011`과 funct3 `000`이 같으므로 funct7 `0000000`(add)와 `0100000`(sub)를 확인해야 합니다.
2. 변형 문제
`add a0,t0,t1`을 hex로 encoding하세요. a0=x10, t0=x5, t1=x6입니다.
funct7=0, rs2=x6, rs1=x5, funct3=0, rd=x10 순입니다.
제출 후 모델 답 보기
`rd=x10`, `rs1=x5`, `rs2=x6`, funct3=`000`, funct7=`0000000`을 배치하면 `add a0,t0,t1 = 0x00628533`입니다.
3. 오류 진단
학생이 `0x407802B3`을 공식 `add t0,a6,t2`로 골랐습니다. register field는 같지만 최상위 funct7가 `0100000`입니다. 첫 판정 오류와 실제 mnemonic을 쓰세요.
add와 sub의 유일한 구분 field를 보세요.
제출 후 모델 답 보기
첫 오류는 opcode와 register만 보고 funct7를 확인하지 않은 것입니다. funct7 `0100000`은 sub이므로 해당 instruction은 `sub t0,a6,t2`이며, add에는 funct7 `0000000`이 필요합니다.
이 소문제를 끝냈다고 말할 수 있는 기준
이 소문제의 정확한 공식 페이지와 대조하기
왼쪽은 문제를 읽을 때, 오른쪽은 자신의 풀이를 끝낸 뒤에 확인하세요. 해설 이미지를 먼저 보면 중간 과정을 스스로 만드는 연습이 사라집니다.
Source: Probeklausur.pdf / Probeklausur Musterlösung und Hinweise.pdf · 시험 p6 · 공식 해설 p7 · SoSe26 Probeklausur 시험 p6 Aufgabe 2의 `add t0,a6,t2` 후보와 공식 해설 p7의 `0x007802B3` pairing.

