【发布时间】:2016-08-19 15:23:26
【问题描述】:
我知道.ascii 指令不会在字符串末尾放置空字符,因为.asciz 指令就是用于此目的。但是,我不知道.string 指令是否在字符串末尾放置了一个空字符。
如果它确实附加了空字符,那么.asciz 和.string 指令之间有什么区别?对我来说,同时拥有.asciz 和.string 似乎是多余的。
【问题讨论】:
-
.asciz和.string是同义词,都是零终止字符串。.ascii不会以零终止字符串。您可以在GNU Assembler documentation了解更多信息 -
谢谢。这一直困扰着我这么久。我相信Zen of Python,它说“应该有一种——最好只有一种——明显的方式来做到这一点。”因此,
.asciz和.string是同义词让我感到困惑。 -
虽然我说它们是同义词,但
.string似乎可能会或可能不会附加尾随零,具体取决于架构。我没有使用不附加零的特定架构。在这些情况下,它们是相同的。我很好奇,如果真的存在.string和.asciz不同的环境。我猜可以随时查看源代码。 -
同义词可能存在以与其他(可能是古老的)汇编程序兼容。
-
汇编手册至少在一个方向链接同义词,但官方文档没有说
.string有任何同义词,或者.ascii 或.asciz 有任何同义词。例如.zero、.space和.skip是同义词。可能有人说“这个指令的名称在某些情况下不符合它的使用语义,让我们做一个别名”。他们不能像@Nate 所说的那样,在不破坏向后兼容的情况下重命名它。与某些 unix 平台上供应商提供的汇编程序兼容是另一个可能的原因。
标签: gcc assembly x86 directive gnu-assembler