根据经验,我已经看到了,
lea rax, [2*rax + rax +1]
等同于:
mul rax, 3
inc rax
但是,LEA到底在做什么?如果在指令之前 rax = 3 ,它是否返回10存储在内存中的地址?那个地址怎么能成为10号呢?
任何帮助将不胜感激。 谢谢。
答案 0 :(得分:4)
intel-x86架构允许在进行内存访问时进行一些复杂的地址计算。这就是[]括号内的内容。
由于地址计算非常强大,因此英特尔添加了LEA指令,该指令只是存储器访问的地址计算部分。它根本不访问内存,而是将计算结果存储在寄存器中。
因为所有算术逻辑都已经在芯片中,所以这个多功能指令很便宜,所以英特尔就是这么做的。
关于使用:更容易将LEA视为可以使用有限数量的移位添加寄存器,常数和寄存器的专用ADD指令。
从技术上讲,它正在使用处理器的地址计算部分,但它永远不会访问内存。作为程序员,除了LEA不会改变标志外,它没有什么区别。