ISA와 어셈블리

조건 분기 구조에 대해 RISC-V와 x86의 차이로 올바른 것은?

  1. ARISC-V는 플래그를 보고 분기하고, x86은 분기 명령어가 두 레지스터를 직접 비교한다
  2. B둘 다 조건 분기 명령어가 없고 테이블 참조로 점프 대상을 정한다
  3. CRISC-V는 분기 명령어가 두 레지스터를 직접 비교하고, x86은 비교 명령어가 설정한 플래그를 보고 분기한다
정답과 해설 보기

정답: C. RISC-V는 분기 명령어가 두 레지스터를 직접 비교하고, x86은 비교 명령어가 설정한 플래그를 보고 분기한다

x86에서는 'cmp eax, ebx'로 비교하여 제로나 캐리 등의 플래그(조건 코드)를 설정하고, 다음의 'je'나 'jl'이 플래그를 보고 분기합니다. RISC-V는 플래그를 갖지 않으며, 'beq a0, a1, L'이나 'blt a0, a1, L'처럼 분기 명령어 자체가 두 레지스터를 비교합니다. 플래그 같은 암묵적 상태가 없으므로 명령어를 재배열하거나 동시 실행할 때 의존 관계를 추적하기 쉬워집니다.

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

ISA와 어셈블리의 다른 문제

  1. RISC-V 명령어 'slt t0, a0, a1'의 동작으로 올바른 것은?
  2. 위의 RISC-V 코드를 실행 완료했을 때 t0의 값은 얼마인가?
  3. RISC-V의 조건 분기 명령어(B 형식)는 분기 대상까지의 거리를 13비트 부호 있는 바이트 수로 나타내며, 그 최하위 비트는 항상 0이므로 명령어에 넣지 않는다. 분기 명령어가 직접 닿는 범위로 대략 올바른 것은?
  4. RISC-V 명령어 'jal ra, func'의 동작으로 올바른 것은?
  5. RISC-V의 의사 명령어 'ret'은 실제로 어떤 명령어로 실행되는가?