Difference between "mov eax, [num]" and "mov eax, num"

15,210

If you are familiar with C/C++, here is an explanation.

mov ecx, num is equivalent to:

int num;
ecx = & num;

while mov ecx, [num] is equivalent to :

int num;
ecx = num;

Here, the reason for the line mov ecx, num is because you are calling the system function int 0x80, which requires that ecx contains the address of your numbers. So it should be like that.

Share:
15,210

Related videos on Youtube

Sham
Author by

Sham

Updated on June 04, 2022

Comments

  • Sham
    Sham almost 2 years

    I am a beginner and writing assembly program to print numbers from 1 to 9 using this code:

    section .text    
       global _start                    
    _start:                     
       mov ecx,10    
       mov eax, '1'     
    l1:    
       mov [num], eax    
       mov eax, 4    
       mov ebx, 1    
       push ecx     
       mov ecx, num            
       mov edx, 1            
       int 0x80     
       mov eax, [num]    
       sub eax, '0'    
       inc eax    
       add eax, '0'    
       pop ecx    
       loop l1      
       mov eax,1             ;system call number (sys_exit)    
       int 0x80              ;call kernel    
    section .bss    
    num resb 1
    

    Here we have following three statements:

    1. mov [num], eax
    2. mov ecx , num
    3. mov eax, [num]

    I want to know why we should use mov ecx,num rather than mov ecx,[num]

  • Sham
    Sham about 8 years
    okay it means we require to specify address of "num" variable in "ecx" and not its value. So the interrupt will print from that memory location viz, "ecx". Sounds perfect. Thank You