메모리 접근에 대한 코드를 구현 하다보면 관련 레지스터의 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이기 때문에 이렇게 값이 뒤집어져 보이는 것이므로 오해하지 말자~!
'Linux & GIT' 카테고리의 다른 글
Git diff 명령어 (0) | 2019.06.05 |
---|---|
Git 기본 개념 정리 (0) | 2019.06.04 |
리눅스(Ubuntu) 특정 파일 제외 하고 모두 삭제하는 명령어 (0) | 2018.10.25 |
리눅스(Ubuntu) 특정 파일 제외 하고 모두 삭제하는 명령어 (0) | 2018.10.24 |
리눅스(Ubuntu 14.04.5 LTS) 버전 확인 방법 (0) | 2018.10.24 |
댓글