LEA指令的目的是什么?

LEA指令的目的是什么?

对我来说,这就像个古怪的MOV。它的目的是什么,我应该什么时候使用它?



缥缈止盈
浏览 1062回答 4
4回答

森林海

正如其他人指出的那样,LEA(LOAD有效地址)经常被用作进行某些计算的“技巧”,但这并不是它的主要目的。x86指令集是为了支持Pascal和C这样的高级语言而设计的,其中数组-特别是INT或小型结构的数组-是常见的。例如,考虑表示(x,y)坐标的结构:struct Point {      int xcoord;      int ycoord; };现在想象一下这样的语句:int y = points[i].ycoord;哪里points[]的数组Point..假设数组的基已经在EBX,和变量i在EAX,和xcoord和ycoord是每个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.

慕妹3146593

尽管有所有的解释,LEA是一种算术运算:LEA Rt, [Rs1+a*Rs2+b] =>  Rt = Rs1 + a*Rs2 + b只是它的名字对于Shift+Add操作来说是非常愚蠢的。原因已经在最高等级的答案中解释过了(也就是说,它被设计为直接映射高级别内存引用)。
打开App,查看更多内容
随时随地看视频慕课网APP