Warum ist es wichtig wie in, was genau mit den Daten in den gespeicherten Registern passieren könnte; Wird es gelöscht oder mit neuen Werten überschrieben? Woher kommen diese neuen Werte? Wenn ich über irgendetwas unklar bin, kommentieren Sie bitte unten.Warum ist es in MIPS Assembly wichtig, gespeicherte Register zu speichern und wiederherzustellen, die von einer Prozedur verwendet werden müssen?
Antwort
Wenn Sie eine Funktion, einen Systemaufruf, eine Prozedur oder einen anderen externen Code innerhalb einer Assemblersprache aufrufen, definiert die Funktionsaufrufdefinition für diese Funktion Register, die beibehalten werden müssen und Register, die möglicherweise nicht beibehalten werden . Oft ist dies als Standard für die Plattform, Bibliothek oder Sprache dokumentiert. Du verstehst das klar. Ihre Frage ist: "Warum?"
Wenn ein Register nicht garantiert erhalten bleibt, bedeutet dies, dass die aufgerufene Funktion frei ist, diese Register in irgendeiner Weise zu manipulieren und zu ändern. Es ist nicht so sehr, dass sie "gelöscht" werden, sondern dass sie geändert oder überschrieben werden, während die Funktion arbeitet; Schließlich muss die Funktion dieselben Register verwenden, die Sie verwenden!
Auf der anderen Seite, wenn ein Register durch einen Anruf erhalten bleiben muss, dann ist garantiert, dass es unverändert bleibt, wenn der Anruf zu Ihrem Code zurückkehrt. Dies liegt möglicherweise daran, dass das Register nicht von der aufgerufenen Funktion verwendet wird, es könnte aber auch daran liegen, dass es auf dem Stack (oder irgendwo im Speicher) gespeichert und dann vor der Rückgabe wiederhergestellt wird.