UNIT-SPECIFIC ACTIVE LESSON · 2-2

`ret` ↔ `0x00008067`

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

학습 목표: `ret`을 `jalr x0,ra,0`으로 확장하고 jalr I-type의 rd, rs1, immediate field로 encoding을 식별한다.
공식 근거 범위: SoSe26 Probeklausur 시험 p6 Aufgabe 2의 `ret` 후보와 공식 해설 p7의 `ret ↔ 0x00008067` pairing.

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

return은 새 return address를 만들지 않고 기존 ra를 PC로 옮기는 control transfer입니다. rd와 rs1의 방향을 정확히 이해하면 `jalr ra,ra,0`처럼 ra를 덮어쓰는 치명적 혼동을 피합니다.

이 페이지는 Aufgabe 2의 공통 템플릿이 아니라 2-2 `ret` ↔ `0x00008067`에 필요한 내용만 담습니다. 챕터 전체 배경이 필요하면 Aufgabe 2 개념 수업을 먼저 읽으세요.

이 소문제에서 실제로 쓰는 용어

정의뿐 아니라 이 문제의 어느 판단에 쓰이는지까지 연결합니다.

ret
caller가 ra에 남긴 return address로 돌아가는 pseudo instruction입니다.이 소문제에서: `jalr x0,ra,0`으로 확장해 실제 encoding을 찾습니다.
jalr
`rs1+immediate`에서 target을 만들고 현재 `PC+4`를 rd에 쓰는 indirect jump instruction입니다.이 소문제에서: rs1=ra가 target source이고 rd=x0가 link 폐기임을 확인합니다.
ra
ABI 이름으로 x1이며 함수 호출 뒤 돌아갈 주소를 보관합니다.이 소문제에서: `ret` encoding의 rs1 field를 `00001`로 정합니다.
link address
jump 이후 돌아오기 위해 rd에 기록하는 현재 `PC+4` 값입니다.이 소문제에서: return에서는 새 link가 필요 없어 rd=x0로 버리는 이유를 설명합니다.

이 소문제 전용 규칙과 종이 작업

target과 link 분리

jalr의 rs1은 jump target 계산에 쓰이고 rd는 새 link address를 받습니다. 두 field의 역할은 반대가 아닙니다.

종이에: `target=rs1+imm`, `rd←PC+4`를 두 줄로 적습니다.

return expansion 규칙

return target은 ra+0이고 새 link는 필요 없으므로 `rs1=ra`, `imm=0`, `rd=x0`입니다.

종이에: `ret ⇒ jalr x0,ra,0`을 쓰고 각 operand 아래 역할을 표시합니다.

Aufgabe 전체 흐름은 챕터 흐름도에서 확인할 수 있습니다. 여기서는 현재 판단에 직접 필요한 규칙만 적용합니다.

이 소문제 전용 작은 예제

`jalr x0,t0,0`을 encoding하세요. t0는 x5입니다.

주어진 것

  • jalr opcode는 `1100111`, funct3는 `000`입니다.
  • I-type field 순서는 imm|rs1|funct3|rd|opcode입니다.
  1. operand를 field 번호로 바꿉니다.

    t0라는 ABI 이름을 5-bit rs1 값으로 변환해야 합니다.

    종이 산출물: `imm=0, rs1=x5=00101, rd=x0=00000`

  2. I-type bit열을 조립합니다.

    jalr의 target source와 link destination 위치를 정확히 반영합니다.

    종이 산출물: `000000000000 00101 000 00000 1100111`

  3. hex로 변환합니다.

    후보 encoding과 빠르게 비교할 수 있습니다.

    종이 산출물: `0x00028067`

예제 답과 독립 검산 보기

`jalr x0,t0,0`의 encoding은 `0x00028067`입니다.

독립 검산: rs1 field `00101`가 bits[19:15]에 있어 값에 `5<<15`가 포함되는지 확인합니다.

이 instruction의 field를 실제로 채우기

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

formatI-type jalr
opcode1100111
rdx0 = 00000
funct3000
rs1ra=x1 = 00001
imm0

이제 실제 시험 문제를 micro-work로 풀기

공식 시험이 요구하는 것

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

공식 답을 보기 전, 내 답 먼저 남기기

완성 문장이 아니어도 좋습니다. 중간값·register·cycle·cache state처럼 채점 가능한 흔적을 먼저 적으세요.

각 작업의 중간 산출물을 직접 적고 완료 조건을 만족한 뒤 체크하세요. 단계별 이유·산출물·오류가 현재 소문제에 맞게 따로 작성되어 있습니다.

`ret` pseudo를 `jalr x0,ra,0`으로 펼칩니다.

왜 하는가
실제 opcode와 field는 jalr base instruction에서만 결정할 수 있습니다.
종이 산출물
`ret = jalr x0,ra,0`
완료 조건
rd=x0, rs1=ra, imm=0이 명시되어 있습니다.
막혔을 때 단계 힌트·대표 오류

힌트: 기존 return address를 읽되 새 return address는 저장하지 않습니다.

이 단계의 대표 오류: `jalr ra,x0,0`처럼 source와 destination을 바꾸는 것입니다.

jalr opcode `1100111`과 funct3 `000`을 확인합니다.

왜 하는가
다른 I-type ALU나 load encoding과 indirect jump를 구분하는 고정 field입니다.
종이 산출물
오른쪽 7 bit에 `1100111`, 그 앞 funct3에 `000`을 표시합니다.
완료 조건
후보 bit열이 jalr family임을 opcode로 검증했습니다.
막혔을 때 단계 힌트·대표 오류

힌트: hex의 하위 byte가 `0x67`로 끝나는지 보세요.

이 단계의 대표 오류: `jal`의 opcode `1101111`과 `jalr`의 `1100111`을 섞는 것입니다.

rs1=ra(x1), rd=x0, imm=0을 확인해 전체 hex를 확정합니다.

왜 하는가
jalr 후보 중에서도 return target source와 link 폐기 조건이 모두 맞아야 `ret`입니다.
종이 산출물
`imm=0 | rs1=00001 | f3=000 | rd=00000 | op=1100111 → 0x00008067`
완료 조건
공식 encoding과 세 operand field가 모두 일치합니다.
막혔을 때 단계 힌트·대표 오류

힌트: x1은 bits[19:15]에 놓이므로 `1<<15 = 0x8000`입니다.

이 단계의 대표 오류: rd를 ra로 두어 jump 순간 ra를 새 PC+4로 덮어쓰는 것입니다.

공식 답을 열기 전 마지막 회상

`ret` 실행 시 PC는 어디에서 오나요?

내 풀이 후 공식 결론·이유·대표 함정 확인

공식 결론

`ret` ↔ `0x00008067`.

왜 이 답이 되는가

`ret`은 `jalr x0,ra,0`입니다. return address를 새 rd에 보관할 필요가 없어 rd=x0이고 target은 ra+0입니다.

대표 함정

`jalr ra,ra,0`은 ra를 덮어써 return 동작을 망칠 수 있습니다.

명령어와 식을 줄 단위로 읽기

본문 속 code를 한 줄씩 분리했습니다. 각 줄에서 source, operation, destination을 표시하세요.

ret
jalr x0,ra,0
0x00008067

새 문제로 전이하기

세 문항은 앞 문장의 반복이 아닙니다. 직접 답을 입력하면 rubric의 필수 기준을 하나씩 검사하고, 첫 누락 기준을 알려 줍니다.

1. 개념 재구성

jalr의 두 결과 `target PC`와 `link address`를 식으로 복원한 뒤 왜 `ret`에서 rs1=ra, rd=x0인지 설명하세요.

제출 후 모델 답 보기

jalr는 `target PC=rs1+immediate`로 jump하고 `rd=PC+4`로 link address를 씁니다. `ret`은 ra에 든 target을 읽어야 하므로 rs1=ra이고 새 link가 필요 없으므로 rd=x0입니다.

2. 변형 문제

`jalr x0,sp,4`의 target 계산식과 encoding을 구하세요. sp는 x2입니다.

제출 후 모델 답 보기

target 계산식은 `PC ← sp+4`이고 link는 x0에 버립니다. encoding은 `0x00410067`입니다.

3. 오류 진단

학생이 `ret = jalr ra,ra,0`이라고 썼습니다. 첫 operand 오류와 함수 반환에 미치는 영향을 설명하세요.

제출 후 모델 답 보기

첫 오류는 rd를 ra로 둔 것입니다. `jalr ra,ra,0`은 jump와 동시에 ra에 현재 `PC+4` link address를 써서 기존 return address를 덮습니다. 올바른 `ret`은 `jalr x0,ra,0`입니다.

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

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

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

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

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