왜 이 소문제를 따로 배우는가
음수 branch는 loop의 back edge에서 매우 흔합니다. Hex 전체를 큰 unsigned 수로 보는 습관을 버리고 immediate 자체의 bit width에서 sign을 해석해야 올바른 target과 encoding을 얻습니다.
이 페이지는 Aufgabe 2의 공통 템플릿이 아니라 2-7 `bne t0,t1,-16` 매칭에 필요한 내용만 담습니다. 챕터 전체 배경이 필요하면 Aufgabe 2 개념 수업을 먼저 읽으세요.
이 소문제에서 실제로 쓰는 용어
정의뿐 아니라 이 문제의 어느 판단에 쓰이는지까지 연결합니다.
- bne
- 두 source register가 같지 않을 때 PC-relative target으로 branch하는 B-type instruction입니다.이 소문제에서: branch opcode `1100011`과 funct3 `001`을 함께 확인합니다.
- negative offset
- 현재 PC보다 앞쪽 주소를 가리키는 signed 상대 이동량입니다.이 소문제에서: loop back edge인 -16을 13-bit Zweierkomplement로 읽습니다.
- sign extension
- signed 값을 더 넓힐 때 최상위 sign bit를 복제해 수치를 유지하는 과정입니다.이 소문제에서: 재조립한 B-immediate의 imm[12]=1을 음수로 해석합니다.
- back edge
- control-flow graph에서 이전 instruction 주소의 loop 시작점으로 되돌아가는 branch입니다.이 소문제에서: 왜 negative branch offset이 loop에 자주 나타나는지 설명합니다.
이 소문제 전용 규칙과 종이 작업
immediate 폭에서 sign 판정
32-bit hex 전체의 부호가 아니라 재조립된 13-bit B-immediate의 imm[12]을 sign bit로 봅니다.
종이에: 조립한 13 bit 위에 `sign=imm[12]`를 표시합니다.
Zweierkomplement 역산 규칙
13-bit 값의 sign이 1이면 unsigned 값에서 `2^13`을 빼 signed offset을 얻습니다.
종이에: `signed = raw - 8192` 계산을 남깁니다.
target 방향 검산
negative offset이면 target은 현재 PC보다 작아야 하므로 수치와 control-flow 방향을 함께 확인합니다.
종이에: `target=PC-16 < PC`를 써서 sign 결과를 검산합니다.
Aufgabe 전체 흐름은 챕터 흐름도에서 확인할 수 있습니다. 여기서는 현재 판단에 직접 필요한 규칙만 적용합니다.
이 소문제 전용 작은 예제
B-immediate 조각을 재조립한 13-bit 값이 `1111111111000₂`이다. signed offset과 PC=`0x1040`에서의 target을 구하세요.
주어진 것
- B-immediate는 implicit bit 0을 포함한 13-bit signed 값입니다.
- 최상위 bit는 1입니다.
- 13-bit raw 값을 unsigned로 확인합니다.
Zweierkomplement 역산에 사용할 bit 폭과 원시값을 고정합니다.
종이 산출물: `1111111111000₂ = 8184`
- sign bit 1이므로 `2^13`을 뺍니다.
13-bit Zweierkomplement의 signed 수치를 복원하는 정확한 방법입니다.
종이 산출물: `8184-8192=-8`
- 현재 PC에 offset을 더합니다.
branch immediate는 절대 주소가 아니라 PC-relative 값입니다.
종이 산출물: `target=0x1040-8=0x1038`
예제 답과 독립 검산 보기
signed offset은 -8이고 target은 `0x1038`입니다.
독립 검산: target이 현재 PC `0x1040`보다 8 Byte 앞인지 확인합니다.
이 instruction의 field를 실제로 채우기
아래 표는 이 소문제만의 값입니다. 일반 format 표와 섞지 말고 각 행을 bit열에서 직접 가리켜 보세요.
| format | B-type bne |
|---|---|
| opcode | 1100011 |
| funct3 | 001 |
| rs1 | t0=x5 |
| rs2 | t1=x6 |
| imm | −16, sign-extension 필요 |
이제 실제 시험 문제를 micro-work로 풀기
공식 시험이 요구하는 것
negative branch offset을 복원하세요.
공식 답을 보기 전, 내 답 먼저 남기기
완성 문장이 아니어도 좋습니다. 중간값·register·cycle·cache state처럼 채점 가능한 흔적을 먼저 적으세요.
각 작업의 중간 산출물을 직접 적고 완료 조건을 만족한 뒤 체크하세요. 단계별 이유·산출물·오류가 현재 소문제에 맞게 따로 작성되어 있습니다.
오른쪽 opcode `1100011`을 찾아 B-type branch로 분류합니다.
- 왜 하는가
- 분산 immediate와 register field를 B-type layout으로 읽기 위한 전제입니다.
- 종이 산출물
- `bits[6:0]=1100011 → B-type`
- 완료 조건
- 후보 encoding이 branch family로 표시되어 있습니다.
막혔을 때 단계 힌트·대표 오류
힌트: hex의 하위 7 bit는 `0x63`입니다.
이 단계의 대표 오류: 최상위 12 bit를 연속 I-immediate처럼 읽는 것입니다.
funct3 `001`로 bne를 확인합니다.
- 왜 하는가
- 같은 branch opcode에서 beq와 bne의 조건을 구분합니다.
- 종이 산출물
- `funct3=001 → bne`
- 완료 조건
- beq의 `000`과 비교해 bne가 확정되었습니다.
막혔을 때 단계 힌트·대표 오류
힌트: bits[14:12] 세 bit를 읽으세요.
이 단계의 대표 오류: register나 offset이 맞다는 이유만으로 beq/bne 조건을 확인하지 않는 것입니다.
rs1=t0(x5), rs2=t1(x6)을 확인합니다.
- 왜 하는가
- 공식 후보의 비교 operand가 encoding field와 같은지 검증합니다.
- 종이 산출물
- `rs1=00101=t0`, `rs2=00110=t1`을 적습니다.
- 완료 조건
- 두 ABI 이름과 두 5-bit field가 정확히 연결되어 있습니다.
막혔을 때 단계 힌트·대표 오류
힌트: `bne t0,t1,-16`에서 첫 register가 rs1입니다.
이 단계의 대표 오류: t0/t1을 rd가 있는 것처럼 읽거나 x번호를 0/1로 오해하는 것입니다.
B-immediate 조각을 합친 뒤 13-bit에서 sign-extend해 -16을 얻습니다.
- 왜 하는가
- 최상위 sign bit가 1인 값을 unsigned 큰 양수로 읽으면 branch 방향과 target이 완전히 달라집니다.
- 종이 산출물
- `raw=0x1FF0=8176; 8176-8192=-16; target=PC-16`을 적습니다.
- 완료 조건
- bit width 13, sign 계산, decimal -16, backward target이 모두 표시되어 있습니다.
막혔을 때 단계 힌트·대표 오류
힌트: 재조립한 값에서 `2^13`을 빼세요.
이 단계의 대표 오류: 32-bit hex 전체를 sign-extend하거나 raw 8176을 positive offset으로 사용하는 것입니다.
공식 답을 열기 전 마지막 회상
음수 branch offset이 loop에서 자주 나오는 이유는 무엇인가요?
내 풀이 후 공식 결론·이유·대표 함정 확인
공식 결론
`bne t0,t1,-16` ↔ `0xFE6298E3`.
왜 이 답이 되는가
bne는 funct3=001이고 offset -16은 2의 보수 signed immediate입니다.
대표 함정
Hex를 unsigned 큰 양수로만 읽지 말고 immediate bit width에서 sign-extend하세요.
명령어와 식을 줄 단위로 읽기
본문 속 code를 한 줄씩 분리했습니다. 각 줄에서 source, operation, destination을 표시하세요.
bne t0,t1,-16
0xFE6298E3새 문제로 전이하기
세 문항은 앞 문장의 반복이 아닙니다. 직접 답을 입력하면 rubric의 필수 기준을 하나씩 검사하고, 첫 누락 기준을 알려 줍니다.
1. 개념 재구성
B-immediate의 sign을 어느 bit width에서 판정하는지와 음수 raw 값을 decimal로 바꾸는 식을 복원하세요.
implicit bit 0까지 포함하면 몇 bit인지 세세요.
제출 후 모델 답 보기
B-immediate는 implicit `imm[0]=0`까지 포함한 13-bit signed 값이고 sign bit는 `imm[12]`입니다. sign이 1이면 `signed offset = raw value - 2^13`, 즉 raw에서 8192를 뺍니다.
2. 변형 문제
PC=`0x1080`에서 `bne x5,x6,-8`을 실행한다. B-type hex encoding과 taken target을 구하세요.
-8의 13-bit immediate를 분산 배치하고 funct3=001을 사용하세요.
제출 후 모델 답 보기
`bne x5,x6,-8`의 encoding은 `0xFE629CE3`이고, branch가 taken이면 target은 `0x1080-8=0x1078`입니다.
3. 오류 진단
학생이 `0xFE6298E3`에서 immediate raw `0x1FF0`을 얻고 이를 +8176으로 해석했습니다. 첫 해석 오류와 올바른 target 방향을 설명하세요.
raw 값의 최상위 13번째 bit를 보세요.
제출 후 모델 답 보기
첫 오류는 13-bit immediate의 sign bit `imm[12]=1`을 무시한 것입니다. `0x1FF0-0x2000=-16`이므로 offset은 -16이고 target은 현재 PC보다 16 Byte 앞쪽입니다.
이 소문제를 끝냈다고 말할 수 있는 기준
이 소문제의 정확한 공식 페이지와 대조하기
왼쪽은 문제를 읽을 때, 오른쪽은 자신의 풀이를 끝낸 뒤에 확인하세요. 해설 이미지를 먼저 보면 중간 과정을 스스로 만드는 연습이 사라집니다.
Source: Probeklausur.pdf / Probeklausur Musterlösung und Hinweise.pdf · 시험 p6 · 공식 해설 p7 · SoSe26 Probeklausur 시험 p6 Aufgabe 2의 `bne t0,t1,-16` 후보와 공식 해설 p7의 `0xFE6298E3` pairing.

