【问题标题】:What's the macro doing in MASM32?MASM32 中的宏在做什么?
【发布时间】:2011-03-13 07:08:19
【问题描述】:
  szText MACRO Name, Text:VARARG
    LOCAL lbl
      jmp lbl
        Name db Text,0
      lbl:
    ENDM

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

【问题讨论】:

    标签: syntax masm32


    【解决方案1】:

    看起来它创建了一个以零结尾的字符串(因此,sz)。字符串的符号是您作为 Name 参数传递给宏的任何内容,它包含您作为 Text 参数传递的任何内容,加上一个终止符 0。

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

    自从我做x86汇编语言以来已经有一段时间了,但我想这会将字符串数据直接放在代码段中,而不是将它放在数据段中,这似乎有点奇怪。

    【讨论】:

    • 但似乎Name db Text,0 永远不会运行,因为它总是跳开,对吧?
    • 只是数据。它不需要“运行”。事实上,它无法运行。汇编程序在源代码中看到它并将字节包含在 obj 文件中,并将符号包含在 obj 文件中。
    • 抱歉,您能否详细说明Name db Text,0 从未运行时如何生效?
    • 汇编器从头到尾读取整个汇编语言源文件。它生成代码和数据作为目标文件的输出。该目标文件将包含Name 的符号和数据。只有当目标文件链接到可执行文件并且该可执行文件运行时,才会执行jmp 指令,这将导致 execution 跳过这些字节。但在编译期间,jmp 指令只会使汇编器输出jmp 操作码。汇编程序继续直接通过源代码。有意义吗?
    猜你喜欢
    • 2021-12-30
    • 2014-01-22
    • 2022-07-21
    • 1970-01-01
    • 1970-01-01
    • 2012-05-01
    • 2012-03-07
    • 1970-01-01
    • 2011-03-18
    相关资源
    最近更新 更多