汇编总结: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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值