mov offset和lea的區別
全局變量取地址用mov offset
例如:mov dword ptr [ebp-14h],offset ConsoleTest+0x94620(00494620)
局部變量取地址用lea
例如:
0042fb24 8d45f8 lea eax,[ebp-8]
0042fb27 8945ec mov dword ptr [ebp-14h],eax//EBP-8這個變量的地址存入變量[ebp-14h]
其實區別就是offset的第二個參數是地址,lea第二個參數是寄存器。
LEA SI,STR與MOV SI,OFFSET STR最大區別在於OFFSET STR是一條偽指令,與SEG DATA之類相似,它在編譯和連接過程被賦給一個值,你可以把它看成一個立即數,LEA SI,STR是把STR的內存指針賦給SI,你可以把它看成內存變量。另外,MOV SI,OFFSET STR是一條2字節立即尋址指令,LEA SI,STR是一條3字節內存尋址指令,后者雖然有比較靈活的尋址方式,但前者具有更小的容量和更快的執行速度,推薦盡可能使用MOV SI,OFFSET STR。當然,OFFSET后面只能是標號或變量名。