[[프로그래밍_NOTE]]/C , C++

SymbolTable

갑빠돌격기 2008. 8. 12. 14:36
/* symbol table test source */

////////////////////////////////////
#include<stdio.h>
#include<conio.h>
void main()
{
    int x;     int y;     int z;
    x = 10;     y = 20;     z = x+y;

    printf("%d + %d = %d\n", x,y,z);
    getch();
}
////////////////////////////////////

사용자 삽입 이미지
                    # SP : (stack pointer Register) : SP는 push, pop명령에 의하여
                         위치값이 변경되므로 변수의 위치는 ebp 레지스터를 이용한다.


1. 선언문에 선언된 변수의 정보는 Symbol Table 에 등록된다.
2. Symbol Table은 각종 정보를 저장하고 있다.
3. 변수는 12ff7c부터 시작해서 12ff78과 같이 아래로 진행된다.

tip :
    a. 변수 이름은 stack 에서 변수의 값을 참조한다. ( x ->10 )
    b. 변수 이름앞에 &가 있으면 Symbol Table에서 위치값을 얻어낸다. ( &x -> 0x12ff7c )


   question)
   // 오류의 이유?? ////////////////////////
   void main()
   {
       int iValue;
       scanf("%d" , iValue);
       printf("%d",iValue);
   }


사용자 삽입 이미지

  analysis)

  /*  scanf("%d",iValue) */
  iValue -> cccc cccc 을 가져오게 되며 cccc cccc위치에다 값을 쓰기 때문에
  프로세스가 멈추게 된다.

  올바르게 고치려면
  /*  scanf("%d",&iValue) */
  &iValue -> 12ff7c 이므로 12ff7c 위치에 %d 형식으로 값을 저장하게 되므로 문제가 없다.