ISA와 어셈블리

RISC-V의 표준 호출 규약에서 정수 인자와 반환값을 전달하는 데 사용하는 레지스터로 올바른 것은?

  1. A인자는 s0~s7, 반환값은 ra
  2. B인자는 a0~a7, 반환값은 a0(와 a1)
  3. C인자는 모두 스택, 반환값은 sp
정답과 해설 보기

정답: B. 인자는 a0~a7, 반환값은 a0(와 a1)

RISC-V의 표준 호출 규약에서는 정수 인자를 최대 8개까지 a0~a7(x10~x17)에 넣어 전달하고, 반환값은 a0에, 64비트 값 등은 a0와 a1 두 개에 넣어 돌려줍니다. 메모리보다 빠른 레지스터로 주고받으므로 함수 호출의 부담이 작아집니다. 8개를 넘는 인자는 스택에 둡니다. 부동소수점 인자는 fa0~fa7을 사용합니다.

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

ISA와 어셈블리의 다른 문제

  1. RISC-V의 표준 호출 규약에서 정수 인자가 10개인 함수를 호출할 때 9번째와 10번째 인자는 어디로 전달되는가?
  2. RISC-V 호출 규약에서 s0~s11이 '호출 대상 저장(callee-saved)' 레지스터라는 의미로 올바른 것은?
  3. RISC-V 호출 규약에서 t0~t6은 '호출 원본 저장(caller-saved)' 레지스터이다. 어떤 함수가 t0에 넣은 값을 다른 함수를 호출한 뒤에도 사용하고 싶을 때 올바른 대응은?
  4. 다른 함수를 호출하지 않는 함수(리프 함수)에서는 ra를 스택에 저장하지 않아도 되는 경우가 많다. 그 이유로 올바른 것은?
  5. RISC-V 함수의 시작 부분에서 'addi sp, sp, -16'을 실행하는 목적으로 올바른 것은?