1.过程的定义:
sample PROC . . . ret sample ENDP
2.创建一个名为SumOf的过程来计算3个32位整数的和,假设合适的整数已经放在了EAX、EBX和ECX中了。
SumOf PROC add eax,ebx add eax,ecx ret SumOf ENDP
3.为程序添加清晰易读的文档。比如:
a过程完成的任务的描述。
b输入参数的清单及使用方法,用类似Receives这样的单词表明。如果某些参数对输入值有特殊的要求也要一一列出。
c过程返回值的描述,可以用类似于Returns这样的词表明
d列出特殊的要求,也叫前提。
;---------------------------------------------------------- ;Calculates and returns the sum of three 32-bit integers ;Recives:EAX,EBx,ECX,the three integers.May be signed or ;unsigned ;Returns:EAX=sum ;---------------------------------------------------------- SumOf PROC add eax,ebx add eax,ecx ret SumOf ENDP
4.用call来调用过程,其实call和ret是配套使用的。调用过程可以嵌套
5.可以使用寄存器向过程中传递数据
6.写对整数数组求和的完整程序
.data array DWORD 10000h,20000h,30000h,40000h,50000h theSum DWORD ? .code main PROC mov es,offset array mov ecx,LENGTHOF array;equal to by ($-array)/4 call ArraySum mov theSum ,eax main ENDP ArraySum PROC push esi push ecx mov eax,0 l1: add eax,[esi] add esi,TYPE DWORD loop l1 pop ecx pop esi ret ArraySum ENDP
7.uses操作符:
和PROC伪指令配套使用的USES操作符允许列出被过程修改的所有寄存器,他指使编译器做两件事:首先,在过程的开始出生成PUSH指令在堆栈上保存的寄存器;其次,在过程的结束处生成pop指令恢复这些寄存器的值。
类似这样:
ArraySum PROC USES esi ecx mov eax,0 L1: add eax,[esi] add esi,4 loop L1 ret ArraySum ENDP
汇编器生成的相应代码显示了使用USES操作符的效果
ArraySum PROC push esi push ecx mov eax,0 L1: add eax,[esi] add esi,4 loop L1 pop ecx pop esi ret ArraySum ENDP