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
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