UNIT-SPECIFIC ACTIVE LESSON · 2-7

`bne t0,t1,-16` 매칭

negative branch offset을 복원하세요.

학습 목표: B-type `bne` bit열에서 register와 분산 immediate를 복원하고 13-bit sign-extension을 적용해 offset -16을 판별한다.
공식 근거 범위: SoSe26 Probeklausur 시험 p6 Aufgabe 2의 `bne t0,t1,-16` 후보와 공식 해설 p7의 `0xFE6298E3` pairing.

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

음수 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입니다.
  1. 13-bit raw 값을 unsigned로 확인합니다.

    Zweierkomplement 역산에 사용할 bit 폭과 원시값을 고정합니다.

    종이 산출물: `1111111111000₂ = 8184`

  2. sign bit 1이므로 `2^13`을 뺍니다.

    13-bit Zweierkomplement의 signed 수치를 복원하는 정확한 방법입니다.

    종이 산출물: `8184-8192=-8`

  3. 현재 PC에 offset을 더합니다.

    branch immediate는 절대 주소가 아니라 PC-relative 값입니다.

    종이 산출물: `target=0x1040-8=0x1038`

예제 답과 독립 검산 보기

signed offset은 -8이고 target은 `0x1038`입니다.

독립 검산: target이 현재 PC `0x1040`보다 8 Byte 앞인지 확인합니다.

이 instruction의 field를 실제로 채우기

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

formatB-type bne
opcode1100011
funct3001
rs1t0=x5
rs2t1=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로 바꾸는 식을 복원하세요.

제출 후 모델 답 보기

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을 구하세요.

제출 후 모델 답 보기

`bne x5,x6,-8`의 encoding은 `0xFE629CE3`이고, branch가 taken이면 target은 `0x1080-8=0x1078`입니다.

3. 오류 진단

학생이 `0xFE6298E3`에서 immediate raw `0x1FF0`을 얻고 이를 +8176으로 해석했습니다. 첫 해석 오류와 올바른 target 방향을 설명하세요.

제출 후 모델 답 보기

첫 오류는 13-bit immediate의 sign bit `imm[12]=1`을 무시한 것입니다. `0x1FF0-0x2000=-16`이므로 offset은 -16이고 target은 현재 PC보다 16 Byte 앞쪽입니다.

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

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

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

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

Source: Probeklausur.pdf / Probeklausur Musterlösung und Hinweise.pdf · 시험 p6 · 공식 해설 p7 · SoSe26 Probeklausur 시험 p6 Aufgabe 2의 `bne t0,t1,-16` 후보와 공식 해설 p7의 `0xFE6298E3` pairing.