来自this answer:
lea eax, [eax*4] == shl eax, 2 ; but without setting flags
因此,我认为lea
在此处加载eax
的值(不是地址),而lea
执行以下操作:
eax
<<2
eax
但是this answer说:
的项目的指针
LEA
加载指向您正在寻址
两者是否冲突?如果lea
只能Load Effective Address
,它的价值如何shl
?我在哪里理解错了?
答案 0 :(得分:0)
“lea eax,[eax * 4]”中的lea是否加载了值?
不,不是:
我认为让你感到困惑的是括号'[]'
[1234]
是“地址1234处的值”,其“有效地址”为1234(括号已删除)
所以LEA EAX, [4*EAX]
加载[4*EAX]
的有效地址4*EAX
EAX
的内容(当然是读取),[4xEAX]
内存中的值不是
实际上LEA <reg>, [something]
与MOV <reg>, something
非常相似,而LEA
可以做一些基本的算术(x2,x4,x8,添加偏移量)和MOV
不能