ISA와 어셈블리

RISC-V의 의사 명령어 'nop'(아무것도 하지 않음)은 어셈블러에 의해 실제로 어떤 명령어로 치환되는가?

  1. Aaddi x0, x0, 0
  2. Bjal ra, 0
  3. Clw x0, 0(sp)
정답과 해설 보기

정답: A. addi x0, x0, 0

RISC-V에는 '아무것도 하지 않는' 전용 명령어가 없으며, nop은 'addi x0, x0, 0'으로 표현됩니다. x0에 대한 쓰기는 버려지므로 레지스터도 메모리도 아무것도 바뀌지 않습니다. 마찬가지로 'mv rd, rs'는 'addi rd, rs, 0', 'j label'은 'jal x0, label', 'ret'은 'jalr x0, 0(ra)'입니다. x0을 활용해 명령어의 종류를 적게 유지하는 것이 RISC-V의 설계 사상입니다.

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

ISA와 어셈블리의 다른 문제

  1. RISC-V의 'add' 명령어와 'addi' 명령어의 차이로 올바른 것은?
  2. 위의 RISC-V 코드를 실행한 후 레지스터 a2의 값은 얼마인가?
  3. RISC-V 명령어 'lw t0, 8(sp)'의 동작으로 올바른 것은?
  4. RISC-V의 조건 분기 명령어 'beq a0, a1, label'에서 분기 대상 label의 주소는 어떻게 표현되는가?
  5. 분기나 점프에 PC 상대 주소 지정을 사용하는 것의 이점으로 올바른 것은?