ISA와 어셈블리

RISC-V 명령어 'slt t0, a0, a1'의 동작으로 올바른 것은?

  1. Aa0를 a1비트만큼 왼쪽으로 시프트하여 t0에 넣는다
  2. Ba0가 a1보다 작으면 t0의 주소로 분기한다
  3. Ca0가 a1보다 작으면 t0에 1을, 그렇지 않으면 0을 넣는다
정답과 해설 보기

정답: C. a0가 a1보다 작으면 t0에 1을, 그렇지 않으면 0을 넣는다

slt(set less than)는 두 레지스터를 부호 있는 정수로 비교하여 작으면 1, 아니면 0을 씁니다. 부호 없이 비교하는 sltu, 즉치값과 비교하는 slti도 있습니다. C 언어의 'x = (a < b);'처럼 비교 결과를 값으로 사용할 때나, 분기를 없애고 조건을 계산으로 표현할 때 사용됩니다. 시프트는 sll, 분기는 blt 등 다른 명령어입니다.

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

ISA와 어셈블리의 다른 문제

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