ISA와 어셈블리

RISC-V 명령어 'jal ra, func'의 동작으로 올바른 것은?

  1. A다음 명령어의 주소를 ra에 저장한 뒤 func로 점프한다
  2. Bfunc의 주소를 ra에 넣기만 하고 점프는 하지 않는다
  3. Cra에 들어 있는 주소로 복귀한다
정답과 해설 보기

정답: A. 다음 명령어의 주소를 ra에 저장한 뒤 func로 점프한다

jal(jump and link)은 자신의 다음 명령어의 주소(PC+4)를 지정한 레지스터에 쓰고(링크) 목적지로 점프합니다. 호출 규약에서는 복귀 주소를 ra(x1)에 넣으므로, 함수 호출은 'jal ra, func'이며 의사 명령어로는 'call func'라고 씁니다. 호출된 함수는 처리 마지막에 ra의 주소로 복귀합니다. 쓰기 대상을 x0으로 하면 단순한 점프가 됩니다.

이 분야 연습하기 분야로 돌아가기

ISA와 어셈블리의 다른 문제

  1. RISC-V의 의사 명령어 'ret'은 실제로 어떤 명령어로 실행되는가?
  2. 호출 규약(콜링 컨벤션)이 정해져 있는 주된 목적은?
  3. RISC-V의 표준 호출 규약에서 정수 인자와 반환값을 전달하는 데 사용하는 레지스터로 올바른 것은?
  4. RISC-V의 표준 호출 규약에서 정수 인자가 10개인 함수를 호출할 때 9번째와 10번째 인자는 어디로 전달되는가?
  5. RISC-V 호출 규약에서 s0~s11이 '호출 대상 저장(callee-saved)' 레지스터라는 의미로 올바른 것은?