ISA와 어셈블리

RISC-V의 조건 분기 명령어(B 형식)는 분기 대상까지의 거리를 13비트 부호 있는 바이트 수로 나타내며, 그 최하위 비트는 항상 0이므로 명령어에 넣지 않는다. 분기 명령어가 직접 닿는 범위로 대략 올바른 것은?

  1. A분기 명령어에서 앞뒤로 약 4KiB
  2. B분기 명령어에서 앞뒤로 약 1MiB
  3. C메모리 전체 어디에나 닿는다
정답과 해설 보기

정답: A. 분기 명령어에서 앞뒤로 약 4KiB

13비트 부호 있는 값은 -4096~+4095를 나타낼 수 있지만, 명령어는 2바이트 단위로 배치되므로 최하위 비트는 항상 0이며 범위는 -4096~+4094바이트입니다. 최하위 비트를 생략함으로써 같은 필드 크기로 2배 범위에 닿습니다. 이보다 먼 분기는 조건을 반전시킨 짧은 분기로, 멀리 닿는 jal(약 ±1MiB)을 건너뛰는 형태로 어셈블러가 고쳐 씁니다.

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

ISA와 어셈블리의 다른 문제

  1. RISC-V 명령어 'jal ra, func'의 동작으로 올바른 것은?
  2. RISC-V의 의사 명령어 'ret'은 실제로 어떤 명령어로 실행되는가?
  3. 호출 규약(콜링 컨벤션)이 정해져 있는 주된 목적은?
  4. RISC-V의 표준 호출 규약에서 정수 인자와 반환값을 전달하는 데 사용하는 레지스터로 올바른 것은?
  5. RISC-V의 표준 호출 규약에서 정수 인자가 10개인 함수를 호출할 때 9번째와 10번째 인자는 어디로 전달되는가?