" mov eax,[num]"和" mov eax,num"

时间:2016-02-17 17:29:33

标签: assembly x86 nasm 32-bit

我是初学者并编写程序集程序,使用以下代码打印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 [num],eax
  2. mov ecx,num
  3. mov eax,[num]
  4. 我想知道为什么我们应该使用mov ecx,num而不是mov ecx,[num]

1 个答案:

答案 0 :(得分:4)

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

mov ecx, num相当于:

int num;
ecx = & num;

mov ecx, [num]相当于:

int num;
ecx = num;

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