Inhaltsverzeichnis:
Definition - Was bedeutet nichtflüchtiges Register?
Ein nichtflüchtiges Register ist eine Art Register mit Inhalten, die über Unterprogrammaufrufe erhalten bleiben müssen. Immer wenn der Wert eines nichtflüchtigen Registers durch die Routine geändert wird, muss der alte Wert vor dem Ändern des Registers auf dem Stapel gespeichert und dieser Wert vor der Rückkehr wiederhergestellt werden. Ein Register ähnelt einer Variablen mit der Ausnahme, dass es eine feste Anzahl von Registern gibt. Jedes Register ist ein eindeutiger Ort in der CPU, an dem ein einzelner Wert gespeichert wird. Ein Register ist der einzige Ort, an dem mathematische Funktionen wie Addition, Multiplikation, Subtraktion usw. ausgeführt werden können. Register enthalten häufig Zeiger, die sich auf den Speicher beziehen. Das Verschieben von Werten zwischen Speicher und Registern ist ein verbreitetes Phänomen.
Techopedia erklärt das nichtflüchtige Register
Nachfolgend einige Beispiele für nichtflüchtige Register:
- ebx : Ein nichtflüchtiges Register, das für allgemeine Zwecke verwendet wird. Es wird normalerweise über eine Funktion auf einen gemeinsamen Wert gesetzt, um die Berechnungen zu beschleunigen.
- esi : Ein nichtflüchtiges Register, das für allgemeine Zwecke verwendet wird. Es wird häufig als Zeiger verwendet, insbesondere für Anweisungen der Klasse "rep-", für die eine Quelle und ein Ziel für Daten erforderlich sind. Hier zeigt der ESI auf die Quelle. Ein esi enthält im Allgemeinen Daten, die während einer Funktion verwendet werden, da sie nicht für Änderungen anfällig sind.
- edi : Ein weiteres nichtflüchtiges Register, das für allgemeine Zwecke verwendet wird. Dies wird üblicherweise als Zeiger verwendet. Ein Edi ist identisch mit einem Esi, mit der Ausnahme, dass es normalerweise auf das Ziel verweist.
- ebp : Ein weiteres nichtflüchtiges Register, das als Allzweckregister verwendet wird. Basierend auf den Kompilierungseinstellungen gibt es zwei unterschiedliche Verwendungszwecke. Es ist entweder ein Allzweckregister oder ein Rahmenzeiger. Wenn die Kompilierung nicht optimiert wurde oder der Code von Hand geschrieben wurde, überwacht ebp die Position des Stapels, wenn eine Funktion beginnt. Da der Stack während einer Funktion geändert wird, können die auf dem Stack gespeicherten Variablen leicht referenziert werden, wenn ebp auf den ursprünglichen Wert gesetzt wird. Wenn die Kompilierung optimiert wurde, wird ebp als Allzweckregister zum Speichern beliebiger Datentypen verwendet, während die Berechnungen für den Stapelzeiger in Abhängigkeit von seiner Bewegung ausgeführt werden.