ISA와 어셈블리

RISC-V의 auipc 명령어(add upper immediate to PC)의 동작으로 올바른 것은?

  1. APC의 값을 그대로 메모리에 저장한다
  2. B자신의 주소(PC)에 20비트 즉치값을 12비트 왼쪽으로 시프트한 값을 더하여 레지스터에 넣는다
  3. C즉치값으로 지정한 주소로 무조건 점프하여 PC를 고쳐 쓴다
정답과 해설 보기

정답: B. 자신의 주소(PC)에 20비트 즉치값을 12비트 왼쪽으로 시프트한 값을 더하여 레지스터에 넣는다

auipc는 'PC+(즉치값<<12)'를 레지스터에 넣을 뿐인 명령어입니다. 이어서 jalr이나 lw로 하위 12비트의 오프셋을 더하면, 현재 위치에서 ±2GiB 정도 범위에 있는 함수나 데이터의 주소를 PC로부터의 거리로 지정할 수 있습니다. 이에 따라 프로그램을 어디에 로드해도 동작하는 위치 독립 코드에서 먼 함수를 호출하거나 전역 변수를 읽을 수 있습니다.

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

ISA와 어셈블리의 다른 문제

  1. RISC-V(RV32I)에서 'addi t0, zero, -1'을 실행한 후 t0에 들어 있는 32비트 값은?
  2. 메모리 상의 1바이트에 0x80이 들어 있다. RISC-V의 lb 명령어와 lbu 명령어로 이 바이트를 32비트 레지스터에 읽어 들였을 때의 값의 조합으로 올바른 것은?
  3. 조건 분기 구조에 대해 RISC-V와 x86의 차이로 올바른 것은?
  4. RISC-V 명령어 'slt t0, a0, a1'의 동작으로 올바른 것은?
  5. 위의 RISC-V 코드를 실행 완료했을 때 t0의 값은 얼마인가?