詳解匯編語言中中括號[]作用及l(fā)ea和mov指令的區(qū)別
匯編中中括號[]作用及l(fā)ea和mov指令的區(qū)別
現(xiàn)在總結一下:其中牽扯到lea指令,mov指令,[]
一.lea指令:
對于寄存器來說:第二個操作數(shù)是寄存器必須要加[],不然報錯,這里lea就是取[寄存器]的值,如:
mov eax,2
lea ebx,[eax];執(zhí)行后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];執(zhí)行完ebx==ecx==2
對寄存器
mov ebx,eax;ebx==2
mov ecx,[eax];可能會報錯,因為這里翻譯成匯編是mov ecx,DS:[eax]
總的說來加不加中括號[]的區(qū)別就是:
lea對變量沒有影響是取地址,對寄存器來說加[]時取值,第二操作數(shù)不加[]非法
mov對變量來說沒有影響是取值,對寄存器來說是加[]時取地址,第二操作數(shù)不加[]是取值
還有一點這里順便說下,看有的教程說mov指令不支持mov ebx,[eax+2*eax......什么亂七八糟的表達式]歸根結底就是對于mov來說當?shù)诙€操作數(shù)是寄存器的時候如果加上[]就是尋址了....
ps:匯編中中括號的作用[]
在匯編中[]的作用不是單純的c語言中指針類似,可以分為兩種情況,對于變量來說[var]和var作用是一樣的
但是對于寄存器來說就有區(qū)別了,[eax]是eax的地址(這里是c語言中的指針) 而不加中括號的eax就是c語言中的變量值了,理解有謬誤之處望指正
.386 .model flat, stdcall option casemap :none include windows.inc include user32.inc include kernel32.inc include masm32.inc includelib user32.lib includelib kernel32.lib includelib masm32.lib .data buffer byte "%d",0 num dword 12 .data? lpszSize db 50 dup(?) .CODE START: lea ebx,[num] mov eax,[ebx] mov eax,num mov eax,[num] invoke wsprintf,offset lpszSize,offset buffer,eax invoke MessageBox,NULL, offset lpszSize, offset lpszSize,MB_OK invoke ExitProcess,0 end START
總結
以上所述是小編給大家介紹的匯編語言中中括號[]作用及l(fā)ea和mov指令的區(qū)別,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
如果你覺得本文對你有幫助,歡迎轉載,煩請注明出處,謝謝!
相關文章
匯編用串檢測scasb尋找數(shù)的位置實現(xiàn)
這篇文章主要介紹了匯編用串檢測scasb尋找數(shù)的位置實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-02-02用匯編語言實現(xiàn)從1加到100的方法(1+2+...+100)
這篇文章主要介紹了用匯編語言實現(xiàn)從1加到100的方法(1+2+...+100),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-01-01