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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With