“mov eax, [num]"之间的区别和“mov eax, num" [英] Difference between "mov eax, [num]" and "mov eax, num"

查看:29
本文介绍了“mov eax, [num]"之间的区别和“mov eax, num"的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

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]

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

I want to know why we should use mov ecx,num rather than mov ecx,[num]

推荐答案

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

If you are familiar with C/C++, here is an explanation.

mov ecx, num 等价于:

int num;
ecx = & num;

<小时>

mov ecx, [num] 等价于:

int num;
ecx = num;

<小时>

这里,之所以出现mov ecx, num是因为你调用的是系统函数int 0x80,它要求ecx包含您号码的地址.所以应该是这样的.


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.

这篇关于“mov eax, [num]"之间的区别和“mov eax, num"的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆