首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >"mov eax,[num]“和"mov eax,num”的区别

"mov eax,[num]“和"mov eax,num”的区别
EN

Stack Overflow用户
提问于 2016-02-17 17:29:33
回答 1查看 16.6K关注 0票数 4

我是一个初学者,并编写汇编程序来打印数字从1到9使用以下代码:

代码语言:javascript
复制
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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-17 17:38:24

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

mov ecx, num相当于:

代码语言:javascript
复制
int num;
ecx = & num;

mov ecx, [num]相当于:

代码语言:javascript
复制
int num;
ecx = num;

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

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35463649

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档