MASM有::运算符吗?

4

微软MASM运算符参考手册显示在Miscellaneous部分中有一个::操作符。

该项目的链接打开了一个;;操作符的页面。

我不确定这是表格中的错误名称还是项目上的错误链接。还有其他几个项目存在链接错误。

MASM是否有::操作符?它是用来做什么的?


4
这是一个有关masm的链接,其中提到了相关内容。 - David Wohlferd
比起 MASM 文档本身,那里的材料要好得多。@DavidWohlferd,干得好。 - user6798019
2
@DavidWohlferd 那个链接是关于微软的调试工具,而使用 :: 运算符来“指示类成员”并不被 MASM 本身支持。 - Ross Ridge
2个回答

6

是的,确实如此。

我在一份旧版的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)。


谢谢。顺便说一下,我很喜欢阅读你的材料。你的有序程度真的很令人满意。 - user6798019
在NASM中,lbl:具有文件范围。本地标签以.开头(因此你会写.lbl:),但它们实际上只是foo.lbl的语法糖。因此,在bar:之后,您仍然可以编写jmp foo.lbl。(NASM没有任何PROC内容。如果要将“foo”标签导出到符号表中,只需编写global foo即可。) - Peter Cordes
1
@PeterCordes 这就是我喜欢它的原因!;) - Margaret Bloom

5

1996年微软的MASM程序员指南6.1揭示了一些额外的语义。

双冒号::可用于将由寄存器值生成的远指针作为过程调用中的参数传递。第157页描述如下:

您可以通过segment::offset对传递一个FAR指针,如下所示。请注意使用双冒号分隔寄存器对。
..
INVOKE SomeProc, ES::BX, arg1, arg2


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接