首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >精益装配指令

精益装配指令
EN

Stack Overflow用户
提问于 2012-02-05 21:40:06
回答 2查看 27.3K关注 0票数 11

我只想确定我读得对:

代码语言:javascript
复制
movl 12(%ebp), %edx
leal (%edx, %edx, 4), %eax

我读第一行为:edx = [epb + 12],第二行为:eax = edx + edx*4

有人能澄清吗?

另外,如果我有以下两行:

代码语言:javascript
复制
leal (%edx, %edx, 4), %eax
leal (%edx, %edx, 2), %eax

一旦执行了第二行,eax寄存器会被覆盖吗?

eax = edx + edx*4把地址乘以4?或者地址的内容是4?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-05 21:45:23

你是对的。LEA指令用于加载()有效地址,如果不需要这些标志,则可以用于地址算法,有时也可以用于普通算法。

票数 8
EN

Stack Overflow用户

发布于 2012-02-05 21:45:38

指令movl 12(%ebp), %edx的意思是:edx = [ebp + 12]。这是对地址ebp + 12的内存引用(读取操作),其内容(双字)被读到edx寄存器。

指令leal (%edx, %edx, 4), %eax的意思是:eax = edx * 5 (这是eax = edx + edx * 4的简化)。leal指令不执行内存引用。它只对寄存器执行算术。

作为对第二个问题的回答:是的,eax将被覆盖,因为leal (%edx, %edx, 2), %eax指令的意思是与第一个指令eax = edx * 5不同的eax = edx * 3

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

https://stackoverflow.com/questions/9153282

复制
相关文章

相似问题

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