如果我在 MIPS32 程序集中将 space 保留为 .space,是否需要以空值开始一个字符串?
Do I need to start a String with a null value if I reserve it's space as a .space in MIPS32 assembly?
我正在尝试保留 space 以使用 .space:
在其中存储一个字符串
.data
myString: .space 16
我从我的老师那里得到了一个示例代码,它说我必须以空值 (0) 开始该字符串,但我不明白为什么,为什么需要这个?
提前致谢!
如果您的代码肯定在读取缓冲区之前写入缓冲区,那么缓冲区中的内容并不重要。否则它以 0 开头确实很重要,因此如果读取为隐式长度的 0 终止字符串,则它是空字符串。
但是您已经 这样做了:.space
用零填充。以下将在内存中以完全相同的 16 个字节的零结束:
myString:
.byte 0
.space 15
如果您想在源代码中更加明确地指出开头是 0,这值得考虑。 (例如,如果您将此地址传递给在第一次写入之前读取它的东西)。即使那样,如果您知道 .space
的作用,它仍然只是混乱。在 .space
上发表评论就足够了。
我不确定您在哪里可以找到像 MARS 这样 .space
填充为零的经典 MIPS 汇编程序的文档,但对于像 GNU as
这样的 Unix 汇编程序来说,情况显然是这样的,主要是与经典 MIPS 汇编程序兼容:https://sourceware.org/binutils/docs/as/Space.html
我正在尝试保留 space 以使用 .space:
在其中存储一个字符串.data
myString: .space 16
我从我的老师那里得到了一个示例代码,它说我必须以空值 (0) 开始该字符串,但我不明白为什么,为什么需要这个?
提前致谢!
如果您的代码肯定在读取缓冲区之前写入缓冲区,那么缓冲区中的内容并不重要。否则它以 0 开头确实很重要,因此如果读取为隐式长度的 0 终止字符串,则它是空字符串。
但是您已经 这样做了:.space
用零填充。以下将在内存中以完全相同的 16 个字节的零结束:
myString:
.byte 0
.space 15
如果您想在源代码中更加明确地指出开头是 0,这值得考虑。 (例如,如果您将此地址传递给在第一次写入之前读取它的东西)。即使那样,如果您知道 .space
的作用,它仍然只是混乱。在 .space
上发表评论就足够了。
我不确定您在哪里可以找到像 MARS 这样 .space
填充为零的经典 MIPS 汇编程序的文档,但对于像 GNU as
这样的 Unix 汇编程序来说,情况显然是这样的,主要是与经典 MIPS 汇编程序兼容:https://sourceware.org/binutils/docs/as/Space.html