彙編指令lea

2021-06-14 10:33:12 字數 952 閱讀 3135

徹底弄懂彙編指令lea

lea 是位址傳送指令,在匯程式設計序中很常見。

其功能就是把乙個儲存器運算元的位址傳入通用暫存器。(乙個十六位通用暫存器)

例如:lea ax,[bx][si]

ea(偏移量)=(bx)+(si)

其實就是將後者的偏移位址 送人通用暫存器中。

為什麼要這樣做呢?

建立乙個位址指標唄!(用c語言的思維像是這樣的,不過彙編裡是沒有指標的概念的,指標,定址唄!)

讓我們來反彙編一段簡單的c程式:

#include

void main()

在vc中對應的彙編**:

看得出來,變數x1對應dword ptr [ebp-4]

int *p1;

p1=&x1;

對應lea eax,[ebp-4]

mov dword ptr [ebp-8],eax

將x1的位址存放在dword ptr [ebp-8]中。

而printf("%d",*p1);使用指標變數來輸出。

對應mov ecx,dword ptr [ebp-8]

mov edx,dword ptr [ecx]

dword ptr [ebp-8] 中已儲存了變數x1的偏移位址。

先將這個位址放入通用暫存器ecx中。

而後借助dword ptr [ecx] 找到x1。

如果不用指標:

#include

void main()

對應的彙編**:

相比較著看,其意義就不言而喻了吧!

哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈 

彙編 LEA指令

lea指令返回間接運算元的偏移位址。由於間接運算元可能使用乙個或多個暫存器,因此其偏移值是在執行時計算的。void makearray 雖然陣列有30位元組,但按4位元組對其,esp減去了32。makearray proc push ebp mov ebp,esp sub wsp,32 lea es...

彙編Lea 指令與 Mov 指令

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

彙編 lea指令和mov指令

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