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:
I want to know why we should use mov ecx,num
rather than mov ecx,[num]
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.