왜 이 소문제를 따로 배우는가
pseudo instruction을 실제 ISA field로 낮추는 가장 작은 예입니다. 이 한 카드를 확실히 풀면 mnemonic 암기가 아니라 expansion→field→hex라는 encoding 절차를 재사용할 수 있습니다.
이 페이지는 Aufgabe 2의 공통 템플릿이 아니라 2-1 `nop` ↔ `0x00000013`에 필요한 내용만 담습니다. 챕터 전체 배경이 필요하면 Aufgabe 2 개념 수업을 먼저 읽으세요.
이 소문제에서 실제로 쓰는 용어
정의뿐 아니라 이 문제의 어느 판단에 쓰이는지까지 연결합니다.
- nop
- architectural state를 바꾸지 않는 pseudo instruction 표기입니다.이 소문제에서: 독립 opcode를 찾지 않고 canonical `addi x0,x0,0`으로 확장합니다.
- addi
- register 값과 sign-extended immediate를 더해 rd에 쓰는 I-type instruction입니다.이 소문제에서: `nop`의 실제 opcode `0010011`을 제공합니다.
- x0
- 읽으면 0이고 write 결과가 버려지는 RISC-V zero register입니다.이 소문제에서: rd와 rs1이 모두 x0일 때 결과가 state를 바꾸지 않는 이유입니다.
- canonical encoding
- 같은 효과를 내는 여러 instruction 중 assembler가 표준적으로 사용하는 bit pattern입니다.이 소문제에서: `nop`의 정답을 정확히 `0x00000013`으로 고릅니다.
이 소문제 전용 규칙과 종이 작업
pseudo 먼저 확장
`nop` 자체의 bit layout을 찾지 말고 실제 base instruction의 format을 사용합니다.
종이에: 첫 줄에 `nop ⇒ addi x0,x0,0`을 씁니다.
I-type field 조립
`addi`는 `imm[11:0] | rs1 | funct3=000 | rd | opcode=0010011` 순으로 배치됩니다.
종이에: 32 bit를 12|5|3|5|7 칸으로 나눠 각 값을 채웁니다.
Aufgabe 전체 흐름은 챕터 흐름도에서 확인할 수 있습니다. 여기서는 현재 판단에 직접 필요한 규칙만 적용합니다.
이 소문제 전용 작은 예제
`addi x1,x0,0`을 hex로 encoding하세요.
주어진 것
- opcode는 `0010011`, funct3는 `000`입니다.
- x1은 register 번호 1입니다.
- I-type의 imm과 rs1 field를 채웁니다.
즉시값과 source가 모두 0이므로 상위 20 bit가 0입니다.
종이 산출물: `imm=000000000000, rs1=00000`
- rd=x1과 고정 funct3/opcode를 배치합니다.
rd field의 bit 7 하나만 추가로 1이 됩니다.
종이 산출물: `000000000000 00000 000 00001 0010011`
- 4-bit nibble로 묶어 hex로 바꿉니다.
32-bit binary를 8자리 hex로 정확히 확인할 수 있습니다.
종이 산출물: `0000 0000 0000 0000 0000 0000 1001 0011 = 0x00000093`
예제 답과 독립 검산 보기
`addi x1,x0,0`의 encoding은 `0x00000093`입니다.
독립 검산: rd를 x1에서 x0으로 바꾸면 bit 7이 사라져 `0x00000013`이 되는지 확인합니다.
이 instruction의 field를 실제로 채우기
아래 표는 이 소문제만의 값입니다. 일반 format 표와 섞지 말고 각 행을 bit열에서 직접 가리켜 보세요.
| format | I-type addi |
|---|---|
| opcode | 0010011 |
| rd | x0 = 00000 |
| funct3 | 000 |
| rs1 | x0 = 00000 |
| imm | 0 = 000000000000 |
이제 실제 시험 문제를 micro-work로 풀기
공식 시험이 요구하는 것
`nop`의 실제 encoding을 찾으세요.
공식 답을 보기 전, 내 답 먼저 남기기
완성 문장이 아니어도 좋습니다. 중간값·register·cycle·cache state처럼 채점 가능한 흔적을 먼저 적으세요.
각 작업의 중간 산출물을 직접 적고 완료 조건을 만족한 뒤 체크하세요. 단계별 이유·산출물·오류가 현재 소문제에 맞게 따로 작성되어 있습니다.
`nop` pseudo를 `addi x0,x0,0`으로 펼칩니다.
- 왜 하는가
- 실제 encoding은 base instruction인 `addi`의 I-type layout을 따릅니다.
- 종이 산출물
- `nop = addi x0,x0,0`
- 완료 조건
- mnemonic, rd, rs1, immediate 네 항목이 모두 드러났습니다.
막혔을 때 단계 힌트·대표 오류
힌트: 0에 0을 더해 zero register에 다시 쓰는 형태입니다.
이 단계의 대표 오류: `nop` 전용 opcode를 찾거나 `add x0,x0,x0`만 정답으로 고정하는 것입니다.
I-type의 imm, rs1, funct3, rd를 모두 0으로 둡니다.
- 왜 하는가
- `addi x0,x0,0`의 operand field는 모두 zero이며 opcode만 고정된 nonzero field입니다.
- 종이 산출물
- `000000000000 | 00000 | 000 | 00000 | 0010011`을 적습니다.
- 완료 조건
- 32 bit field 합이 12+5+3+5+7로 맞습니다.
막혔을 때 단계 힌트·대표 오류
힌트: x0의 register 번호는 binary `00000`입니다.
이 단계의 대표 오류: immediate 0을 생략해 bit 위치를 왼쪽으로 밀어 쓰는 것입니다.
하위 opcode `0x13`과 전체 hex를 확인합니다.
- 왜 하는가
- 모든 operand field가 0이므로 최종 값에는 I-type ALU opcode만 남습니다.
- 종이 산출물
- `binary → 0x00000013`을 씁니다.
- 완료 조건
- 8자리 hex와 공식 pairing이 정확히 일치합니다.
막혔을 때 단계 힌트·대표 오류
힌트: 마지막 byte `00010011`은 hex `13`입니다.
이 단계의 대표 오류: opcode bit를 왼쪽 끝에 놓아 `0x13000000`으로 만드는 것입니다.
공식 답을 열기 전 마지막 회상
`addi x0,x0,1`도 nop인가요? 결과 write는 버려지지만 canonical encoding과의 차이를 말해 보세요.
내 풀이 후 공식 결론·이유·대표 함정 확인
공식 결론
`nop` ↔ `0x00000013`.
왜 이 답이 되는가
`nop`은 `addi x0,x0,0`입니다. opcode 0010011, rd=0, funct3=000, rs1=0, imm=0이 모두 0이고 opcode만 남습니다.
대표 함정
`nop`을 별도 hardware instruction이라고 생각하지 마세요.
명령어와 식을 줄 단위로 읽기
본문 속 code를 한 줄씩 분리했습니다. 각 줄에서 source, operation, destination을 표시하세요.
nop
addi x0,x0,0
0x00000013새 문제로 전이하기
세 문항은 앞 문장의 반복이 아닙니다. 직접 답을 입력하면 rubric의 필수 기준을 하나씩 검사하고, 첫 누락 기준을 알려 줍니다.
1. 개념 재구성
`nop`이 별도 hardware opcode 없이 동작하는 이유를 expansion, x0 read, x0 write의 세 단계로 설명하세요.
계산 결과가 어디에 기록되는지 보세요.
제출 후 모델 답 보기
`nop`은 `addi x0,x0,0`으로 expansion됩니다. x0 read 값은 0이고, 계산 결과를 x0에 write하면 버려지므로 architectural state가 바뀌지 않아 별도 opcode가 필요 없습니다.
2. 변형 문제
`addi x0,x0,1`을 encoding하고 canonical `nop`과 bit/효과 차이를 설명하세요.
I-type imm[11:0]에 1을 넣고 destination을 확인하세요.
제출 후 모델 답 보기
encoding은 `0x00100013`입니다. canonical `nop`인 `0x00000013`과 immediate bit가 다르지만 결과를 x0에 써서 architectural register state는 역시 바뀌지 않습니다.
3. 오류 진단
학생이 `nop`을 `addi x1,x0,0 = 0x00000093`으로 encoding했습니다. 첫 field 오류와 state 차이를 바로잡으세요.
destination이 x0인지 x1인지 비교하세요.
제출 후 모델 답 보기
첫 오류는 rd를 x1로 둔 것입니다. canonical `nop`은 rd=x0인 `addi x0,x0,0`, encoding `0x00000013`입니다. x1에 쓰면 x1이 0으로 바뀔 수 있어 no-operation이 아닙니다.
이 소문제를 끝냈다고 말할 수 있는 기준
이 소문제의 정확한 공식 페이지와 대조하기
왼쪽은 문제를 읽을 때, 오른쪽은 자신의 풀이를 끝낸 뒤에 확인하세요. 해설 이미지를 먼저 보면 중간 과정을 스스로 만드는 연습이 사라집니다.
Source: Probeklausur.pdf / Probeklausur Musterlösung und Hinweise.pdf · 시험 p6 · 공식 해설 p7 · SoSe26 Probeklausur 시험 p6 Aufgabe 2의 `nop` 후보와 공식 해설 p7의 `nop ↔ 0x00000013` pairing.

