zoukankan      html  css  js  c++  java
  • 汇编指令:lea

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

    leaw #2个字节
    leal #4个字节
    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 

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

      rbx * 3

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

      rbx * 3 - 1

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

    什么时候用lea指令:

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

    注意事项:

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

    原文连接:https://my.oschina.net/guonaihong/blog/508907

  • 相关阅读:
    springmvc
    POJ 3683 Priest John's Busiest Day
    POJ 3678 Katu Puzzle
    HDU 1815 Building roads
    CDOJ UESTC 1220 The Battle of Guandu
    HDU 3715 Go Deeper
    HDU 3622 Bomb Game
    POJ 3207 Ikki's Story IV
    POJ 3648 Wedding
    HDU 1814 Peaceful Commission
  • 原文地址:https://www.cnblogs.com/YangARTuan/p/11628591.html
Copyright © 2011-2022 走看看