【发布时间】:2011-03-13 07:08:19
【问题描述】:
szText MACRO Name, Text:VARARG
LOCAL lbl
jmp lbl
Name db Text,0
lbl:
ENDM
有人知道这个宏在做什么吗?
【问题讨论】:
szText MACRO Name, Text:VARARG
LOCAL lbl
jmp lbl
Name db Text,0
lbl:
ENDM
有人知道这个宏在做什么吗?
【问题讨论】:
看起来它创建了一个以零结尾的字符串(因此,sz)。字符串的符号是您作为 Name 参数传递给宏的任何内容,它包含您作为 Text 参数传递的任何内容,加上一个终止符 0。
它输出一个跳转指令以跳过字符串,然后是字符串本身的字节。跳转的标签被声明为宏的本地标签,因此它不会污染全局命名空间。
自从我做x86汇编语言以来已经有一段时间了,但我想这会将字符串数据直接放在代码段中,而不是将它放在数据段中,这似乎有点奇怪。
【讨论】:
Name db Text,0 永远不会运行,因为它总是跳开,对吧?
Name db Text,0 从未运行时如何生效?
Name 的符号和数据。只有当目标文件链接到可执行文件并且该可执行文件运行时,才会执行jmp 指令,这将导致 execution 跳过这些字节。但在编译期间,jmp 指令只会使汇编器输出jmp 操作码。汇编程序继续直接通过源代码。有意义吗?