Pasted as C89 by net [ Create new paste | Remove this paste ]
Description: Understanding pointers
URL: http://rafb.net/p/2mLTMq29.html
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

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

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92
C code:

 

int MyFunction(int argWord, int word2)

{

    int x = 9;

    int y = 5;

 

    ...

    ...

    ...

 

    return localWord;

}

 

 

         Stack           Memory Address

 

     |                  |0xffe8

      ------------------

sp ->|  5               |0xffea

      ------------------

     |  9               |0xffec

      ------------------

     | Saved Bp         |0xffee

      ------------------

bp ->| Return adddress  |0xfff0

      ------------------

     | argWord          |0xfff2

      ------------------

     | word2            |0xfff4

      ------------------

 

8086 architecture. Stack will grow to lower addresses

 

 

Now let's change the code a little:

 

C code:

 

int MyFunction(int argWord, int word2)

{

    int y = 22;

    int *x = &y;

 

    ...

    ...

    ...

 

    return localWord;

}

 

         Stack           Memory Address

 

     |                  |0xffe8

      ------------------

sp ->|  0xffec          |0xffea

      ------------------

     |  22              |0xffec

      ------------------

     | Saved Bp         |0xffee

      ------------------

bp ->| Return adddress  |0xfff0

      ------------------

     | argWord          |0xfff2

      ------------------

     | word2            |0xfff4

      ------------------

 

Now if I do this:

 

 *x = 12;

 

the value of y changes to 12 and the stack looks like this:

 

then the stack changes

 

Stack                   Memory Address

 

     |                  |0xffe8

      ------------------

sp ->|  0xffec          |0xffea

      ------------------

     |  12              |0xffec

      ------------------

     | Saved Bp         |0xffee

      ------------------

bp ->| Return adddress  |0xfff0

      ------------------

     | argWord          |0xfff2

      ------------------

     | word2            |0xfff4

      ------------------