본문 바로가기

무언가 만들기 위한 지식/ARM Processor

Big-Endian & Little-Endian

엔디언(Endian)이란 메모리같은 1차원 공간에 일정단위(Byte 또는 Bit)로 연속된 대상을 저장하는 방법을 말한다.
이 엔디언은 크게 빅엔디언과 리틀엔디언 두가지로 나뉜다.
이 두가지 방식은 저장되는 순서에 따라 달라진다.
이 엔디언이라는 개념은 다른방식의 아키텍쳐와 통신을 통해 자료를 주고 받을때 문제가 생긴다. 서로 다른식으로 메모리에 저장을 한다면 교환시 앞뒤가 바뀐 데이터로 엉뚱한 해석을 할 수 있다.
그렇기 때문에 아키텍쳐의 엔디언 방식이 다르다면, 이것을 같은 방식으로 맞춰주어야 할 필요가 있다. 

1. 빅엔디언(Big-Endian)
    엔디언 방식이 개념만 알고 넘어가면 이외로 간단한데, 메모리와 레지스터 구조를 생각해보면 조금 헷갈린다.
    기본적인 개념은 빅엔디언은 큰단위가 앞에 나오는 방식, 높은 자리수부터 저장하는 방식 이다.


    위 그림은 구글에서 찾은 그림인데 꽤나 명확하게 개념을 설명해 주고 있다.
    Register상의 32Bit를 가장 상위의 1 Byte 단위로 높은 자리수에서 낮은 자리수 순으로 메모리에 위치하고 있다.
    (그림상에서 메모리의 위치가 낮은 주소 아래가 높은 주소이다.)

    이 빅엔디언은 RISC 구조에서 주로 나타내며 모토로라 프로세서가 일반적으로 사용한다. (ARM등은 둘중 선택가능)
    빅엔디언의 장점은 디버그를 편하게 해주는 점이다. 사람이 읽는 순서와 동일하기 때문에 디버깅 과정에서 메모리값을 보기 편하다. (Ex : 0x12345678   => 12 34 56 78 로 표현됨) 


2. 리틀엔디언(Little-Endian)
    리틀엔디언은 빅엔디언과 반대의 방식이다.
    즉, 작은 단위가 앞에 나오는 방식, 낮은 자리수부터 저장하는 방식 이다.
    쉽게 생각하면 사람이 숫자를 읽는 반대순서로 메모리에 저장한다고 보면된다.
     

    위에서처럼 Register의 하위 자릿수를 Memory상에 먼저 저장하는 것을 볼 수 있다.
    x86아키텍쳐의 경우 리틀엔디언을 사용한다. (즉, 대부분의 인텔 계열 사용한 데스크탑컴퓨터는 리틀엔디언이다.)
    리틀엔디언의 장점은 메모리에 저장된 값의 하위바이트만 사용할때 별도의 계산이 필요없다는 것이다.(하위단위를 먼저 저장하므로!) - (Ex : 0x12345678   => 78 65 43 21 로 표현됨) 

위키피디아에 의하면 어떤 것이 특별히 성능이 우수한지 밝혀지지 않았다고 한다.


'무언가 만들기 위한 지식 > ARM Processor' 카테고리의 다른 글

Memory Mapped I/O  (1) 2010.02.20
CISC/RISC  (0) 2010.02.20
MicroProcessor  (0) 2010.02.19
About ARM Processor & Develop Tool  (0) 2010.02.19
NAND/NOR FLASH Memory  (0) 2009.02.19