Si presuppone erroneamente che ebp
sia necessario per l'assegnazione del frame dello stack. Questo non è vero, esp
può essere utilizzato direttamente. Oggigiorno l'uso di ebp
come puntatore del frame dello stack non è assolutamente necessario. Ci sono alcuni punti, dove si era utile:
Nel codice a 16 bit, l'uso di sp
(stack pointer) nell'affrontare era fortemente limitata, indirizzamento relativo non sia direttamente possibile a tutti a 86, dove bp
può essere utilizzato in ogni modalità di indirizzamento disponibile.
Il ragionamento per questo supporto limitato sono stati probabilmente i compilatori disponibili in quel momento, è molto più semplice generare codice con i puntatori dei fotogrammi per poi tenere traccia del sempre mutevole sp
. Ci sono molti più processori che hanno avuto il supporto speciale per le istruzioni di stack del telaio, come leave
o enter
, ma per quanto ne so nessuno ma Intel si è spinto fino a paralizzare il vero sp
in quel processo :-)
debug. È molto più semplice srotolare uno stack quando i puntatori dei frame sono disponibili, ma i debugger moderni possono fare anche senza.
Se si desidera allocare spazio 100 byte sullo stack, basta fare sub esp, #100
, accedere allo spazio con move [esp + x]
dove x
è compreso tra 0 e 99 e pulire con add esp, #100
e si è fatto. Direi anche che l'uso di stack frame pointers in assembly scritti a mano è come copiare il comportamento di un compilatore di trent'anni, quando i compilatori erano davvero stupidi e non potevano fare a meno. È in no modo necessario né utile se si sta scrivendo assemblaggio.
Hah, contrassegnato come duplicato quasi tre anni dopo. – CatShoes