ISA와 어셈블리
RISC-V의 의사 명령어 'ret'은 실제로 어떤 명령어로 실행되는가?
- Ajal ra, 0
- Bjalr x0, 0(ra)
- Clw ra, 0(sp)
정답과 해설 보기
정답: B. jalr x0, 0(ra)
jalr(jump and link register)은 레지스터의 값에 오프셋을 더한 주소로 점프하고, 다음 명령어의 주소를 쓰기 대상에 넣습니다. ret은 'jalr x0, 0(ra)'이며, ra의 주소로 점프하고 링크는 x0에 버립니다. jalr은 함수 포인터나 가상 함수 호출처럼 목적지가 실행 시에 정해지는 점프에도 사용됩니다. ra를 복원하는 'lw ra, …'는 ret 전에 하는 준비입니다.