ISA와 어셈블리

RISC-V의 레지스터 x0(zero)의 성질로 올바른 것은?

  1. A읽으면 항상 0이고, 값을 써도 변하지 않는다
  2. B함수의 복귀 주소를 보관한다
  3. C직전 연산의 결과가 0이었는지를 나타내는 플래그가 된다
정답과 해설 보기

정답: A. 읽으면 항상 0이고, 값을 써도 변하지 않는다

x0는 항상 0을 반환하는 특수한 레지스터이며 쓰기는 무시됩니다. 0이라는 상수를 언제든 쓸 수 있으므로 'add rd, rs, x0'으로 값 복사, 'addi rd, x0, 5'로 상수 설정, 결과를 버리고 싶을 때는 쓰기 대상을 x0으로 하는 등의 사용이 가능하여 전용 명령어를 늘리지 않아도 됩니다. 복귀 주소는 x1(ra)에 들어갑니다. RISC-V는 연산 결과 플래그를 갖지 않으며, 분기 명령어가 두 레지스터를 직접 비교합니다.

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

ISA와 어셈블리의 다른 문제

  1. RISC-V의 RV32I(32비트 기본 정수 명령어 집합)가 가진 범용 정수 레지스터로 올바른 것은?
  2. 어셈블리 언어와 기계어의 관계로 올바른 것은?
  3. RISC-V의 의사 명령어 'nop'(아무것도 하지 않음)은 어셈블러에 의해 실제로 어떤 명령어로 치환되는가?
  4. RISC-V의 'add' 명령어와 'addi' 명령어의 차이로 올바른 것은?
  5. 위의 RISC-V 코드를 실행한 후 레지스터 a2의 값은 얼마인가?