컴퓨터는 데이터를 메모리에 저장할 때 바이트(byte) 단위로 나눠서 저장한다. 하지만 컴퓨터가 저장하는 데이터는 대게 32비트(4바이트)나 64비트(8바이트)로 구성된다. 따라서 이렇게 연속되는 바이트를 순서대로 저장해야 하는데, 이것을 바이트 저장 순서(바이트 오더 : byte order)라고 한다.
바이트 오더는 빅 엔디안(big endian) 과 리틀 엔디안(little endian) 방식이 있다.
빅 엔디안은 메모리의 Lower Address 에 MSB (최상위비트/Most Significant Bit) 부터 저장하는 방식이고,
리틀 엔디안은 메모리의 Lower Address 에 LSB (최하위비트/Least Significant Bit) 부터 저장하는 방식이다.
아래 예시에서 Data의 MSB는 0x01이고 LSB는 0x04이다.
리틀 엔디안 방식으로 저장되면 LSB First 로 0x04030201 이 저장되고
빅 엔디안 방식으로 저장되면 MSB First 로 0x01020304 이 저장된다.
리틀 엔디안 방식인데 0x40302010 이 아니라 0x04030201 인 이유는, 컴퓨터가 데이터를 처리하는 최소 단위가 바이트이기 때문에 바이트가 쪼개지진 않는다. '안녕하세요'를 거꾸로 하면 '요세하녕안'이지 'ㅛㅇㅔㅅㅏㅎㅇㅕㄴㄴㅏㅇ'가 아닌것과 마찬가지이다.
테스트 코드
#include <stdio.h>
int main()
{
int i;
int test = 0x12345678;
char* ptr = (char*)&test;
for (i = 0; i < sizeof(int); i++)
{
printf("%x", *ptr++);
}
return 0;
}
테스트 데이터인 0x12345678 을 int 형에 대입하고 2진수로 출력해 봤을때
결과가 12345678로 출력되었다면 빅 엔디안, 78563412로 출력되었다면 리틀 엔디안 방식이다.
'임베디드 개발 > 펌웨어' 카테고리의 다른 글
Ethernet, MAC, MII, RMII, GMII, RGMII PHY (0) | 2022.09.24 |
---|---|
CPU, MCU, MPU, DSP, FPGA 구분 (0) | 2022.09.10 |
CISC 와 RISC (0) | 2022.06.23 |
STM32 ] Datasheet 첫 장에 나오는 DMIPS 란 (0) | 2022.06.23 |
Memory mapped I/O 와 I/O mapped I/O (0) | 2022.06.23 |