初學彙編,可能對lea指令很迷惑。關於lea指令,下面的文章寫的很好。
比如你用local在棧上定義了乙個區域性變數localvar,你知道實際的指令是什麼麼?一般都差不多像下面的樣子:
push ebp現在棧上就有了4各位元組的空間,這就是你的區域性變數。mov esp, ebp
sub esp, 4
接下來,你執行mov localvar, 4,那麼實際的指令又是什麼?是這樣:
mov dword ptr [ebp-4], 4invoke/call somefunc, addr localvar
實際生成的指令是:
lea eax, [ebp-4]當然,你也可以寫成:push eax
call somefunc
mov eax, ebp看到了,這裡多了一條指令。這就是lea的好處。於是,lea又多了乙個非常美妙的用途:作簡單的算術計算,特別是有了32位指令的增強定址方式,更是「如虎添翼」:sub eax, 4
push eax
call somefunc
比如你要算eax*4+ebx+3,結果放入edx,怎麼辦?
mov edx, eax現在用lea一條指令搞定:shl edx, 2
add edx, ebx
add edx, 3
lea edx, [ebx+eax*4+3]lea的英文解釋是: load effective address.(加入有效位址,開始迷惑效位址是什麼???既然是有效位址與mov ax , [address] 又有什麼不同呢?其實他們都是等效的。 後來知道實際上是乙個偏移量可以是立即數,也可以是經過四則運算的結果,更省空間,更有效率)
X86 LEA指令詳解
1.sdm指令功能描述 lea lea 總體描述 從第二個運算元 源運算元 計算有效位址,並將結果存入第乙個運算元 目的運算元 源運算元是指定了一種訪存操作的記憶體位址,目的運算元為乙個通用暫存器。位址大小和運算元大小都會影響該指令的結果,運算元大小被指令中指定的暫存器大小決定,位址大小由 段描述符...
彙編指令lea
徹底弄懂彙編指令lea lea 是位址傳送指令,在匯程式設計序中很常見。其功能就是把乙個儲存器運算元的位址傳入通用暫存器。乙個十六位通用暫存器 例如 lea ax,bx si ea 偏移量 bx si 其實就是將後者的偏移位址 送人通用暫存器中。為什麼要這樣做呢?建立乙個位址指標唄!用c語言的思維像...
彙編 LEA指令
lea指令返回間接運算元的偏移位址。由於間接運算元可能使用乙個或多個暫存器,因此其偏移值是在執行時計算的。void makearray 雖然陣列有30位元組,但按4位元組對其,esp減去了32。makearray proc push ebp mov ebp,esp sub wsp,32 lea es...