ascii vs asciz vs 气体中的字符串

ascii vs asciz vs string in gas

gas 中的.ascii.asciz 和.string 有什么区别?我似乎很清楚:

但是 .string 和上面两个有什么区别,为什么要用一个代替另一个?

GAS 为各种指令提供了多个别名,以与各种平台上的 Unix 汇编程序兼容。这是对同一事物使用冗余指令的主要原因。

根据目标平台的不同,其中一些别名有不同的含义;通常避免使用 same-everywhere 方法,例如始终使用 .balign.p2align,从不使用 .align。始终使用 .ascii.asciz,从不使用 .string.

这样您(以及您代码的未来读者)就可以在 GAS 手册中查找它的含义,而不必检查它在某些特定目标平台上的行为方式。


As documented in the GAS manual for .string(当你想知道其他指令时,你应该在以后阅读):

Unless otherwise specified for a particular machine, the assembler marks the end of each string with a 0 byte.

所以在大多数目标上,它是 .asciz 的同义词。但显然在某些人看来,它是 .ascii.

的同义词

.string16.string32.string64 指令,以防您需要宽字符的字符串。在那种情况下,也许值得忍受 zero-termination 可能存在的歧义,只要您知道它在 ISA 上的作用,您实际上是使用此源文件定位的。我不认为 asciz.

有等价物