LEA如何在x86中进行计算?

时间:2017-11-07 08:57:39

标签: assembly x86

根据经验,我已经看到了,

lea rax, [2*rax + rax +1]

等同于:

mul rax, 3
inc rax

但是,LEA到底在做什么?如果在指令之前 rax = 3 ,它是否返回10存储在内存中的地址?那个地址怎么能成为10号呢?

任何帮助将不胜感激。 谢谢。

1 个答案:

答案 0 :(得分:4)

intel-x86架构允许在进行内存访问时进行一些复杂的地址计算。这就是[]括号内的内容。

由于地址计算非常强大,因此英特尔添加了LEA指令,该指令只是存储器访问的地址计算部分。它根本不访问内存,而是将计算结果存储在寄存器中。

因为所有算术逻辑都已经在芯片中,所以这个多功能指令很便宜,所以英特尔就是这么做的。

关于使用:更容易将LEA视为可以使用有限数量的移位添加寄存器,常数和寄存器的专用ADD指令。

从技术上讲,它正在使用处理器的地址计算部分,但它永远不会访问内存。作为程序员,除了LEA不会改变标志外,它没有什么区别。

相关问题