ISA와 어셈블리
RISC-V 명령어 'jal ra, func'의 동작으로 올바른 것은?
- A다음 명령어의 주소를 ra에 저장한 뒤 func로 점프한다
- Bfunc의 주소를 ra에 넣기만 하고 점프는 하지 않는다
- Cra에 들어 있는 주소로 복귀한다
정답과 해설 보기
정답: A. 다음 명령어의 주소를 ra에 저장한 뒤 func로 점프한다
jal(jump and link)은 자신의 다음 명령어의 주소(PC+4)를 지정한 레지스터에 쓰고(링크) 목적지로 점프합니다. 호출 규약에서는 복귀 주소를 ra(x1)에 넣으므로, 함수 호출은 'jal ra, func'이며 의사 명령어로는 'call func'라고 씁니다. 호출된 함수는 처리 마지막에 ra의 주소로 복귀합니다. 쓰기 대상을 x0으로 하면 단순한 점프가 됩니다.