Endianness
엔디안
- 컴퓨터 시스템에서 주소에 접근하는 메커니즘은 아래와 같이 크게 두 가지로 구분된다:
- Byte Addressable
- 컴퓨터 내부 구조에서 메모리의 주소는 1Byte마다 하나씩 배정된다. (1bit마다 배정되지 않는다.) - Word Addressable
- MIPS에서의 메모리 주솟값은 4의 배수 형태이다. 즉, 4Byte의 메모리 덩어리를 대표하는 메모리 주솟값은 LSB 혹은 MSB의 주솟값이다.
- 하나의 Word에 해당되는 Data를 저장하는 방법은 아래와 같이 Big-Endian과 Little-Endian으로 구분된다:
- Big Endian
- MSB를 가장 작은 주솟값에 저장한다.
- Little Endian
- MSB를 가장 큰 주솟값에 저장한다.
- 1Word 메모리의 가장 작은 주솟값부터 데이터를 저장하느냐, 가장 큰 주솟값부터 데이터를 저장하느냐에 따라
Big Endian, Little Endian 방식으로 나뉜다.
- 빅 엔디안, 리틀 엔디안 방식의 차이는 데이터를 Byte 단위로 읽거나 쓸 때 발생하며,
Word 단위로 데이터를 조작할 때는 차이가 없다.
Example. Big-Endian vs Little-Endian
Big Endian (빅 엔디안)
- 가장 낮은 주솟값부터 MSB값을 저장하는 방식이다.
- 빅 엔디안 방식에서는 MSB가 저장되어 있는 가장 낮은 주솟값이 해당 메모리 덩어리를 대표하는 주솟값이 된다.
- MIPS와 SPARC에서 이 방식을 따르고 있다.
Little Endian (리틀 엔디안)
- 가장 큰 주솟값부터 MSB를 저장시키는 방식이다.
- 리틀 엔디안 방식에서는 LSB가 저장되어 있는 가장 낮은 주솟값이 해당 메모리 덩어리를 대표하는 주솟값이 된다.
- x86과 RISC-V에서 이 방식을 따르고 있다.
Example. \($s0\) 레지스터에 \(\texttt{0x23456789}\)가 저장되어 있다고 하자.
아래와 같은 명령어가 실행된 후에 \($s0\) 레지스터에 저장된 값은
빅 엔디안 머신과 리틀 엔디안 머신 각각의 따라 어떻게 달리 저장되어 있을 것인가?
sw $s0, 0($zero)
lb $s0, 1($zero)
Answer.
0x00000045 # in Big-Endian Machine
0x00000067 # in Little-Endian Machine