메모리에 저장하는 방식에는 두가지가 존재한다.


    1. 리틀 엔디안(Little Endian)

    역순 저장


    장점 : 짝 홀수의 구분이 쉽다.(첫 바이트만 보고 짝홀수를 판단하면 됨)

    포인터 값 참조시 유리하다.

    예를 들어, char *x라는 포인터 변수가 하나 있고, 

    이 x가 가리키는 메모리 주소의 값이 0x12345678라고 가정해 봅시다.

    이 때, y = *x와 같이 포인터 변수가 가리키는 값을 참조하고자 할 경우, 

    포인터의 시작 주소에서 1바이트(char형)만 가져오면 자연스럽게 가장 낮은 바이트인 0x78가 참조되게 됩니다. 

    왜냐면 Little Endian의 특성에 따라 메모리에 저장된 데이터 값은 0x78 0x56 0x34 0x12가 되기 때문입니다.


    2. 빅 엔디안(Big Endian)

    순차적 저장


    장점 : 사람이 읽기 편하기 때문에 소프트웨어의 디버그를 편하게 해줌.



    이해를 돕기 위한 예제

    0011 0100 0101 0110 이라는 데이터를 저장하고싶다고 하자.


    빅 엔디언이라면

    0011 0100 0101 0110 이렇게 메모리에 저장되게 된다.

    리틀 엔디언이이라면

    0110 1010 0010 1100 이렇게 메모리에 저장되게 된다.


    한 바이트의 데이터를 읽으려고 할때는 어떻게 될까?

    MOV AL,BYTE PTR CS:[0]

     

    빅 엔디언이라면

    그대로 읽어 0011 0100 을 읽어와 AL로 옮겨

    AL에는 34 라는 16진수가 저장되게 된다.

    리틀 엔디언이이라면

    0101 0110 이렇게 역순으로 읽어오게 된다.

    그러면 AL에는 56이라는 16진수가 저장되게 된다.


    만약 서로 다른 엔디언 방식으로 저장되고 읽으려하면

    저장된 값과 아주 다른 값을 보게될것이다.


    'Assembly' 카테고리의 다른 글

    7. INC, DEC  (0) 2017.05.17
    6. JMP  (0) 2017.05.14
    4. 메모리  (0) 2017.05.13
    3. 범용 레지스터  (0) 2017.05.12
    2. MOV  (0) 2017.05.12
    Posted by Config