MASM 有 :: 运算符吗?

Does MASM have a :: operator?

Microsoft operators reference for MASM 在杂项部分显示了一个 :: 运算符。

此项的 link 打开 ;; operator 的页面。

我不知道这是 table 中的错误名称还是项目上的错误 link。还有其他几项确实有错误 links。

MASM 有 :: 运算符吗? 它有什么作用?

是的,确实如此。

我在旧的 TASM 4 manual 中找到了对它的引用(印刷文档的第 124 页,PDF 的第 135 页)。

它用于定义范围比定义它们的过程更广的标签。

考虑:

foo PROC

lbl:
  ret

foo ENDP

bar PROC
 jmp lbl     ;Undefined symbol lbl
bar ENDP

这在 MASM 中不 assemble 因为 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 揭示了一些额外的语义。

双冒号 :: 可用于传递从寄存器值生成的远指针作为过程调用中的参数。第 157 页对其进行了描述:

You can pass a FAR pointer in a segment::offset pair, as shown in the following. Note the use of double colons to separate the register pair.
..
INVOKE SomeProc, ES::BX, arg1, arg2