Difference between “mov eax, [num]” and “mov eax, num”

冷暖自知 提交于 2019-12-05 06:59:27

问题


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]


回答1:


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.



来源:https://stackoverflow.com/questions/35463649/difference-between-mov-eax-num-and-mov-eax-num

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!