2011년4월15일..포인터복습, 정수와 실수의 바이트 순서(Big/little Endian)

 

1. 예제5-1

임베디드C p.134의 예제5-1은 변수에는 주소값이 있다.

type

name

address

int

x

0x0012FF7C

VS2010 Debugging에서..

만약 주소가 없다면 중간에 hexa decimal들은 무의미한 쓰레기 값이다.


상수를 변수에 대입 시,

x = 1000;
자료형 자료형 (형동등)
자료형이 같아야 대입할 수 있음.


(변수선언)



x = 1000;  // x가 무슨 타입인지 초기에 만든 symbol table을 보고 상수를 대입할 수 있는 자료형인지?

x = 3;
주소 0x0012FF7C =  3;      ->  어셈블러로 바꾸면, mov dptr[0012FF7C], 3

어셈블리어가 CPU(기계)와 가장 가까우나 길어지면 이해하기 어렵다.

JAVA
C
Assemble
chip

★포인터변수의 크기

int *xp;
char *cp;                     ================>   *ucp;    //unsigned char pointer
float *fp;        
short *sp;
long *lp;
모두 4Bytes의 크기를 갖고 앞에 자료형은 중요하지 않다.

*32bit의 주소를 표현하기 위해 포인터변수의 크기는 자료형의 크기와 관계없이 4Bytes로 고정이다. 또한 주소에는 음수가 없으니 부호가 없다. 포인터의 크기 = 버스의 크기(H/W) 바꿀 수 없다. 완벽한 64bit CPU는 포인터의 크기가 8Bytes가 될 것이다.

 

2. 예제 5-2

type name address
int x 0x0012FF7C
int * xp 0x0012FF78

x = 7;
xp = &x;
*xp = 8;
*0x0012FF7C = 8;   // 크기는 어떻게 아는가?  symbol table에서 xp의 자료형…포인터변수이면서 가리키는 곳의 자료형도 int형이다.

 

3. 메모리에 저장되는 순서가 어떻게 되나 알아보기 (바이트 순서)

image image

x

0x12 0x34 0x56 0x78

 

 

 

 

 

 

 

이러다 월화수목금금금…이상하게 집에선 집중이 안 됨.

노트 사본…ㅠㅠ

DSCN2274 DSCN2275 DSCN2276 DSCN2277 DSCN2278