ISA와 어셈블리
64비트 RV64I에서 lw 명령어를 실행하면 읽어 들인 32비트 값은 64비트 레지스터에 어떻게 들어가는가?
- A상위 32비트는 원래 값 그대로 남고 하위 32비트만 바뀐다
- B항상 제로 확장되어 64비트가 된다
- C부호 확장되어 64비트가 된다(제로 확장하려면 lwu를 사용한다)
정답과 해설 보기
정답: C. 부호 확장되어 64비트가 된다(제로 확장하려면 lwu를 사용한다)
RV64I의 lw는 32비트 값을 부호 확장하여 64비트 레지스터에 넣고, 부호 없이 읽는 lwu는 상위를 0으로 채웁니다. 상위를 이전 값 그대로 남기면 이전 값에 대한 의존이 생겨 비순차 실행에 방해가 되므로 RISC-V는 그렇게 하지 않습니다. 32비트 연산에는 addw 등 'w'가 붙은 명령어가 있으며, 결과를 32비트로 계산한 뒤 부호 확장합니다.