gpt4 book ai didi

assembly - x86:使用内存/交换值?

转载 作者:行者123 更新时间:2023-12-02 09:33:17 25 4
gpt4 key购买 nike

我刚开始学习 x86 的系统类(class),有几个问题:

1) 假设我引用一段内存:

(%eax)

圆括号表示我正在访问内存,%eax 表示我想访问内存中的那个特定地址。因此,如果寄存器 %eax 存储 0x104,则 (%eax) 将返回存储在内存位置 0x104 的任何内容。这是正确的吗?

2) 假设我想交换存储在 (%eax)(%ebx) 中的值。这是我的尝试:

//store values in registers
movl (%eax) eax
movl (%ebx) ebx

//store values in opposite registers from where they came originally
movl ebx (%eax)
movl eax (%ebx)

这样看起来对吗?

感谢您的帮助,布莱曼

最佳答案

这不可能是正确的。

EAXEBX 开始包含内存位置。然后取消引用内存,将实际值移动到同名寄存器中:

 MOVL (%EAX), EAX
MOVL (%EBX), EBX

EAXEBX 不再包含内存地址;它们现在包含来自这些地址的内容。当您下次执行此操作时:

 MOVL EBX, (%EAX)
MOVL EAX, (%EBX)

您将这些内存位置的值存储到恰好等于那些值的任何内存位置,这几乎肯定不是您想要的,并且几乎可以保证不会交换这些值。

如果内存位置本身存储内存位置的值,这工作的唯一方法,这没有多大意义。

关于assembly - x86:使用内存/交换值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30495901/

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