32位組合語言中lea指令!
- 2022-08-02
由編譯器計算出data變數的地址,然後替換掉指令中出現data變數標識。
lea指令的源運算元就是一個變數標號,所以就是將變數的地址取出來,放到目的運算元中
=====================================================================
比如:
。data
hInstance dd ?
。code
lea eax,hInstance
======================================================================
編譯後:
0040102D |。 8D05 00304000 lea eax, dword ptr [403000]
意思就是將[]中的值放入eax中,[]中出現的就是hInstance的記憶體地址
LEA指令的功能是取偏移地址,例如LEA AX,[1000H],作用是將源運算元[1000H]的偏移地址1000H送至AX;
MOV指令的功能是傳送資料,例如MOV AX,[1000H],作用是將1000H作為偏移地址,定址找到記憶體單元,將該記憶體單元中的資料送至AX。
我覺得說的不對。offset是由編譯器計算的。而lea是程式執行時計算的。