ISA와 어셈블리

RISC-V 명령어에서는 레지스터를 지정하는 필드(rd, rs1, rs2)가 각각 5비트이다. 그 이유로 올바른 것은?

  1. A레지스터의 폭이 5비트이기 때문
  2. B하나의 명령어에서 최대 5개의 레지스터를 사용할 수 있기 때문
  3. C정수 레지스터가 32개 있어 2의 5제곱=32가지로 지정할 수 있기 때문
정답과 해설 보기

정답: C. 정수 레지스터가 32개 있어 2의 5제곱=32가지로 지정할 수 있기 때문

R 형식 명령어는 상위부터 funct7(7비트)·rs2(5)·rs1(5)·funct3(3)·rd(5)·opcode(7)의 합계 32비트로 구성됩니다. 레지스터가 32개이므로 번호는 5비트로 나타낼 수 있습니다. 레지스터를 64개로 늘리면 필드가 각각 6비트씩 필요하여 세 개에서 3비트를 더 쓰게 되므로, 즉치값이나 명령어 종류에 쓸 수 있는 비트가 줄어듭니다. 레지스터의 개수는 명령어의 형태와 연결되어 있는 것입니다.

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

ISA와 어셈블리의 다른 문제

  1. RISC-V addi 명령어의 즉치값은 12비트 부호 있는 정수이다. 이 즉치값으로 나타낼 수 있는 범위는?
  2. RISC-V에서 12비트 즉치값에 들어가지 않는 32비트 상수(예: 0x12345678)를 레지스터에 넣는 일반적인 방법은?
  3. RISC-V에서 상수 0x12345FFF를 lui와 addi의 2개 명령어로 만들 때 올바른 조합은?
  4. RISC-V의 auipc 명령어(add upper immediate to PC)의 동작으로 올바른 것은?
  5. RISC-V(RV32I)에서 'addi t0, zero, -1'을 실행한 후 t0에 들어 있는 32비트 값은?