main PROC..main ENDP
当在程序启动过程之外创建一个过程时,就用 RET 指令来结束它。RET 强制 CPU 返回到该过程被调用的位置:sample PROC . . retsample ENDP
过程中的标号默认情况下,标号只在其被定义的过程中可见。这个规则常常影响到跳转和循环指令。在下面的例子中,名为 Destination 的标号必须与 JMP 指令位于同一个过程中:jmp Destination
解决这个限制的方法是定义全局标号,即在名字后面加双冒号 (::)。Destination::
就程序设计而言,跳转或循环到当前过程之外不是个好主意。过程用自动方式返回并调整运行时堆栈。如果直接跳出一个过程,则运行时堆栈很容易被损坏。示例:三个整数求和现在创建一个名为 SumOf 的过程计算三个 32 位整数之和。假设在过程调用之前,整数已经分配给 EAX、EBX 和 ECX。过程用 EAX 返回和数:SumOf PROC add eax,ebx add eax,ecx retSumOf ENDP过程说明要培养的一个好习惯是为程序添加清晰可读的说明。下面是对放在每个过程开头的信息的一些建议:对过程实现的所有任务的描述。输入参数及其用法的列表,并将其命名为 Receives ( 接收 )。如果输入参数对其数值有特殊要求,也要在这里列岀来。对过程返回的所有数值的描述,并将其命名为 Returns ( 返回 )。所有特殊要求的列表,这些要求被称为先决条件 (preconditions),必须在过程被调用之前满足。列表命名为 Requires。例如,对一个画图形线条的过程来说,一个有用的先决条件是该视频显示适配器必须已经处于图形模式。上述选择的描述性标号,如 ReceivesReturns 和 Requires,不是绝对的;其他有用的名字也常常被使用。有了这些思想,现在对 SumOf 过程添加合适的说明:;-------------------------------------------------------; sumof; 计算 3 个 32 位整数之和并返回和数。; 接收:EAX、EBX和ECX为3个整数,可能是有符号数,也可能是无符号数。; 返回:EAX=和数;------------------------------------------------------SumOf PROC add eax,ebx add eax,ecx retSumOf ENDP用高级语言,如 C 和 C++,编写的函数,通常用 AL 返回 8 位的值,用 AX 返回 16 位的值,用 EAX 返回 32 位的值。