Syntax 什么';MASM32中的宏在做什么?

Syntax 什么';MASM32中的宏在做什么?,syntax,masm32,Syntax,Masm32,有人知道这个宏在做什么吗?看起来它创建了一个以零结尾的字符串(因此,sz)。字符串的符号是作为名称参数传递给宏的任何符号,它包含作为文本参数传递的任何符号,以及终止的0 它输出一条跳转指令,跳转经过字符串,后跟字符串本身的字节。跳转的标签声明为宏的本地标签,因此它不会污染全局命名空间 我已经有一段时间没有使用x86汇编语言了,但我想这会将字符串数据放在代码段中,而不是放在数据段中,这似乎有点奇怪。但它似乎Name db Text,0永远不会运行,因为它总是跳出,对吗?它只是数据。它不需要是“运行

有人知道这个宏在做什么吗?

看起来它创建了一个以零结尾的字符串(因此,sz)。字符串的符号是作为名称参数传递给宏的任何符号,它包含作为文本参数传递的任何符号,以及终止的0

它输出一条跳转指令,跳转经过字符串,后跟字符串本身的字节。跳转的标签声明为宏的本地标签,因此它不会污染全局命名空间


我已经有一段时间没有使用x86汇编语言了,但我想这会将字符串数据放在代码段中,而不是放在数据段中,这似乎有点奇怪。

但它似乎
Name db Text,0
永远不会运行,因为它总是跳出,对吗?它只是数据。它不需要是“运行”。事实上,它无法运行。汇编程序在源代码中看到它,并在obj文件中包含字节,在obj文件中包含符号。对不起,您能否详细说明
Name db Text,0
在从未运行时如何生效?汇编程序从头到尾读取整个汇编语言源文件。它生成代码和数据作为输出到对象文件中。该对象文件将包括
名称的符号和数据。只有当目标文件链接到一个可执行文件并运行该可执行文件时,才会执行
jmp
指令,从而导致执行跳过这些字节。但是在编译过程中,
jmp
指令只会导致汇编程序输出
jmp
操作码。汇编程序一直在源代码中进行。有道理?
  szText MACRO Name, Text:VARARG
    LOCAL lbl
      jmp lbl
        Name db Text,0
      lbl:
    ENDM