ISA와 어셈블리

64비트 RV64I에서 lw 명령어를 실행하면 읽어 들인 32비트 값은 64비트 레지스터에 어떻게 들어가는가?

  1. A상위 32비트는 원래 값 그대로 남고 하위 32비트만 바뀐다
  2. B항상 제로 확장되어 64비트가 된다
  3. C부호 확장되어 64비트가 된다(제로 확장하려면 lwu를 사용한다)
정답과 해설 보기

정답: C. 부호 확장되어 64비트가 된다(제로 확장하려면 lwu를 사용한다)

RV64I의 lw는 32비트 값을 부호 확장하여 64비트 레지스터에 넣고, 부호 없이 읽는 lwu는 상위를 0으로 채웁니다. 상위를 이전 값 그대로 남기면 이전 값에 대한 의존이 생겨 비순차 실행에 방해가 되므로 RISC-V는 그렇게 하지 않습니다. 32비트 연산에는 addw 등 'w'가 붙은 명령어가 있으며, 결과를 32비트로 계산한 뒤 부호 확장합니다.

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

ISA와 어셈블리의 다른 문제

  1. ABI(애플리케이션 바이너리 인터페이스)에 대한 설명으로 올바른 것은?
  2. C 언어의 함수 포인터를 사용한 호출 '(*fp)(x)'는 RISC-V에서 일반적으로 어떤 명령어로 이루어지는가?
  3. 동일한 명령어 집합 아키텍처(ISA)를 채택한 두 CPU에 대해 올바른 것은?
  4. RISC-V와 같은 로드-스토어 아키텍처의 특징으로 올바른 것은?
  5. RISC-V의 레지스터 x0(zero)의 성질로 올바른 것은?