ISA와 어셈블리

분기나 점프에 PC 상대 주소 지정을 사용하는 것의 이점으로 올바른 것은?

  1. A분기 대상이 아무리 멀어도 하나의 명령어로 반드시 닿는다
  2. B분기 예측이 필요 없어져 파이프라인이 멈추지 않게 된다
  3. C프로그램을 메모리의 어느 주소에 로드해도 명령어를 고쳐 쓰지 않고 동작시킬 수 있다
정답과 해설 보기

정답: C. 프로그램을 메모리의 어느 주소에 로드해도 명령어를 고쳐 쓰지 않고 동작시킬 수 있다

PC 상대 분기는 '여기서 몇 바이트 앞'이라는 거리로 목적지를 나타내므로, 프로그램 전체를 다른 주소로 옮겨도 거리는 변하지 않아 그대로 동작합니다. 이는 공유 라이브러리 등에서 사용하는 위치 독립 코드(PIC)의 토대가 됩니다. 다만 거리를 나타내는 비트 수에 한계가 있으므로, 멀리 점프할 때는 auipc와 jalr을 조합합니다. 분기 예측의 필요성은 표현 방식과 관계가 없습니다.

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

ISA와 어셈블리의 다른 문제

  1. RISC-V의 기본 명령어와 x86 명령어의 길이에 대해 올바른 것은?
  2. 명령어 길이를 고정 길이로 하는 것의 이점으로 가장 적절한 것은?
  3. RISC-V 명령어에서는 레지스터를 지정하는 필드(rd, rs1, rs2)가 각각 5비트이다. 그 이유로 올바른 것은?
  4. RISC-V addi 명령어의 즉치값은 12비트 부호 있는 정수이다. 이 즉치값으로 나타낼 수 있는 범위는?
  5. RISC-V에서 12비트 즉치값에 들어가지 않는 32비트 상수(예: 0x12345678)를 레지스터에 넣는 일반적인 방법은?