assembly - 为什么在 LEA 中使用方括号?
问题描述
在汇编中,方括号似乎与C编程语言中[]
的含义相同。它们用于取消引用指针。取消引用指针意味着要引用特定的内存位置来读取或写入它。*
因此,在 a 的情况下使用方括号是非常合乎逻辑的MOV
。但他们也将其用于 LEA 的合乎逻辑的原因是什么?
LEA EAX, [EBP -4]
, 看起来像取消引用指针, EBP - 4
, 以引用指向的内存位置,但它不会读取该位置中包含的值,而是读取地址。
我对此有点困惑。你能给我正确的思考方式吗?与取消引用的概念有什么联系吗
?LEA
显然不是为了读取内存,而是主要指的是内存位置,而不是它的值,而是它的地址。我不希望这成为一个哲学问题。
解决方案
该LEA
指令被设计成看起来像内存访问指令——因此可以执行所有寻址模式。当然,正如您所注意到的,不同之处在于LEA
加载“有效地址”而不是从该位置加载内存值。
因此,LEA
类似于内存访问操作,但具体而言,用 C 语言来说,是获取地址——就像&a[i]
在 C 中一样。就像在 C 中一样&
,结果LEA
始终是指针大小的值,而不是我们可以获取/的实际访问存储一个字节,字等。
推荐阅读
- sql - Postgresql如何将行更改为列
- java - @TransactionScoped 和钝化
- asp.net-mvc - 如何从我的 mvc 项目中捕获 badrequest() 消息
- android - 构建应用程序时出现 CLDRLocaleDataMetaInfo 错误问题
- kubernetes - 如何为 Prometheus pod scrape 指定凭据
- reactjs - 如何使用 react-testing-library 和 jest 来模拟自定义反应钩子更新?
- python - 如何在python datetime中删除零
- sql - 如何交叉连接但在 BIGQUERY 中使用最新值
- react-native - react-native android不会在设备上运行
- youtube-api - 为什么在使用实时聊天 API 时出现页面令牌错误?