ISA와 어셈블리

리틀 엔디안 RISC-V에서 0x12345678이 들어 있는 레지스터를 'sw'로 주소 0x100에 썼다. 그 후 'lbu'로 주소 0x101의 1바이트를 읽으면 값은 얼마인가?

  1. A0x34
  2. B0x56
  3. C0x78
정답과 해설 보기

정답: B. 0x56

리틀 엔디안에서는 값의 하위 바이트부터 순서대로 작은 주소에 둡니다. 0x12345678이라면 0x100에 0x78, 0x101에 0x56, 0x102에 0x34, 0x103에 0x12가 들어갑니다. 따라서 0x101의 1바이트는 0x56입니다. 빅 엔디안이라면 0x100부터 0x12, 0x34, … 순이 되어 0x101은 0x34입니다. 네트워크나 파일 형식을 다룰 때는 이 차이에 주의가 필요합니다.

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

ISA와 어셈블리의 다른 문제

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