我正在使用MARS MIPS模拟器,并且有一个特定的任务来更改内存上的主Ascii字符串中的另一个子字符串。然而,模拟器将这3放在内存上彼此相邻。当我向右移动主字符串的字符时(如果第二个子字符串比第一个长),它实际上覆盖了子字符串的字符。我能听听你对解决这个问题的意见吗?
在它们之间添加一些空白。;)
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'字符串时,你仍然会覆盖子字符串,但你不需要麻烦,因为你已经在其他地方得到了它们的副本。在实践中,一旦你有了自己的子字符串副本,你可以很高兴地忘记原始字符串并覆盖它们(如果需要的话),使用你得到的副本作为参考。
也许这就是你能做的。如果你没有足够的空间是不可能发明一些其他的。必须覆盖某些内容。顺便说一句,在你修改了'main'字符串之后,你可以把你的副本放在后面,这样调用者仍然可以找到子字符串。