ISA와 어셈블리
RISC-V에서 12비트 즉치값에 들어가지 않는 32비트 상수(예: 0x12345678)를 레지스터에 넣는 일반적인 방법은?
- Aaddi를 1회 사용하여 32비트 즉치값을 그대로 쓴다
- Blui로 상위 20비트를 설정하고 addi로 하위 12비트를 더한다
- C상수는 사용할 수 없으므로 반드시 입력에서 읽어 들인다
정답과 해설 보기
정답: B. lui로 상위 20비트를 설정하고 addi로 하위 12비트를 더한다
lui(load upper immediate)는 20비트 즉치값을 레지스터의 비트 31~12에 두고 하위 12비트를 0으로 만듭니다. 이어서 addi로 하위 12비트를 더하면 임의의 32비트 상수를 만들 수 있습니다. 어셈블리에서 'li a0, 0x12345678'이라고 쓰면 어셈블러가 필요에 따라 이 2개의 명령어로 전개합니다. 명령어 길이를 고정한 ISA에서는 큰 상수를 나누어 만드는 것이 일반적입니다.