lea

ea指令变种(按大小分类):

  1.  
    leaw #2个字节
  2.  
    leal #4个字节
  3.  
    leaq #8个字节

lea的用法:

leaq a(b, c, d), %rax

首先lea指令是mov指令的变种,据说,lea指令是x86体系结构中,是一条最古老但是从某个方面来讲又是最神奇的指令。

表面上看,它做的事情非常简单,根据括号里的源操作数来计算地址,然后把地址加载到目标寄存器中。

例如:leaq a(b, c, d), %rax 先计算地址a + b + c * d,然后把最终地址载到寄存器rax中。

最逗的是leaq不引用源操作数里的寄存器,只是单纯的计算。那这样的完全可以把它当作乘法指令使用。

例如:

  rbx * 2 

  1.  
    movq $8, %rbx
  2.  
    leaq (, %rbx, 2), %rax

  rbx * 3

  1.  
    movq $8, %rbx
  2.  
    leaq (%rbx, %rbx, 2), %rax

  rbx * 3 - 1

  1.  
    movq $8, %rbx
  2.  
    leaq -1(%rbx, %rbx, 2), %rax

什么时候用lea指令:

    在打算用五六条指令来完成某个乘法运算之前,看看能否通过两三条lea指令来代替它。

注意事项:

    d的取值范围是1,2,4,8(64位cpu)

posted @   zJanly  阅读(326)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示