왜 이 소문제를 따로 배우는가
두 shift mnemonic은 결과식이 비슷하지만 shift amount의 출처와 format이 다릅니다. register source를 쓰는지 instruction immediate를 쓰는지 구분하면 encoding과 실행 trace를 동시에 해결할 수 있습니다.
이 페이지는 Aufgabe 2의 공통 템플릿이 아니라 2-8 `sll a2,a4,a5` 매칭에 필요한 내용만 담습니다. 챕터 전체 배경이 필요하면 Aufgabe 2 개념 수업을 먼저 읽으세요.
이 소문제에서 실제로 쓰는 용어
정의뿐 아니라 이 문제의 어느 판단에 쓰이는지까지 연결합니다.
- sll
- rs1 값을 rs2가 지정한 만큼 논리적으로 왼쪽 shift해 rd에 쓰는 R-type instruction입니다.이 소문제에서: R-type opcode `0110011`, funct3 `001`, funct7 `0000000`을 확인합니다.
- shift amount
- 값을 몇 bit 이동할지 정하는 수치입니다.이 소문제에서: RV32 `sll`에서는 rs2 값의 하위 5 bit에서 옵니다.
- slli
- shift amount가 instruction immediate field에 들어 있는 I-type shift instruction입니다.이 소문제에서: `sll` 후보를 I-type opcode와 혼동하지 않게 비교합니다.
- logical left shift
- bit를 왼쪽으로 이동하고 오른쪽 빈자리를 0으로 채우는 연산입니다.이 소문제에서: overflow를 제외하면 `2^shamt` 곱셈과 같은 실행 의미를 설명합니다.
이 소문제 전용 규칙과 종이 작업
shift source 규칙
`sll`은 세 번째 register rs2가 shift amount를 제공하고 `slli`는 instruction의 immediate가 제공합니다.
종이에: 세 번째 operand 아래에 `register` 또는 `immediate`라고 표시합니다.
R-type 기능 조합
`sll`은 opcode `0110011`, funct3 `001`, funct7 `0000000`의 결합으로 결정됩니다.
종이에: 세 고정 field를 모두 체크한 뒤 register를 읽습니다.
RV32 하위 5 bit 규칙
RV32 register shift는 rs2 전체 값이 아니라 하위 5 bit를 사용해 0…31 범위의 shamt를 얻습니다.
종이에: 실행 trace에서는 `shamt = rs2 & 0x1F`를 씁니다.
Aufgabe 전체 흐름은 챕터 흐름도에서 확인할 수 있습니다. 여기서는 현재 판단에 직접 필요한 규칙만 적용합니다.
이 소문제 전용 작은 예제
`sll t0,t1,t2`를 hex로 encoding하세요.
주어진 것
- t0=x5, t1=x6, t2=x7입니다.
- sll의 funct7=`0000000`, funct3=`001`, opcode=`0110011`입니다.
- 세 register를 field 역할에 배치합니다.
첫 operand가 rd이고 shift할 값과 amount source가 뒤에 옵니다.
종이 산출물: `rd=x5, rs1=x6, rs2=x7`
- sll의 세 기능 field를 조립합니다.
같은 R-type의 add 등과 shift operation을 구분합니다.
종이 산출물: `0000000 00111 00110 001 00101 0110011`
- 8자리 hex로 변환합니다.
binary 후보와 hex 표기를 양방향 검산합니다.
종이 산출물: `0x007312B3`
예제 답과 독립 검산 보기
`sll t0,t1,t2`의 encoding은 `0x007312B3`입니다.
독립 검산: bits[14:12]가 `001`, bits[24:20]이 x7인지 다시 decode합니다.
이 instruction의 field를 실제로 채우기
아래 표는 이 소문제만의 값입니다. 일반 format 표와 섞지 말고 각 행을 bit열에서 직접 가리켜 보세요.
| format | R-type sll |
|---|---|
| opcode | 0110011 |
| rd | a2=x12 |
| funct3 | 001 |
| rs1 | a4=x14 |
| rs2 | a5=x15 |
| funct7 | 0000000 |
이제 실제 시험 문제를 micro-work로 풀기
공식 시험이 요구하는 것
shift amount가 register에서 오는 R-type을 찾으세요.
공식 답을 보기 전, 내 답 먼저 남기기
완성 문장이 아니어도 좋습니다. 중간값·register·cycle·cache state처럼 채점 가능한 흔적을 먼저 적으세요.
각 작업의 중간 산출물을 직접 적고 완료 조건을 만족한 뒤 체크하세요. 단계별 이유·산출물·오류가 현재 소문제에 맞게 따로 작성되어 있습니다.
R-type opcode `0110011`을 찾아 register shift 후보로 분류합니다.
- 왜 하는가
- I-type `slli`를 먼저 제외하고 R-type layout을 적용합니다.
- 종이 산출물
- `opcode=0110011 → R-type, slli 아님`을 적습니다.
- 완료 조건
- 후보 bit열이 register-register 연산으로 분류되었습니다.
막혔을 때 단계 힌트·대표 오류
힌트: `slli`는 ALU immediate opcode `0010011`입니다.
이 단계의 대표 오류: shift라는 단어만 보고 sll과 slli를 같은 format으로 읽는 것입니다.
funct3 `001`, funct7 `0000000`으로 sll을 확인합니다.
- 왜 하는가
- R-type family 안에서 logical left shift operation을 정확히 선택합니다.
- 종이 산출물
- `f3=001, f7=0000000 → sll`
- 완료 조건
- opcode 외 두 function field가 모두 일치합니다.
막혔을 때 단계 힌트·대표 오류
힌트: funct3는 bits[14:12], funct7은 bits[31:25]입니다.
이 단계의 대표 오류: funct3만 보고 다른 확장 연산 가능성을 확인하지 않는 것입니다.
rd=a2(x12), rs1=a4(x14), rs2=a5(x15)를 확인합니다.
- 왜 하는가
- shift 결과, shift할 값, shift amount source의 방향이 모두 encoding과 맞아야 합니다.
- 종이 산출물
- `a2←a4 << (a5 & 0x1F)`, `rd=01100, rs1=01110, rs2=01111`을 적습니다.
- 완료 조건
- 세 ABI 이름, x번호, 실행 의미가 일치합니다.
막혔을 때 단계 힌트·대표 오류
힌트: Assembly의 세 번째 operand a5가 immediate 숫자가 아니라 register입니다.
이 단계의 대표 오류: a5 자체를 encoding의 5-bit immediate shamt로 놓아 I-type처럼 해석하는 것입니다.
공식 답을 열기 전 마지막 회상
`sll`과 `slli`의 두 번째 shift operand는 어떻게 다른가요?
내 풀이 후 공식 결론·이유·대표 함정 확인
공식 결론
`sll a2,a4,a5` ↔ `00000000111101110001011000110011`.
왜 이 답이 되는가
`sll`은 rs2의 하위 bit가 정한 만큼 rs1을 왼쪽으로 shift하고 rd에 씁니다.
대표 함정
`slli`는 immediate shift라 I-type입니다. `sll`과 format을 섞지 마세요.
명령어와 식을 줄 단위로 읽기
본문 속 code를 한 줄씩 분리했습니다. 각 줄에서 source, operation, destination을 표시하세요.
sll
sll a2,a4,a5
00000000111101110001011000110011새 문제로 전이하기
세 문항은 앞 문장의 반복이 아닙니다. 직접 답을 입력하면 rubric의 필수 기준을 하나씩 검사하고, 첫 누락 기준을 알려 줍니다.
1. 개념 재구성
`sll`과 `slli`를 format, shift amount 출처, 공통 실행 효과 세 축으로 비교하세요.
세 번째 operand가 register 이름인지 숫자인지 보세요.
제출 후 모델 답 보기
`sll`은 R-type이고 shift amount는 rs2 register의 하위 5 bit에서 옵니다. `slli`는 I-type이고 shift amount는 instruction immediate에 들어 있습니다. 둘 다 rs1을 논리적으로 왼쪽 shift해 rd에 씁니다.
2. 변형 문제
RV32에서 a4=`3`, a5=`34`일 때 `sll a2,a4,a5` 실행 후 a2를 계산하세요.
34 전체가 아니라 하위 5 bit를 shamt로 사용합니다.
제출 후 모델 답 보기
`shamt = 34 & 0x1F = 2`이므로 `a2 = 3 << 2 = 12`입니다.
3. 오류 진단
학생이 `sll a2,a4,a5`를 I-type으로 그리고 a5의 register 번호 15를 immediate shamt=15로 넣었습니다. 첫 format 오류와 올바른 amount source를 쓰세요.
mnemonic 끝에 i가 있는지 확인하세요.
제출 후 모델 답 보기
첫 오류는 `sll`을 I-type으로 본 것입니다. `sll`은 R-type이며 a5는 rs2=x15 field에 들어가고, 실행 시 a5 register 값의 하위 5 bit가 shift amount입니다. immediate format은 `slli`입니다.
이 소문제를 끝냈다고 말할 수 있는 기준
이 소문제의 정확한 공식 페이지와 대조하기
왼쪽은 문제를 읽을 때, 오른쪽은 자신의 풀이를 끝낸 뒤에 확인하세요. 해설 이미지를 먼저 보면 중간 과정을 스스로 만드는 연습이 사라집니다.
Source: Probeklausur.pdf / Probeklausur Musterlösung und Hinweise.pdf · 시험 p6 · 공식 해설 p7 · SoSe26 Probeklausur 시험 p6 Aufgabe 2의 `sll a2,a4,a5` 후보·bit열과 공식 해설 p7의 해당 pairing.

