5.5过程的定义和使用

    技术2022-05-12  17

    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


    最新回复(0)