微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

程序如何确定字符串的结尾?

如何解决程序如何确定字符串的结尾?

我可以定义一个msg db 'Hello,world!$'这样的新变量,或者用另一种方式msg2 db 'Hello,world!',0 我知道字符串的结尾是使用内存中的值0确定的。那么$代表什么呢?

解决方法

程序如何确定字符串的结尾?

这取决于程序。一个好的程序会做类似(NASM语法)的事情:

string:    db "Hello World!"
.end:

    mov ecx,string.end - string   ; ecx = length of the string

..并且在进行任何修改(追加,截断,连接等)时都将跟踪字符串的长度/秒,以便它始终知道字符串的长度,而几乎没有任何开销。

“性能较差”的程序可能会将字符串的长度放在字符串的开头。这是一些旧的编程语言(例如Pascal)所完成的。当您要使用重叠的字符串时,这会导致问题(例如,如果string2string1的后半部分,则无法通过使字符串在内存中重叠来节省内存,因为您必须插入string2开头的长度会破坏string1的中间)。

“性能较差”的程序也可能会浪费CPU时间来搜索字符串以寻找某种终止符(其严重程度取决于字符串的长度-对于非常长的字符串而言非常糟糕)。对于MS-DOS,该终止符是一个'$'字符(如果您想在字符串的中间使用一个'$'字符,这会使它变得更加愚蠢/讨厌),并且在大多数其他情况下(例如C编程)为零(空字符)。

当然,对于汇编语言,您几乎可以做任何喜欢的事情(并且可以编写一个好的程序);直到您必须使用别人编写的代码(例如MS-DOS API或用其他某种语言编写的代码)。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。