ISA와 어셈블리

RISC-V에서 상수 0x12345FFF를 lui와 addi의 2개 명령어로 만들 때 올바른 조합은?

  1. Alui t0, 0x12346 다음에 addi t0, t0, -1
  2. Blui t0, 0x12345 다음에 addi t0, t0, 0xFFF
  3. Clui t0, 0x12345 다음에 addi t0, t0, -1
정답과 해설 보기

정답: A. lui t0, 0x12346 다음에 addi t0, t0, -1

addi의 즉치값은 부호 확장되므로, 하위 12비트가 0xFFF(최상위 비트가 1)일 때는 -1로 더해집니다. 그래서 lui로 만드는 상위를 1 큰 0x12346으로 해 두고, 0x12346000에 -1을 더해 0x12345FFF를 얻습니다. 하위 12비트의 비트 11이 1일 때 상위에 1을 더해 둔다는 이 보정은 어셈블러나 링커가 자동으로 수행합니다.

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

ISA와 어셈블리의 다른 문제

  1. RISC-V의 auipc 명령어(add upper immediate to PC)의 동작으로 올바른 것은?
  2. RISC-V(RV32I)에서 'addi t0, zero, -1'을 실행한 후 t0에 들어 있는 32비트 값은?
  3. 메모리 상의 1바이트에 0x80이 들어 있다. RISC-V의 lb 명령어와 lbu 명령어로 이 바이트를 32비트 레지스터에 읽어 들였을 때의 값의 조합으로 올바른 것은?
  4. 조건 분기 구조에 대해 RISC-V와 x86의 차이로 올바른 것은?
  5. RISC-V 명령어 'slt t0, a0, a1'의 동작으로 올바른 것은?