64位汇编
64 模式中,PROTO 伪指令指定程序的外部过程,示例如下:
ExitProcess PROTO ;指定外部过程,不需要参数
.code
main PROC
mov ebx, 0FFFFFFFFh
mov ecx,0 ;结束程序
call ExitProcess ;调用外部过程
main ENDP
END
32位汇编
然而在32位模式中,PROTO需要包含过程参数列表
PROTO 必须在 INVOKE 之前首先岀现。换句话说,这些伪指令的标准顺序为:
MySub PROTO ;过程原型
.
INVOKE MySub ;过程调用
.
MySub PROC ;过程实现
..
MySub ENDP
还有一种情况也是可能的:过程实现可以出现在程序的前面,先于调用该过程的 INVOKE 语句
MySub PROC ;过程定义
..
MySub ENDP
.
INVOKE MySub ;过程调用
声明函数的格式是:
函数名 proto [距离] [语言] [参数1]:数据类型,[参数2]:数据类型,......
距离可以是NEAR, FAR, NEAR 16, NEAR 32, FAR 16或FAR 32, Win 32中只有一个平坦的段, 无所谓距离, 所以在定义时是忽略的; 语言类型就是.model那些类型, 如果忽略, 则使用.model定义的默认值
对于编译器来说, 它只关心参数的数量, 参数的名称在这里是“无用”的,仅是为了可读性而设置的,可以省略掉,所以下面两句消息框函数的定义实际上是一样的: