猿问
LEA指令的目的是什么?
LEA指令的目的是什么?
对我来说,这就像个古怪的MOV。它的目的是什么,我应该什么时候使用它?
缥缈止盈
浏览 1118
回答 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.
0
0
0
慕妹3146593
尽管有所有的解释,LEA是一种算术运算:LEA Rt, [Rs1+a*Rs2+b] => Rt = Rs1 + a*Rs2 + b只是它的名字对于Shift+Add操作来说是非常愚蠢的。原因已经在最高等级的答案中解释过了(也就是说,它被设计为直接映射高级别内存引用)。
0
0
0
随时随地看视频
慕课网APP
相关分类
源码
spark分组排序提取前N个值
1 回答
请问转让门店小程序需要源码吗?门店小程序有自己的源代码吗?是否要注册计算机软件著作权才可以交易?
1 回答
操作系统
windows桌面的系统图标是程序吗?和普通程序有什么不同?
1 回答
关于操作系统安装不上 的问题?
3 回答
我要回答