1. 程式人生 > >匯編中中括號[]作用以及lea和mov指令的區別

匯編中中括號[]作用以及lea和mov指令的區別

article truct err csdn 指針 valid tail 支持 art

現在總結一下:其中牽扯到lea指令,mov指令,[]

一.lea指令:
對於寄存器來說:第二個操作數是寄存器必須要加[],不然報錯,這裏lea就是取[寄存器]的值,如:
mov eax,2
lea ebx,[eax];執行後ebx=2
mov ebx,eax;等同於上句
lea ebx,eax;編譯器報錯: error A2070: invalid instruction operands

對於變量來說加不加[]都是一樣的效果,都是取變量的地址,相當於指針
如:
num dword 2
lea ebx,num
lea eax,[num]; eax為num的地址,如eax=4206598,隨程序不同不同,這時ebx==eax


二.mov指令:
對於變量來說
num dword 2
mov eax,2
mov ebx,num
mov ecx,[num];執行完ebx==ecx==2


對寄存器
mov ebx,eax;ebx==2
mov ecx,[eax];可能會報錯,因為這裏翻譯成匯編是mov ecx,DS:[eax]

總的說來加不加中括號[]的區別就是:
lea對變量沒有影響是取地址,對寄存器來說加[]時取值,第二操作數不加[]非法

mov對變量來說沒有影響是取值,對寄存器來說是加[]時取地址,第二操作數不加[]是取值

還有一點這裏順便說下,看有的教程說mov指令不支持mov ebx,[eax+2*eax......什麽亂七八糟的表達式]歸根結底就是對於mov來說當第二個操作數是寄存器的時候如果加上[]就是尋址了....

https://blog.csdn.net/spygg/article/details/8760310

匯編中中括號[]作用以及lea和mov指令的區別