詳解匯編語(yǔ)言中中括號(hào)[]作用及l(fā)ea和mov指令的區(qū)別
匯編中中括號(hào)[]作用及l(fā)ea和mov指令的區(qū)別
現(xiàn)在總結(jié)一下:其中牽扯到lea指令,mov指令,[]
一.lea指令:
對(duì)于寄存器來(lái)說(shuō):第二個(gè)操作數(shù)是寄存器必須要加[],不然報(bào)錯(cuò),這里lea就是取[寄存器]的值,如:
mov eax,2
lea ebx,[eax];執(zhí)行后ebx=2
mov ebx,eax;等同于上句
lea ebx,eax;編譯器報(bào)錯(cuò): error A2070: invalid instruction operands
對(duì)于變量來(lái)說(shuō)加不加[]都是一樣的效果,都是取變量的地址,相當(dāng)于指針
如:
num dword 2
lea ebx,num
lea eax,[num]; eax為num的地址,如eax=4206598,隨程序不同不同,這時(shí)ebx==eax
二.mov指令:
對(duì)于變量來(lái)說(shuō)
num dword 2
mov eax,2
mov ebx,num
mov ecx,[num];執(zhí)行完ebx==ecx==2
對(duì)寄存器
mov ebx,eax;ebx==2
mov ecx,[eax];可能會(huì)報(bào)錯(cuò),因?yàn)檫@里翻譯成匯編是mov ecx,DS:[eax]
總的說(shuō)來(lái)加不加中括號(hào)[]的區(qū)別就是:
lea對(duì)變量沒(méi)有影響是取地址,對(duì)寄存器來(lái)說(shuō)加[]時(shí)取值,第二操作數(shù)不加[]非法
mov對(duì)變量來(lái)說(shuō)沒(méi)有影響是取值,對(duì)寄存器來(lái)說(shuō)是加[]時(shí)取地址,第二操作數(shù)不加[]是取值
還有一點(diǎn)這里順便說(shuō)下,看有的教程說(shuō)mov指令不支持mov ebx,[eax+2*eax......什么亂七八糟的表達(dá)式]歸根結(jié)底就是對(duì)于mov來(lái)說(shuō)當(dāng)?shù)诙€(gè)操作數(shù)是寄存器的時(shí)候如果加上[]就是尋址了....
ps:匯編中中括號(hào)的作用[]
在匯編中[]的作用不是單純的c語(yǔ)言中指針類似,可以分為兩種情況,對(duì)于變量來(lái)說(shuō)[var]和var作用是一樣的
但是對(duì)于寄存器來(lái)說(shuō)就有區(qū)別了,[eax]是eax的地址(這里是c語(yǔ)言中的指針) 而不加中括號(hào)的eax就是c語(yǔ)言中的變量值了,理解有謬誤之處望指正
.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
總結(jié)
以上所述是小編給大家介紹的匯編語(yǔ)言中中括號(hào)[]作用及l(fā)ea和mov指令的區(qū)別,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺(jué)得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!
相關(guān)文章
匯編用串檢測(cè)scasb尋找數(shù)的位置實(shí)現(xiàn)
這篇文章主要介紹了匯編用串檢測(cè)scasb尋找數(shù)的位置實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02用匯編語(yǔ)言實(shí)現(xiàn)從1加到100的方法(1+2+...+100)
這篇文章主要介紹了用匯編語(yǔ)言實(shí)現(xiàn)從1加到100的方法(1+2+...+100),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01純匯編實(shí)現(xiàn)打飛機(jī)小游戲的示例代碼
這篇文章主要介紹了純匯編實(shí)現(xiàn)打飛機(jī)小游戲的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01