ISA와 어셈블리

RISC-V의 표준 호출 규약에서 정수 인자가 10개인 함수를 호출할 때 9번째와 10번째 인자는 어디로 전달되는가?

  1. As0와 s1
  2. Bt0와 t1
  3. C스택 상
정답과 해설 보기

정답: C. 스택 상

인자용 레지스터는 a0~a7의 8개이므로 9번째 이후는 호출하는 쪽이 스택에 쌓고, 호출받은 쪽은 스택 포인터로부터 정해진 위치에서 읽습니다. 메모리 접근이 늘어나므로 인자가 매우 많은 함수는 조금 느려집니다. 큰 구조체는 구조체에 대한 포인터로 한꺼번에 전달하는 등 인자를 줄이는 방법이 자주 사용됩니다.

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

ISA와 어셈블리의 다른 문제

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