본문 바로가기
Linux & GIT

LSB, MSB 접근에 대한 정확한 이해

by 누워서 코딩 2018. 9. 18.

메모리 접근에 대한 코드를 구현 하다보면 관련 레지스터의 LSB/MSB 접근이 헷갈려 어려움을 겪을때가 많다.

꽤 숙련된 엔지니어라도 자주 헷갈리는데...


그래서 오랜만에 다시 한번 복습하는 차원에서 정리 해 보았다.


Address 구성이 64bit, 8Byte 구성되어 있다고 볼때, 보통 4Byte 끊어서 낮은 비트수에 해당하는 4Byte 주소(0xA0150) LSB(least significant bit) 혹은 "최하위 비트" 라고 부르며 높은 비트수(0xA0154) 해당하는 4Byte 주소를 MSB(most significant bit) 혹은 "최상위 비트" 라고 부른다.

 

쉬운 이해를 위해 다음과 같이 예제로 한번 살펴 보자.

 

다음과 같이 낮은수의 32bit(4Byte) 해당하는 0xA0150 LSB 될것이고, 높은수의 32bit(4Byte) 해당하는 0xA0154 MSB 것이다.

여기에 각각 "0x40001000" 와 "0x28000000"라는 값을 쓴다고 가정 한다.

 

Addr : Value = 0xA0150 : 0x40001000

 

0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31

0000 | 0000 | 1000 | 0000 | 0000 | 0000 | 0000 | 0010

 

Addr : Value = 0xA0154 : 0x28000000

 

32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63

0000 | 0000 | 0000 | 0000 | 0000 | 0000 | 1000 | 0100

 


실제 Physical memory영역에 write 주소값 :




다음은 실제 메모리에서 해당 Address에 write된 값을 Dump로 추출 해본 결과 이다. (Byte단위로 끊어서 읽었음)




뭔가 이상하다… 왜 값이 뒤집어 져보이지?

 ...


이유는 해당 CPU Little endian방식 Intel계열의 CPU이기 때문에 이렇게 값이 뒤집어져 보이는 것이므로 오해하지 말자~!

댓글