"mov eax, [num]" 和 "mov eax, num" 之间的区别

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

我是初学者,正在编写汇编程序以使用以下代码打印从 1 到 9 的数字:

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

这里我们有以下三个语句:

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

我想知道为什么我们应该使用 mov ecx,num 而不是 mov ecx,[num]

如果你熟悉C/C++,这里有一个解释。

mov ecx, num 等同于:

int num;
ecx = & num;

mov ecx, [num] 等同于:

int num;
ecx = num;

这里,mov ecx, num行的原因是因为您正在调用系统函数int 0x80,它要求ecx包含您号码的地址。所以应该是这样的。