Go4Expert

Go4Expert (http://www.go4expert.com/)
-   C (http://www.go4expert.com/articles/c-tutorials/)
-   -   Pointer and reference similar at assembly level (http://www.go4expert.com/articles/pointer-reference-similar-assembly-level-t5882/)

kaustubh 15Aug2007 09:34

Pointer and reference similar at assembly level
 
Pointer and reference maybe same at assembly level.
Try an experiment :

Code: C

# include<stdio.h>
int main()
{
  int i =90;
  int *pointer;
  int &reference = i; // Line 6
  pointer = &i; 
  return 0// Line 8
}

compile it to assembly with Microsoft c++ like this :
Code:

c:\ cl /Fa filename.cpp
or with gcc like
Code:

c:\ gcc -S -masm=intel filename.cpp
Open the asm file like c:\ notepad filename.asm

Now you can the code of i, pointer, and reference;

Code:

Line 6
        mov        DWORD PTR _i$[ebp], 90                        ; int i = 90;
; Line 8
        lea        eax, DWORD PTR _i$[ebp]                  ; int &reference = i;
        mov        DWORD PTR _reference$[ebp], eax
; Line 9
        lea        ecx, DWORD PTR _i$[ebp]              ; int *pointer
        mov        DWORD PTR _pointer$[ebp], ecx    ;  pointer = &i;

you see the code for pointer is exactly same as reference .

DaWei 16Aug2007 16:21

Re: Pointer and reference similar at assembly level
 
That's because C doesn't have references like C++. The & is strictly an address-of operator.

shabbir 16Aug2007 16:22

Re: Pointer and reference similar at assembly level
 
He is using a cpp file and so the compiler is C++.

kaustubh 16Aug2007 23:56

Re: Pointer and reference similar at assembly level
 
Quote:

Originally Posted by DaWei
That's because C doesn't have references like C++. The & is strictly an address-of operator.

Dawei i am using c++ compiler if you don't believe me see this code

Code:

#include<iostream>

int main()
{
int i =90;
  int *pointer;
  int &reference = i;
  pointer = &i; 
  return 0; 
}

Code:

       
      mov    DWORD PTR _i$[ebp], 90                        ;  int i = 90

        lea        eax, DWORD PTR _i$[ebp]                  ; int &reference = i;
        mov        DWORD PTR _reference$[ebp], eax

        lea        ecx, DWORD PTR _i$[ebp]                  ; pointer = &i;
        mov        DWORD PTR _pointer$[ebp], ecx

the code of reference is same as code of pointer.

rajkumar_singhalmca 25Aug2007 13:38

Re: Pointer and reference similar at assembly level
 
the pointer is very ueful when the use in the right way otherwise it can be damaged the our memory location.


All times are GMT +5.5. The time now is 07:11.