사실 이건 별로 어려문 문제도 복잡한 것도 아니고,
메모리에 저장할 때 뒤집히고 아니고의 문제도 아닙니다.
Big endian/little endian이란 용어 자체가 걸리버 여행기에서 걸리버가...
대인국과 소인국에서 달걀을 깨는 방법을 가지고(???국에서는 뭉툭한 부분으로 깨고...???국에서는 뽀죡한 부분으로 깨고)...
전쟁인지 그냥 싸움인지...하여튼 별 하챦은 문제로 싸우는 것을 풍자한 데서 나온 말입니다...
간단하게 말하면,
하나의 레지스트...가령 16비트 레지스트 Rxxx = 0xff00이라면....
이 값의 상위부분 1바이트와 하위 부분 1 바이트를 메모리의 어느쪽에 저장할까 정도의 문제입니다.
즉, 16비트=2바이트를 저장하기 위해 2개의 바이트 단위 주소가 필요한데,
대인국(Big Endian...모토롤라의 PPC등...)에서는 상위바이트(MSB)를 낮은 번지-...즉, 메모리맵이란걸 낮은 번지 부터 그리면,
자연스럽게 낮은 번지에 상위 바이트가 들어가는 형식이 되겠지요....-에 저장해야 한다고 주장하고,
소 인국(little endian, 인텔 및 기타 많은 프로세서들...)은 그게 무슨 소리냐...그냥 순서데로- 얘네들은 메모리 맵을 높은 번지를 위에 낮은 번지를 아래에 그리니까...- 하위 바이트(LSB)가 낮은 번지에 상위 바이트 (MSB)가 높은 번지에 저장되면 된다...이렇게 주장하는 친구들일 뿐입니다.
따라서, 레지스트에 나타난 표현과 IO포트로 나가는 값은 동일하게 되고...물론 C언어에서 register로 정의 하는 것과는 아무 관계가 없고...
메모리에 저장되는 형식은 서로 다르게 되는 것입니다.
그냥 하나도 어려울 것 없이...
little endian에서는 하위 주소의 바이트가 IO포트의 하위 바이트로...
big endian에서는 하위 주소의 바이트가 IO포트의 상위 바이트로 나간다...
저장될 때는 그 반대 정도로 생각하면 됩니다.
두 아키텍쳐는 아무런 성능 및 기타 어떤 면에서도 차이가 없으며,
단지 처음 아키텍쳐를 설계한 사람들의 두뇌 구조를 반영한 정도일 뿐입니다.
옛날에는 어떤 것이 좋으니 아니니 하는 많은 논란이 있었는데,
밥먹고 할일 없는 사람들의 농담 따먹기로 판명이 났습니다.
결국 왼손잡이 오른손잡이 정도의 문제로 쉽게 생각하셔야 편합니다.
<출처 : http://cafe.naver.com/embeddedcrazyboys/1239>
두가지 모두 컴퓨터에 저장된 바이트들의 순서를 설명하는 용어입니다.
big-Endian 의 경우에는 메모리의 가장 낮은주소부터 데이터를 채워 나가는 방식입니다.
예를들어서 46DA라는 데이터를 저장할 경우에 실제로 메모리에 저장되어있는 주소는 46이 1000번지라면
DA는 그다음 번지은 1000+a 번지입니다.
반대로 little-Endian의 경우에는 46이라는 데이터의 주소가 1000+a번지이고 DA의 번지는 1000번지 입니다.
두가지 모두 각각의 장점을 가지고있는데 big-Endian의 경우에는 가독성과 대소 비교가 빠르고
little-Endian의 경우에는 산술연산이 상대적으로 빠릅니다.
모토로라나 sun에서는 big-Endian 방식을 채택하였고 Intel x86나 ARM의 경우에는
little-Endian을 채택하였습니다.
<출처 : http://cafe.naver.com/androseries/60>