文档章节

汇编总结:lea指令

guonaihong
 guonaihong
发布于 2015/09/20 21:39
字数 296
阅读 7910
收藏 4

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

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)

© 著作权归作者所有

上一篇: SIGXFSZ信号
下一篇: 汇编总结:mov指令
guonaihong

guonaihong

粉丝 6
博文 83
码字总数 27591
作品 1
徐汇
程序员
私信 提问
C++11新特性中的匿名函数Lambda表达式的汇编实现分析(三)

C++11新特性中的匿名函数Lambda表达式的汇编实现分析(一) C++11新特性中的匿名函数Lambda表达式的汇编实现分析(二) Lambda表达式中较复杂的形式如下: [ capture ] ( params ) -> ret { ...

Micooz
2014/06/10
6.4K
15
汇编 易混淆指令lea offset

lea 是机器指令,offset 是伪指令。 LEA BX, BUFFER ;在实际执行时才会将变量buffer的地址放入bx MOV BX, OFFSET BUFFER ;在编译时就已经计算出buffer的地址为4300(假设),然后将上句替换为:...

---dgw博客
12/05
0
0
求汇编高手求助。。有个 程序帮我看看吧~~~~助人自助加我QQ 539957539 教教我吧很急

求汇编高手求助。。有个 程序帮我看看吧~~~~助人自助 DSEG SEGMENT STRING1 DB 'I`M CHINESE$' STRING2 DB 'I`M CHINESE MAN$' YES DB 'MATCH', 0DH, 0AH, '$' NO DB 'NO MATCH', 0DH, 0AH,......

黎祥
2011/06/08
305
6
Linux的原子操作与同步机制

并发问题 现代操作系统支持多任务的并发,并发在提高计算资源利用率的同时也带来了资源竞争的问题。例如C语言语句“count++;”在未经编译器优化时生成的汇编代码为。 当操作系统内存在多个进...

tantexian
2016/12/18
46
0
关于vs中一些高阶调试功能的使用

基础知识 8086CPU的指令,可以处理两种尺寸的数据,byte和word。所以在机器指令中要指明,指令进行的是字操作还是字节操作。对于这个问题,汇编语言中用一下方法处理。当然i3不是8086CPU,但...

zray4u
2016/07/10
11
0

没有更多内容

加载失败,请刷新页面

加载更多

如何管stderr,而不是stdout?

我有一个要写入信息的程序stdout和stderr ,我需要grep通过什么是未来标准错误 ,而忽视标准输出 。 我当然可以分2步完成: command > /dev/null 2> temp.filegrep 'something' temp.file...

技术盛宴
26分钟前
5
0
centos7.5上通过docker安装并运行mysql5.7

1. docker pull mysql:5.7 2. docker run --name mysql5.7 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7...

Ryub
29分钟前
6
0
什么是比赛条件?

在编写多线程应用程序时,遇到的最常见问题之一是竞争条件。 我对社区的问题是: 什么是比赛条件? 您如何检测到它们? 您如何处理它们? 最后,如何防止它们发生? #1楼 当设备或系统试图同...

javail
41分钟前
6
0
SpringMVC源码分析-DispatcherServlet-init方法分析

上一篇:SpringMVC源码分析-DispatcherServlet实例化干了些什么 先吐槽一下。。。写了两小时的博客突然被俺家小屁孩按了刷新,东西不见了,建议OSCHINA能够自动定时保存啊。让我先安静一下。...

特拉仔
48分钟前
7
0
python协程 生成器

协程,又称微线程,纤程。英文名Coroutine。 线程是系统级别的它们由操作系统调度,而协程则是程序级别的由程序根据需要自己调度。在一个线程中会有很多函数,我们把这些函数称为子程序,在子...

沙门行道
59分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部