百度競(jìng)價(jià)排名點(diǎn)擊軟件seo技術(shù)培訓(xùn)廣東
過程定義
過程用PROC和ENDP偽指令來聲明, 并且必須為其分配一個(gè)名字(有效的標(biāo)識(shí)符) 。目前為止, 我們所有編寫的程序都包含了一個(gè)main過程, 例如:
當(dāng)要?jiǎng)?chuàng)建的過程不是程序的啟動(dòng)過程時(shí), 就用RET指令來結(jié)束它。RET強(qiáng)制CPU返回到該過程被調(diào)用的地方:
過程中的標(biāo)號(hào)
在默認(rèn)情況下,代碼標(biāo)號(hào)只在其被聲明的過程內(nèi)可見,這個(gè)規(guī)則常常影響到跳轉(zhuǎn)和循環(huán)指令.
解決這個(gè)限制的方法是聲明全局標(biāo)號(hào)?, 即在名字后面加雙冒號(hào)(::)?
就程序設(shè)計(jì)而言,跳轉(zhuǎn)或循環(huán)到當(dāng)前過程之外不是個(gè)好主意
USES自動(dòng)壓棧和出棧指定的寄存器
?
USES操作符與PROC偽指令一起使用,能自動(dòng)壓棧和出棧指定的寄存器
.386
.model flat,stdcall
option casemap:none
.stack 4096.data
var DWORD 1010h,2020h,3030h,4040hExitProcess PROTO,dwExitCode:DWORD .code ArraySum PROC USES esi ecx ;子過程
mov esi,OFFSET var
mov ecx,4040h
add ecx,2
ret
ArraySum ENDPmain PROC mov esi,1010hmov ecx,2020hcall ArraySumINVOKE ExitProcess,0
main ENDP
END main
說明:1.在子過程第一條語句執(zhí)行之前(在mov esi,OFFSET var之前),先PUSH指定的寄存器
? ? ? ? 2.在執(zhí)行ret之前,先執(zhí)行POP指定的寄存器