为了账号安全,请及时绑定邮箱和手机立即绑定

LEA指令的目的是什么?

LEA指令的目的是什么?

缥缈止盈 2019-06-01 15:30:01
LEA指令的目的是什么?对我来说,这就像个古怪的MOV。它的目的是什么,我应该什么时候使用它?
查看完整描述

4 回答

?
森林海

TA贡献2011条经验 获得超2个赞

正如其他人指出的那样,LEA(LOAD有效地址)经常被用作进行某些计算的“技巧”,但这并不是它的主要目的。x86指令集是为了支持Pascal和C这样的高级语言而设计的,其中数组-特别是INT或小型结构的数组-是常见的。例如,考虑表示(x,y)坐标的结构:

struct Point
{
     int xcoord;
     int ycoord;
};

现在想象一下这样的语句:

int y = points[i].ycoord;

哪里points[]的数组Point..假设数组的基已经在EBX,和变量iEAX,和xcoordycoord是每个32位(所以ycoord在结构中的偏移量为4个字节)时,可以将此语句编译为:

MOV EDX, [EBX + 8*EAX + 4]    ; right side is "effective address"

将登陆y在……里面EDX..8的比例因子是因为每个Point大小为8个字节。现在,考虑与“地址”操作符使用的相同表达式&:

int *p = &points[i].ycoord;

在这种情况下,您不希望ycoord但它的地址。在那里LEA(加载有效地址)进来。而不是MOV,编译器可以生成

LEA ESI, [EBX + 8*EAX + 4]

中加载地址的ESI.


查看完整回答
反对 回复 2019-06-01
?
慕妹3146593

TA贡献1820条经验 获得超9个赞

尽管有所有的解释,LEA是一种算术运算:

LEA Rt, [Rs1+a*Rs2+b] =>  Rt = Rs1 + a*Rs2 + b

只是它的名字对于Shift+Add操作来说是非常愚蠢的。原因已经在最高等级的答案中解释过了(也就是说,它被设计为直接映射高级别内存引用)。


查看完整回答
反对 回复 2019-06-01
  • 4 回答
  • 0 关注
  • 1043 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信