亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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個字節?,F在,考慮與“地址”操作符使用的相同表達式&:

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 關注
  • 1159 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號