gpt4 book ai didi

assembly - LEA 指令的目的是什么?

转载 作者:行者123 更新时间:2023-12-03 03:53:39 25 4
gpt4 key购买 nike

对我来说,这似乎只是一部时髦的 MOV。它的用途是什么?我应该何时使用它?

最佳答案

正如其他人指出的那样,LEA(加载有效地址)经常被用作进行某些计算的“技巧”,但这不是它的主要目的。 x86 指令集旨在支持 Pascal 和 C 等高级语言,其中数组(尤其是整数数组或小型结构体)很常见。例如,考虑一个表示 (x, y) 坐标的结构:

struct Point
{
int xcoord;
int ycoord;
};

现在想象一下这样的陈述:

int y = points[i].ycoord;

哪里points[]Point 的数组。假设数组的基数已经在EBX中,和变量i位于EAX ,和xcoordycoord每个都是 32 位(因此 ycoord 位于结构中的偏移 4 个字节处),该语句可以编译为:

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

将登陆 yEDX 。比例因子 8 是因为每个 Point大小为 8 字节。现在考虑与“地址”运算符 & 一起使用的相同表达式:

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

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

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

这将加载 ESI 中的地址.

关于assembly - LEA 指令的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1658294/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com