ISA와 어셈블리

RISC-V 명령어 'lw t0, 8(sp)'의 동작으로 올바른 것은?

  1. At0의 값을 sp에 8을 더한 주소에 4바이트 쓴다
  2. Bsp의 값에 8을 더한 주소에서 4바이트를 읽어 t0에 넣는다
  3. Csp의 값을 8배한 주소에서 4바이트를 읽어 t0에 넣는다
정답과 해설 보기

정답: B. sp의 값에 8을 더한 주소에서 4바이트를 읽어 t0에 넣는다

lw는 load word의 약자로 32비트(4바이트)를 메모리에서 읽어 들이는 명령어입니다. '8(sp)'는 sp의 값을 베이스로 하여 8을 더한 주소를 나타내며, 이러한 주소 지정 방식을 베이스 상대(레지스터 간접+오프셋)라고 합니다. 스택 상의 변수나 구조체 멤버에 베이스로부터 일정한 거리로 접근하는 데 편리합니다. 반대로 레지스터의 값을 메모리에 쓰는 것이 sw(store word)입니다.

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

ISA와 어셈블리의 다른 문제

  1. RISC-V의 조건 분기 명령어 'beq a0, a1, label'에서 분기 대상 label의 주소는 어떻게 표현되는가?
  2. 분기나 점프에 PC 상대 주소 지정을 사용하는 것의 이점으로 올바른 것은?
  3. RISC-V의 기본 명령어와 x86 명령어의 길이에 대해 올바른 것은?
  4. 명령어 길이를 고정 길이로 하는 것의 이점으로 가장 적절한 것은?
  5. RISC-V 명령어에서는 레지스터를 지정하는 필드(rd, rs1, rs2)가 각각 5비트이다. 그 이유로 올바른 것은?