gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 00:49:50 33 4
gpt4 key购买 nike

我是一个初学者,正在编写汇编程序以使用以下代码打印从 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]

我想知道为什么我们应该使用 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包含您号码的地址。所以应该是这样的。

关于assembly - "mov eax, [num]"和 "mov eax, num"之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35463649/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com