UNIT-SPECIFIC ACTIVE LESSON · 2-5

`add t0,a6,t2` 매칭

R-type add의 세 register를 확인하세요.

학습 목표: R-type opcode, funct3, funct7와 rd·rs1·rs2 field를 읽어 `add t0,a6,t2` encoding을 식별한다.
공식 근거 범위: SoSe26 Probeklausur 시험 p6 Aufgabe 2의 `add t0,a6,t2` 후보와 공식 해설 p7의 `0x007802B3` pairing.

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

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`입니다.
  1. 세 operand를 rd, rs1, rs2에 배치합니다.

    Assembly 순서가 R-type register field 역할을 결정합니다.

    종이 산출물: `rd=x10, rs1=x11, rs2=x12`

  2. sub의 funct7과 공통 funct3/opcode를 배치합니다.

    add와 다른 핵심 bit는 funct7입니다.

    종이 산출물: `0100000 01100 01011 000 01010 0110011`

  3. bit열을 hex로 변환합니다.

    32-bit 후보와 정확히 비교할 수 있습니다.

    종이 산출물: `0x40C58533`

예제 답과 독립 검산 보기

`sub a0,a1,a2`의 encoding은 `0x40C58533`입니다.

독립 검산: funct7만 `0000000`으로 바꾸면 같은 register의 add encoding이 되는지 확인합니다.

이 instruction의 field를 실제로 채우기

아래 표는 이 소문제만의 값입니다. 일반 format 표와 섞지 말고 각 행을 bit열에서 직접 가리켜 보세요.

formatR-type add
opcode0110011
rdt0=x5
funct3000
rs1a6=x16
rs2t2=x7
funct70000000

이제 실제 시험 문제를 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 조합을 설명하세요.

제출 후 모델 답 보기

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

제출 후 모델 답 보기

`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을 쓰세요.

제출 후 모델 답 보기

첫 오류는 opcode와 register만 보고 funct7를 확인하지 않은 것입니다. funct7 `0100000`은 sub이므로 해당 instruction은 `sub t0,a6,t2`이며, add에는 funct7 `0000000`이 필요합니다.

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

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

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

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

Source: Probeklausur.pdf / Probeklausur Musterlösung und Hinweise.pdf · 시험 p6 · 공식 해설 p7 · SoSe26 Probeklausur 시험 p6 Aufgabe 2의 `add t0,a6,t2` 후보와 공식 해설 p7의 `0x007802B3` pairing.