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.