Перезапись памяти в подстроке MIPS ascii - PullRequest
0 голосов
/ 05 апреля 2011

Я использую симулятор MARS MIPS и существует специальная задача заменить подстроку на другую в основной строке Ascii в памяти. Однако симулятор помещает эти 3 рядом друг с другом в память. Когда я сдвигаю символы основной строки вправо (если вторая подстрока длиннее первой), она практически перезаписывает символы подстроки. Могу ли я услышать некоторые идеи о том, как решить эту проблему.

1 Ответ

0 голосов
/ 06 апреля 2011

Добавьте немного пустого пространства между ними. ;)

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 выше), куда вы копируете свои строки, а затем отредактируйте их прямо там.

EDIT
Вы можете хранить эти подстроки в двух буферах, поэтому при изменении основной строки вы все равно будете перезаписывать подстроки, но вам не нужно беспокоиться, потому что вы получили их копию где-то еще. На практике, когда у вас есть собственная копия подстрок, вы можете с радостью забыть оригинальные и перезаписать их (при необходимости), используя для справки полученные копии.
Вероятно, это все, что вы можете сделать. Если у вас недостаточно места, невозможно придумать что-то другое. Вы должны что-то перезаписать. Кстати, после того, как вы изменили «основную» строку, вы можете поместить свои копии после этого, чтобы вызывающий все еще находил подстроки.

...