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.
Related videos on Youtube
Author by
Sham
Updated on June 04, 2022Comments
-
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:
- mov [num], eax
- mov ecx , num
- mov eax, [num]
I want to know why we should use
mov ecx,num
rather thanmov ecx,[num]
-
Michael about 8 yearsThe difference is explained in stackoverflow.com/a/33342016/1524450
-
Michael Petch about 8 yearsPossible duplicate of Basic use of immediates (square brackets) in x86 Assembly and yasm
-
Peter Cordes about 8 yearsI wrote up a guide to x86 addressing modes, including covering the difference between NASM and MASM on this bit of syntax:
mov ecx, num
vs.mov ecx, OFFSET num
. It was an attempt to write up an answer that Qs like this could be linked to as duplicates.
-
Sham about 8 yearsokay 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