2016-06-03 7 views
0

Wie kann ich die Werte aller Vor- und Nachnamen in den Arrays ändern? so, wenn ich versuche, sie in der Konsole zu drucken, werden sie nicht ausgegeben alles, wie folgt aus:MIPS, löschen oder null drehen Array-Daten

Erstes Array:

name1:

surname1:

.data 



DATA: .word data1,data2,data3 

data1: .word nome1,cognome1 
name1:  .asciiz "john" 
surname1: .asciiz "cena" 


data2: .word nome2,cognome2 
name2:  .asciiz "giorno" 
surname2: .asciiz "giovana" 


data3: .word nome3,cognome3 
name3:  .asciiz "nikola" 
surname3: .asciiz "tesla" 

, was ich bin Ich versuche, die Daten jedes Arrays zu löschen, wenn ich mein Programm starte, damit ich wählen kann, wann ich sie löschen soll.

Antwort

0

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.

+0

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. –

+0

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

+0

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