“mov eax, [num]"之间的区别和“mov eax, num" [英] Difference between "mov eax, [num]" and "mov eax, num"
本文介绍了“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:
- mov [num], eax
- mov ecx , num
- 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屋!
查看全文