ISA와 어셈블리

위의 RISC-V 코드를 실행 완료했을 때 t0의 값은 얼마인가?

      li   t0, 0
      li   t1, 4
loop: add  t0, t0, t1
      addi t1, t1, -1
      bnez t1, loop
  1. A4
  2. B10
  3. C6
정답과 해설 보기

정답: B. 10

t1을 4에서 하나씩 줄여 가면서 t0에 t1을 더해 갑니다. t0는 4, 7, 9, 10으로 늘어나고, t1이 0이 된 시점에서 bnez(0이 아니면 분기)가 분기하지 않게 되어 루프를 빠져나옵니다. 결과는 4+3+2+1=10입니다. bnez는 'bne t1, zero, loop'의 의사 명령어입니다. 카운터를 줄이면서 0과 비교하는 형태는 비교용 상수가 필요 없어 자주 사용됩니다.

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

ISA와 어셈블리의 다른 문제

  1. RISC-V의 조건 분기 명령어(B 형식)는 분기 대상까지의 거리를 13비트 부호 있는 바이트 수로 나타내며, 그 최하위 비트는 항상 0이므로 명령어에 넣지 않는다. 분기 명령어가 직접 닿는 범위로 대략 올바른 것은?
  2. RISC-V 명령어 'jal ra, func'의 동작으로 올바른 것은?
  3. RISC-V의 의사 명령어 'ret'은 실제로 어떤 명령어로 실행되는가?
  4. 호출 규약(콜링 컨벤션)이 정해져 있는 주된 목적은?
  5. RISC-V의 표준 호출 규약에서 정수 인자와 반환값을 전달하는 데 사용하는 레지스터로 올바른 것은?