首页 > 解决方案 > 为什么在 LEA 中使用方括号?

问题描述

在汇编中,方括号似乎与C编程语言中[]的含义相同。它们用于取消引用指针。取消引用指针意味着要引用特定的内存位置来读取或写入它。*

因此,在 a 的情况下使用方括号是非常合乎逻辑的MOV。但他们也将其用于 LEA 的合乎逻辑的原因是什么?

LEA EAX, [EBP -4], 看起来像取消引用指针, EBP - 4, 以引用指向的内存位置,但它不会读取该位置中包含的值,而是读取地址。

我对此有点困惑。你能给我正确的思考方式吗?与取消引用的概念有什么联系吗
LEA显然不是为了读取内存,而是主要指的是内存位置,而不是它的值,而是它的地址。我不希望这成为一个哲学问题。

标签: assemblysyntaxx86memory-addressaddressing-mode

解决方案


LEA指令被设计成看起来像内存访问指令——因此可以执行所有寻址模式。当然,正如您所注意到的,不同之处在于LEA加载“有效地址”而不是从该位置加载内存值。

因此,LEA类似于内存访问操作,但具体而言,用 C 语言来说,是获取地址——就像&a[i]在 C 中一样。就像在 C 中一样&,结果LEA始终是指针大小的值,而不是我们可以获取/的实际访问存储一个字节,字等。


推荐阅读