ISA와 어셈블리

RISC-V에서 4바이트를 읽는 lw 명령어의 주소가 4의 배수가 아닐 때(경계가 맞지 않을 때) 일어날 수 있는 일로 올바른 것은?

  1. A명령어가 자동으로 다음 4의 배수 주소로 바꿔 읽혀 항상 같은 속도로 올바르게 읽을 수 있다
  2. BCPU 구현에 따라 예외가 발생하거나, 하드웨어나 소프트웨어로 처리되어 매우 느려질 수 있다
  3. C주소의 하위 2비트는 무시되고 오류는 발생하지 않는다
정답과 해설 보기

정답: B. CPU 구현에 따라 예외가 발생하거나, 하드웨어나 소프트웨어로 처리되어 매우 느려질 수 있다

4바이트 데이터를 4의 배수 주소에 두면 한 번의 메모리 접근으로 읽을 수 있습니다. 경계를 넘으면 두 번의 접근이 필요하므로, RISC-V는 경계가 어긋난 접근을 회로로 처리할지, 예외를 일으켜 소프트웨어에 맡길지를 구현에 위임하고 있습니다. 후자라면 자릿수가 다를 만큼 느려집니다. 컴파일러가 구조체 멤버 사이에 패딩을 넣어 정렬하는 것은 이 때문입니다.

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

ISA와 어셈블리의 다른 문제

  1. RISC-V 명령어 'slli t0, a0, 3'의 결과 t0는 a0 값의 몇 배가 되는가? (오버플로는 고려하지 않음)
  2. a0에 int형(4바이트) 배열 a의 시작 주소, a1에 첨자 i가 들어 있다. 위의 코드가 a2에 읽어 들이는 것으로 올바른 것은?
  3. x86의 명령어 'add eax, [rbx]'처럼 연산 명령어가 메모리 상의 값을 직접 사용할 수 있는 방식에 대해 올바른 것은?
  4. 현재의 고성능 x86 CPU가 복잡한 명령어를 내부에서 어떻게 실행하는지에 대한 설명으로 올바른 것은?
  5. RISC-V의 M 확장이 기본 정수 명령어 집합에 추가하는 명령어는?