【发布时间】:2020-10-21 17:08:32
【问题描述】:
我可以像 msg db 'Hello, world!$' 那样定义一个新变量,或者以其他方式 msg2 db 'Hello, world!', 0
我知道字符串的结尾是使用内存中的值0 确定的。那么符号$代表什么?
【问题讨论】:
-
MS-DOS 约定(对于许多 DOS 函数调用)是用 $ 而不是 0 来终止字符串。如果您不调用 MS-DOS,那么您不需要 $。字符串是否必须被 $ 终止取决于被调用的 DOS 函数。
-
@MichaelPetch 我在一本相对现代的书中看到
$位于字符串的末尾。如果你能用历史评论来解释你的话,我将不胜感激。提前谢谢你。 -
@Michael Petch:中断 21h 服务 09h 实际上是唯一一个采用美元终止字符串的“CP/M 样式”函数。所有其他 DOS 函数使用 ASCIZ 或指针 + 长度来确定长度。
-
除非我知道是哪本书,否则我无法对现代书籍发表任何评论。你在看哪本书?或者它是什么网页(如果是网页)?我有很多书,所以我可能有你正在看的那本书。
-
例如,有关 DOS 的历史信息显示 Int 21h/Ah=9(您可以在此处阅读:ctyme.com/intr/rb-2562.htm)使用以 $ 结尾的字符串。如果这本现代书正在展示如何在 DOS 中将某些内容打印到标准输出,那么他们使用的示例代码将需要 $ 来表示该功能。
标签: string assembly masm c-strings null-terminated