Architettura INTEL: alcune domande basilari (POP,PUSH,ESP..)

Black27
Buongiorno! Per l'esame di architetture degli elaboratori, mi devo applicare alla programmazione in assembler. Le alternative sono MIPS e INTEL (IA32). Il primo è spiegato sul libro di testo, ma il secondo, ahimè, non è spiegato da nessuna parte. Quindi volevo chiedervi qualche informazione su quest'ultimo! :-D

Non mi è chiaro a cosa servano le istruzioni PUSHL e POPL. La definizione è che aggiungono o rimuovono una word dallo stack, ma in sostanza cosa significa?
Che PUSHL salva un valore nello stack, fino alla fine dell'esecuzione della funzione, e poi viene rilasciato con POPL?

Ho notato che nel prologo di un programma è presente sempre l'istruzione PUSHL %EBP e nell'epilogo POPL %EBP. Perchè? A cosa serve?

Inoltre: che differenza ESP (in teoria stack pointer) e EBP (se non erro base pointer)?

Vi ringrazio e nello stesso tempo mi scuso per la banalità delle domande, ma non saprei dove reperire le risposte!
Grazie! ;-)

Risposte
itpareid
se non ricordo male, il base pointer punta all'indirizzo della memoria nella quale inizia lo stack e lo stack pointer all'indirizzo della posizione corrente nello stack.
salvare il base pointer permette, al termine dell'esecuzione, di tornare alla situazione precedente.
lo stack viene solitamente usato per passare i valori dei parametri alle funzioni.
(spero di non averle sparate troppo grosse :-D )

maths91
Sia in PUSHL che POPL, la 'L' sta per long, quindi sono le operazioni di PUSH e POP applicate ad un long (4 byte).
In parole povere il PUSH salva un elemento in cima allo stack (equivale ad un SUB più un MOV) ed il POP preleva l'elemento in cima allo stack (equivale ad un MOV più un ADD).
Stando a queste spiegazioni, puoi capire cosa succede con un PUSHL %EBP ed un POPL %EBP.
Il registro ESP (stack pointer) punta alla cima dello stack in quel momento (all'indirizzo corrente dello stack del programma); il registro EBP (base pointer) punta/contiene l'indirizzo di base corrente dello stack.

Black27
Perfetto!! Grazie mille davvero, era quello che avevo bisogno di sapere :-D

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.