MIPS ascii子串内存覆盖

时间:2011-04-05 17:52:05

标签: assembly ascii mips

我正在使用MARS MIPS模拟器,并且有一项特定的任务是在内存中的主Ascii字符串中更改子字符串。但是,模拟器将这3个彼此相邻放在内存中。当我将主字符串的字符向右移动时(如果第二个子字符串比第一个字符串长),它实际上会覆盖子字符串的字符串。我可以听一些关于如何解决这个问题的想法。

1 个答案:

答案 0 :(得分:0)

在它们之间添加一些空白区域。 ;)

str1:         .asciiz      "I'm string one"
some_space:   .space       40
str2:         .asciiz      "I'm the second string"
other_space:  .space       40
str3:         .asciiz      "I'm the last string"
guess_what:   .space       40

如果你不能这样做,请在你复制字符串的位置声明三个目标缓冲区(总是使用上面的.space),然后直接在那里编辑它们。

修改
您可以将这些子字符串保存在两个缓冲区中,因此在修改“main”字符串时,您仍然会覆盖子字符串,但是您不需要费心,因为您已将其副本放在其他位置。在实践中,一旦你有自己的子串副本,你可以高兴地忘记原始的子串并覆盖它们(如果需要的话),使用你所获得的副本作为参考。
可能这就是你能做的一切。如果你没有足够的空间是不可能发明一些其他的。你必须覆盖一些东西。 BTW修改'main'字符串后,您可以在此之后放置副本,这样调用者仍然可以找到子字符串。