UNIT-SPECIFIC ACTIVE LESSON · 2-1

`nop` ↔ `0x00000013`

`nop`의 실제 encoding을 찾으세요.

학습 목표: `nop`을 `addi x0,x0,0`으로 확장해 I-type field와 canonical hex encoding을 확인한다.
공식 근거 범위: SoSe26 Probeklausur 시험 p6 Aufgabe 2의 `nop` 후보와 공식 해설 p7의 `nop ↔ 0x00000013` pairing.

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

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입니다.
  1. I-type의 imm과 rs1 field를 채웁니다.

    즉시값과 source가 모두 0이므로 상위 20 bit가 0입니다.

    종이 산출물: `imm=000000000000, rs1=00000`

  2. rd=x1과 고정 funct3/opcode를 배치합니다.

    rd field의 bit 7 하나만 추가로 1이 됩니다.

    종이 산출물: `000000000000 00000 000 00001 0010011`

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

formatI-type addi
opcode0010011
rdx0 = 00000
funct3000
rs1x0 = 00000
imm0 = 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/효과 차이를 설명하세요.

제출 후 모델 답 보기

encoding은 `0x00100013`입니다. canonical `nop`인 `0x00000013`과 immediate bit가 다르지만 결과를 x0에 써서 architectural register state는 역시 바뀌지 않습니다.

3. 오류 진단

학생이 `nop`을 `addi x1,x0,0 = 0x00000093`으로 encoding했습니다. 첫 field 오류와 state 차이를 바로잡으세요.

제출 후 모델 답 보기

첫 오류는 rd를 x1로 둔 것입니다. canonical `nop`은 rd=x0인 `addi x0,x0,0`, encoding `0x00000013`입니다. x1에 쓰면 x1이 0으로 바뀔 수 있어 no-operation이 아닙니다.

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

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

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

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

Source: Probeklausur.pdf / Probeklausur Musterlösung und Hinweise.pdf · 시험 p6 · 공식 해설 p7 · SoSe26 Probeklausur 시험 p6 Aufgabe 2의 `nop` 후보와 공식 해설 p7의 `nop ↔ 0x00000013` pairing.