auf viele verschiedene Arten, aber im Grunde die beiden wichtigsten sind:
1) die .asciiz
.. hast du überprüfen, wie wird es in Bytes selbst kompiliert? Ich denke, es ist die "Null terminated string", also .asciiz "AB"
ist in drei Bytes 65, 66, 0
kompiliert.
Nun, wenn Sie anstelle von Namen leere Zeichenfolge anzeigen möchten, machen Sie es leere Zeichenfolge, d. H. Null an der ersten Position der Zeichenfolge schreiben, wodurch Inhalt des vorherigen Byte-Arrays zu 0, 66, 0
. Dies wird natürlich die Daten für immer beschädigen.
2) Falls Sie die ursprünglichen Namen im Speicher behalten möchten, können Sie mit Ihrer tiefen 2-Level-Pointer-Struktur (DATA-> data1-> string) eine leere Zeichenfolge wie empty: .asciiz ""
haben und die Zeiger in ändern data1
Struktur. Also von data1: .word nome1,cognome1
würden Sie den Inhalt dieses Speichers zu data1: .word empty,empty
ändern.
In beiden Fällen müssen Sie den zu überschreibenden Speicher identifizieren (dh die Adresse von data1 oder eine bestimmte Zeichenfolge laden) und an dieser Adresse entweder Nullbyte (wenn Sie Zeichenfolgen überschreiben) oder Adresse einer leeren Zeichenfolge (wenn Sie Namenszeiger überschreiben).
Danach zeigen Sie einfach die Sache wie zuvor, neuer geänderter Speicherinhalt wird aussehen wie der Name aus menschlicher Sicht gelöscht wurde.
BTW, für den Fall, dass Sie etwas mit sensiblen Daten tun würden, wäre es in einer Sicherheitsanwendung sinnvoll, die ganze Zeichenfolge zu überschreiben, d. von 65, 66, 0
zu 0, 0, 0
, so dass nach dem Löschvorgang keine Spuren von ursprünglichen Namen, wenn Sie den Speicherinhalt ausgeben (das ist dritte Option, wie sie zu löschen, sehr ähnlich wie 1), aber anstatt Null an erster Stelle schreiben werden Sie schreiben so lange Nullen, wie am Ziel nicht Null ist.
in der 1) -Option, wäre der Weg, um dies zu tun: addi $ s0, $ null, 0 was meinst du mit Damagin die Daten für immer? Ich würde mich jedoch freuen, wenn dadurch und durch das Drucken der Daten nichts angezeigt wird. –
hmm ... nein, ich weiß nicht, was ist $ s0 in Ihrem Beispiel, und ich bin mir auch nicht sicher, wie addi Mips funktioniert, aber in der Regel hinzufügen Anweisungen fügt etwas zu einigen registrieren. Also ich denke nur das 'addi $ s0, $ zero, 0' ist $ s0 = $ zero + 0? Das würde Null in $ s0 laden? Sie wollen zuerst die Adresse der Zeichenfolge in ein Register laden, wie $ s0 .. etwas wie 'lw $ s0, name1' und dann Null-Byte bei' ($ s0) 'speichern. Dann machen Sie es zu einer Routine, die als Parameteradresse von dataN (wie 'data2') verwendet, und lädt beide Namen Zeiger von ihm, und löschen Sie sie, so können Sie es zum Löschen einer DatenN-Struktur verwenden. – Ped7g
Vielleicht überprüfen Sie den Speicherabbild für eine Weile, um besser zu verstehen, was die Adresse des Speichers ist und was Inhalt des Speichers ist.Das ist der Unterschied zwischen der Arbeit mit '$ s0' (Wert in $ s0, der eine beliebige Zahl sein kann, auch Adresse) und' ($ s0) '(Wert aus dem Speicher, auf den $ s0 zeigt). Wenn Sie also vom/in den Computerspeicher lesen/schreiben wollen, sollte irgendwo in der letzten Anweisung die '(Adresse)' Notation stehen. Das Löschen von Namen im Speicher erfordert das Speichern von Nullen. – Ped7g