MASM 有 :: 运算符吗?



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

最新更新