彙編Lea 指令與 Mov 指令

2021-07-26 10:52:56 字數 1138 閱讀 6259

**:

初學彙編,可能對lea指令很迷惑。關於lea指令,下面的文章寫的很好。

比如你用local在棧上定義了乙個區域性變數localvar,你知道實際的指令是什麼麼?一般都差不多像下面的樣子:

push   ebp   

mov esp, ebp

sub esp, 4

現在棧上就有了4各位元組的空間,這就是你的區域性變數。

接下來,你執行mov localvar, 4,那麼實際的指令又是什麼?是這樣:

mov

dword

ptr[ebp-4], 4

invoke/call   somefunc,   addr   localvar
實際生成的指令是:

lea   eax,   [ebp-4] 

push eax

call somefunc

當然,你也可以寫成:

mov   eax,   ebp   

sub eax, 4

push eax

call somefunc

看到了,這裡多了一條指令。這就是lea的好處。於是,lea又多了乙個非常美妙的用途:作簡單的算術計算,特別是有了32位指令的增強定址方式,更是「如虎添翼」:

比如你要算eax*4+ebx+3,結果放入edx,怎麼辦?

mov   edx,   eax   

shl edx, 2

add edx, ebx

add edx, 3

現在用lea一條指令搞定:

lea

edx, [ebx+eax*4+3]

lea的英文解釋是: load effective address.(加入有效位址,開始迷惑效位址是什麼???既然是有效位址與mov ax , [address] 又有什麼不同呢?其實他們都是等效的。 後來知道實際上是乙個偏移量可以是立即數,也可以是經過四則運算的結果,更省空間,更有效率)

彙編Lea 指令與 Mov 指令

比如你用local在棧上定義了乙個區域性變數localvar,你知道實際的指令是什麼麼?一般都差不多像下面的樣子 push ebp mov esp,ebp sub esp,4 現在棧上就有了4各位元組的空間,這就是你的區域性變數。接下來,你執行mov localvar,4,那麼實際的指令又是什麼?是...

彙編lea 指令與 mov 指令

比如你用local在棧上定義了乙個區域性變數localvar,你知道實際的指令是什麼麼?一般都差不多像下面的樣子 push ebp mov esp,ebp sub esp,4 現在棧上就有了4各位元組的空間,這就是你的區域性變數。接下來,你執行mov localvar,4,那麼實際的指令又是什麼?是...

彙編 lea指令和mov指令

load effective address,載入有效位址,可以將有效位址傳送到指定的的暫存器。指令形式是從儲存器讀資料到暫存器,效果是將儲存器的有效位址寫入到目的運算元,簡單說,就是c語言中的 在cpu內或cpu和儲存器之間傳送字或位元組,它傳送的資訊可以從暫存器到暫存器,立即數到暫存器,立即數到...