首页
社区
课程
招聘
[求助]关于LEA指令
发表于: 2009-1-12 00:18 3942

[求助]关于LEA指令

2009-1-12 00:18
3942
看到一片基础上说:

一个比较特别的指令是lea, 意思是"装入有效地址"(Load Effective Address), 它的操作数就是地址,所以
lea eax,[edx-02]
就是把 edx 中的值减去2再送入eax, 而不是把由[edx-02]指明的内存地址上的值放到eax. 其结果是[eax]和[ebx-02]都表示同一个地址.

那是不是说
lea eax,[edx-02]
相当于
sub edx,02
mov eax,edx
?

为什么要设计这个指令呢?有什么好处?

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 293
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
你例子里面执行完lea eax, [edx-02]之后,edx的值是不变的。所以和下面的那个不完全相等。

不知道为什么设计这个指令,不过我觉得多多益善啊,各有个的用处嘛。这个指令多好用啊,能取变量的地址,有时候还用来做加减乘除运算。
2009-1-12 00:46
0
雪    币: 2110
活跃值: (21)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
3
对于按RISC思想设计的机器,是不会有这样的指令的,但INTEL体系结构是CISC的,所以它并不追求指令集的“最小化”,而大多数指令的存在是出于“性能”因素的。

LEA指令通过AGU产生结果,不占用ALU资源,这样对于优化流水线“性能”更有优势。
2009-1-12 04:09
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
高人!
2009-1-19 09:43
0
雪    币: 398
活跃值: (343)
能力值: (RANK:650 )
在线值:
发帖
回帖
粉丝
5
当你想计算eax+edx并且又不想改变他们时,可以
LEA ECX, [EAX+EDX]
2009-1-19 10:02
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
感觉2楼说的是正解,可以不改变edx的值。
这样的话,执行循环也方便很多吧!
2009-1-19 13:45
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
优化流水线“性能”更有优势,支持
2009-1-19 14:37
0
雪    币: 71
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
8
最近看到 书上说 一个以前没注意的问题
LEA指令 简单说 是取指针地址指令

比如
一个地址变量  XXX
lea eax,XXX
是取这个XXX的地址  也就是存放地址数据的地址

不知道这样理解对不对了
2009-1-19 15:49
0
雪    币: 254
活跃值: (126)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
9
LEA指令不影响标志位
2009-1-19 16:15
0
游客
登录 | 注册 方可回帖
返回
//