首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >程序集代码:理解lea命令

程序集代码:理解lea命令
EN

Stack Overflow用户
提问于 2013-06-11 16:48:54
回答 2查看 533关注 0票数 0

我找到了这个密码:

代码语言:javascript
运行
复制
lea 0x10(%edi),%esi
mov %esi,0x4(%edi)

但我真的不明白这个组合。

  1. 在lea命令的堆栈上到底发生了什么。
  2. 仅仅编写:MOV0x10(%edi)、0x4(edi%)不是更容易吗?
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-06-11 16:52:23

  1. 堆栈上什么都没发生。
  2. 可能是,但那不是一个有效的指令。mov最多支持一个内存操作数。无论如何,您的示例似乎有不同的语义(如下面@zch所提到的)。

您可以获取英特尔软件开发人员手册的副本,并阅读它的所有您想要的。

编辑:关于你的问题“用%esi写什么值? lea是计算哪个地址的偏移量?”

esi得到了edi + 0x10;这就是0x10(%edi)的意思。lea代表“加载有效地址”。也就是说,它将edi解释为指针,并将其增量为0x10,将结果存储在esi中。

票数 2
EN

Stack Overflow用户

发布于 2013-06-14 15:02:20

leamov在x86程序集中的使用与在C/C++中的使用是相同的,即:

代码语言:javascript
运行
复制
char *ptr;
...
ptr = &val;

代码语言:javascript
运行
复制
char *ptr;
...
*ptr = val;

lea计算地址、mov (或具有内存操作数的其他指令)取消(访问)它。

因此,lea在x86程序集中所做的事情--在C/C++中称为“指针算法”--不涉及内存访问。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17049544

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档