2017-08-28 78 views
3

Microsoft operators reference for MASM显示杂项部分中的::运算符。MASM是否有::运算符?

该商品的链接将打开一个页面;; operator

我不是这是表中的错误名称还是错误链接的项目。还有其他一些项目确实有错误的联系。

MASM是否有::运算符?它是做什么的?

+4

[这里](https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/masm-numbers-and-operators#symbols_in_masm_expressions)'SA提到它的masm链接。 –

+0

比在MASM docs正确的@DavidWohlferd中有更好的材质。好的。 – Lycan

+2

@DavidWohlferd该链接适用于Microsoft的调试工具,MASM本身不支持使用'::'运算符来“指示类的成员”。 –

回答

6

是的,它的确如此。

我在旧的TASM 4 manual(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)。

+0

谢谢。爱读你的材料顺便说一句。真的满足你的命令。 – Lycan

+0

在NASM中,'lbl:'具有文件范围。本地标签以'.'开始(所以你会写'.lbl:'),但它们实际上只是'foo.lbl'的语法糖。所以在'bar:'之后,你仍然可以写'jmp foo.lbl'。 (NASM没有任何东西PROC,你只写'全球foo'如果你想'foo'标签的符号表导出。) –

+1

@PeterCordes这就是为什么我喜欢它! ;) –

5

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

双冒号::可以用于传递从寄存器值制作在过程调用自变量的远指针。第157页所描述的那样:

可以在一个段传递FAR指针::偏移对,如示于以下。请注意使用双冒号分隔寄存器对。
..
INVOKE SomeProc, ES::BX, arg1, arg2