方括号?为什么在LEA中使用这些?

问题描述 投票:0回答:1

组装起来,方括号似乎与C中的*含义相同。它们用于取消引用指针。取消引用指针意味着要引用特定的内存位置来读取或写入它。因此,在MOV的情况下使用方括号是很合逻辑的。但是为什么他们也将其用于LEA的逻辑原因是什么。 LEA EAX [EBP -4]看起来像是取消引用指针ebp-4来引用指向的内存位置,但是它不会读取该位置中包含的值,而是读取地址。我对此有些困惑。您能给我正确的方式考虑一下吗?LEA与取消引用的概念有关系吗?显然不是要读取内存,而是主要是指内存的位置不是其值,而是其地址。我不希望这成为一个哲学问题。

assembly syntax x86 memory-address addressing-mode
1个回答
2
投票

LEA指令被设计为看起来像内存访问指令-因此可以执行所有的addressing modes。当然,您需要注意的区别是LEA加载“有效地址”而不是该位置的内存值。

因此,LEA与内存访问操作相似,但具体来说,用C表示,是在获取地址-就像C中的&a[i]。像在C中使用&一样,LEA的结果始终是指针大小的值,而不是实际访问权限,我们可以在其中获取/存储字节,字等。

© www.soinside.com 2019 - 2024. All rights reserved.