MASM 的Microsoft运算符参考在"杂项"部分中显示::
运算符。
此项的链接将为;;
运算符打开页面。
我不是这是表中的错误名称还是项目上的错误链接。还有其他几个项目确实有错误的链接。
MASM 有::
运算符吗?它有什么作用?
是的,确实如此。
我在一本旧的 TASM 4 手册中找到了对它的引用(印刷文档的第 124 页,PDF 的第 135 页(。
它用于定义范围比定义它们的过程更宽的标签。
考虑:
foo PROC
lbl:
ret
foo ENDP
bar PROC
jmp lbl ;Undefined symbol lbl
bar ENDP
这不会在 MASM 中组装lbl
因为它在另一个过程中。
但是,这:
foo PROC
lbl::
ret
foo ENDP
bar PROC
jmp lbl ;Fine
bar ENDP
确实如此。
据我所知,TASM/NASM 中的标签行为不同,它们没有范围(TASM 可以模拟 MASM(。
1996 年出版Microsoft的 MASM Programmer's Guide 6.1 一书揭示了一些额外的语义。
双冒号::
可用于将从寄存器值生成的 far 指针作为过程调用中的参数传递。第157页描述了它:
您可以在段::偏移对中传递FAR指针,如下所示。请注意使用双冒号分隔寄存器对。
..INVOKE SomeProc, ES::BX, arg1, arg2