엔디안(Endian) 이란
엔디안이란 컴퓨터의 메모리와 같이 데이터를 저장하는 공간에서 여러 개의 연속된 대상을 배열하는 방법을 뜻한다.
즉, 데이터가 메모리에 저장되는 순서이다.
메모리는 프로그램과 데이터를 저장하는 공간으로 사용되는데, 메모리 구조에 따라 빅 엔디안(big endian),
리틀 엔디안(little endian)으로 나뉜다.
대표적으로 PC에서 가장 많이 사용되는 Intel의 x86 계열 프로세서가 대표적인 리틀 엔디안 방식을,
IBM, Motorora 같은 경우는 빅 엔디안 방식을 사용한다.
ARM의 같은 경우 리틀 엔디안과 빅 엔디안 둘 다 사용할 수 있지만 디폴트 값으로 리틀 엔디안 방식을 사용한다.
ARM의 경우 기본적으로 외부의 신호에 의해 하드웨어적으로 선택되지만, ARM 아키텍처 v6 이후에는 명령어에 의해서도 변경할 수 있다.
빅 엔디안(Big Endian)
빅 엔디안은 메모리의 하위 어드레스에 MSB(Most Significant Byte)가 위치하는 메모리 구조이다.
빅 엔디안의 가장 큰 장점은 사람이 숫자를 읽고 쓰는 방법과 같은 방향으로 메모리 구조가 형성되어 있다.
그래서 소프트웨어의 디버그를 편하게 해 준다는 경향이 있는 것이 큰 장점이다. 메모리 구조가 익숙하지 않은 사람이라면, 리틀 엔디안과 같이
메모리 구조가 반대로 되어 있을 경우, 메모리를 읽기 힘들 수 있다.
리틀 엔디안(Little Endian)
리틀 엔디안은 메모리의 하위 어드레스에 LSB(Least Significant Byte)가 위치하는 메모리 구조이다.
리틀 엔디안의 경우 사람이 숫자를 읽고 쓰는 방법의 반대 방향으로 메모리 구조가 형성되어 있다.
ARM, x86 등의 Datasheet를 보면 레지스터가 [31:30], [29:28] 식으로 구성되어 있는 경우가 리틀 엔디안임을 뜻한다.
리틀 엔디안의 가장 큰 장점은 메모리에 저장된 값의 하위 바이트들만 사용할 때 별도의 계산이 필요 없다는 장점이 있다.
리틀 엔디안과 빅 엔디안은 메모리 저장 형태에 따라 다른 방식으로, 두 방법 중 어느 한 쪽이 비교적으로 우위에 있다 라는 것은 없다.
두 방법은 서로 다른 아키텍처에서 사용하는 방법일 뿐이다.
리틀 엔디안, 빅 엔디안 말고도 바이 엔디안, 미들 엔디안도 존재한다.
바이 엔디안(Bi Endian)
바이 엔디안이란 빅 엔디안과 리틀 엔디안 중 하나를 선택할 수 있도록 설계되어 있는 엔디안 구조 방식을 말한다.
대표적으로 ARM, PowerPC, MIPS 등이 있다.
바이 엔디안 대부분은 컴퓨터가 시작된 상태에서 소프트웨어 적으로 바이트 순서를 바꿀 수 있지만,
펌웨어에서 바이트 순서를 선택해야 하는 경우도 있다.
미들 엔디안(Middle Endian)
미들 엔디안은 쉽게 말해 한 방향으로 순서가 정해져 있는 것이 아닌 방식을 말한다.
32비트 정수가 있을 경우, 바이트 단위로는 빅 엔디안 방식, 바이트 안에서 비트 단위로는 리틀 엔디안인 경우를 말한다.
VAX, ARM 에서 배정밀도 부동소수점 실수를 미들 엔디안으로 저장한다.
'Embedded > 이론' 카테고리의 다른 글
[Embedded] ARM 구성 레지스터 (0) | 2022.11.15 |
---|---|
[Embedded] ARM 동작 모드와 레지스터 (0) | 2022.11.15 |
[Embedded] ARM의 개요 (2) | 2022.11.15 |
[Embedded] 명령어 구조 (0) | 2022.11.15 |
[Embedded] 임베디드 시스템의 메모리 종류 (0) | 2022.11.15 |