过程定义
过程用PROC和ENDP伪指令来声明, 并且必须为其分配一个名字(有效的标识符) 。目前为止, 我们所有编写的程序都包含了一个main过程, 例如:
当要创建的过程不是程序的启动过程时, 就用RET指令来结束它。RET强制CPU返回到该过程被调用的地方:
过程中的标号
在默认情况下,代码标号只在其被声明的过程内可见,这个规则常常影响到跳转和循环指令.
解决这个限制的方法是声明全局标号 , 即在名字后面加双冒号(::)
就程序设计而言,跳转或循环到当前过程之外不是个好主意
USES自动压栈和出栈指定的寄存器
USES操作符与PROC伪指令一起使用,能自动压栈和出栈指定的寄存器
.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.在子过程第一条语句执行之前(在mov esi,OFFSET var之前),先PUSH指定的寄存器
2.在执行ret之前,先执行POP指定的寄存器