ISA와 어셈블리

a0에 int형(4바이트) 배열 a의 시작 주소, a1에 첨자 i가 들어 있다. 위의 코드가 a2에 읽어 들이는 것으로 올바른 것은?

slli t0, a1, 2
add  t0, a0, t0
lw   a2, 0(t0)
  1. Aa[4*i]의 값
  2. Ba[i]의 주소
  3. Ca[i]의 값
정답과 해설 보기

정답: C. a[i]의 값

1행에서 i를 2비트 왼쪽으로 시프트하여 4×i를 만들고, 2행에서 배열의 시작 주소에 더해 a[i]의 주소를 구하며, 3행에서 그 주소로부터 4바이트를 읽고 있습니다. int형은 한 요소가 4바이트이므로 i번째 요소는 시작에서 4×i 바이트 앞에 있습니다. C 언어의 'a[i]'는 컴파일러에 의해 이러한 주소 계산과 로드로 번역됩니다.

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

ISA와 어셈블리의 다른 문제

  1. x86의 명령어 'add eax, [rbx]'처럼 연산 명령어가 메모리 상의 값을 직접 사용할 수 있는 방식에 대해 올바른 것은?
  2. 현재의 고성능 x86 CPU가 복잡한 명령어를 내부에서 어떻게 실행하는지에 대한 설명으로 올바른 것은?
  3. RISC-V의 M 확장이 기본 정수 명령어 집합에 추가하는 명령어는?
  4. RISC-V의 C 확장(압축 명령어)의 주된 목적은?
  5. M 확장이 없는 RV32I CPU용으로 C 언어의 'a * b'(int끼리의 곱셈)를 컴파일하면 일반적으로 어떻게 되는가?