Thema: Base Pointer

Einzelnen Beitrag anzeigen

Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

Re: Base Pointer

  Alt 5. Jan 2006, 08:52
Du hast schon Recht mit deinen Vermutungen.

BP wird als Zeiger auf den Stack-Frame benutzt. Ein Grund dafür ist, dass es im 16-Bit-Modus keine Adressierungsmöglichkeiten über SP (den eigentlichen Stackzeiger) gibt.

Darum benutzt man für Routinen mit Parametern oft das folgende Schema:
Code:
push bp
mov bp, sp
sub sp, 8  ; <-- nur bei lokalen Variablen

; jetzt ist
; [bp] der alte Wert von BP
; [bp+2] die Rücksprungadresse
; [bp+4] der erste Parameter
; [bp+6] der zweite Parameter
; [bp-2] die erste lokale Variable
; [bp-4] die zweite lokale Variable

mov sp, bp ; <-- nur wenn man sich bzgl. SP nicht sicher sein kann
pop bp
ret
Dafür gibt's übrigens auch die Befehle enter und leave (die im Grunde genau das machen).

Im 32-Bit Modus wird oft direkt über ESP adressiert, da dies hier möglich ist.
Volker
Besucht meine Garage
Aktuell: RtfLabel 1.3d, PrintToFile 1.4
  Mit Zitat antworten Zitat