assembly - 为什么汇编中字符串变量末尾包含 0?

标签 assembly x86 masm c-strings

这是在程序集中声明 byte 类型变量的常规方法:

msg0 BYTE "string_1 in upper case: ",0

什么情况需要手动指定,0?它可能标志着字符串的结尾。

但是一旦我们关闭双引号,字符串的结尾不是很明显吗?

最佳答案

没有隐式终止零附加右引号,因为您并不总是希望这样。例如为了传递给需要长度的 write 系统调用,您只需要 ASCII 字节和长度(显式长度字符串),而不是隐式长度的以 0 结尾的 C 字符串。

例如

msg  db "hello"
msglen = $ - msg

或者作为结构或其他内容的一部分,有效地定义一个固定宽度的 char buf[4] 或所有使用都占用全部 4 个字节的内容,而不是搜索终止 0。

关于assembly - 为什么汇编中字符串变量末尾包含 0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67267907/

相关文章:

c - 在 Linux 上混合系统调用写入和 printf

c - 优化用于模式填充数组的嵌套循环,以帮助编译器生成高效的 ARM 程序集?

assembly - 什么是学习MASM代码(不是HLA)的好资源?

assembly - x86组件可在哪些CPU上运行?

gcc - 尝试使用具有多个替代约束的内联汇编在 amd64 中实现 128 位添加

无法设置堆栈边界gcc

gcc - 与 Intel 语法相比,AT&T 语法中源操作数的顺序是什么?

一个目标文件中的代码对齐会影响另一个目标文件中函数的性能

linux - ptrace 能否判断 x86 系统调用使用的是 64 位还是 32 位 ABI?

windows - 试图找出 MASM 语法