Procedure In assembler Le fasi In assembler abbiamo
Procedure In assembler
Le fasi • In assembler abbiamo due fasi: o Dichiarazione e Definizione • Viene definito il nome (indirizzo) della procedura • Vengono presentate le istruzioni che fanno parte di questa o Esecuzione • Viene “chiamata” la procedura • Possono esistere più chiamate della stessa procedura
Dichiarazione e Definizione • Sintassi <nome_procedura> PROC <istruzioni> RET <nome_procedura> ENDP • Esempio Vai. ACapo PROC MOV AH, 2 MOV DL, 13 INT 21 h MOV DL, 10 INT 21 h RET Vai. ACapo ENDP
Commento alla dichiarazione • Il nome della procedura rappresenta l’indirizzo di partenza del codice • L’istruzione RET termina l’esecuzione della procedura e ritorna il controllo al programma chiamante • La procedura va inserita dopo la fine del programma o all’inizio, ma in tal caso deve essere “saltata” • Il nome della procedura deve essere significativo • E’ opportuno inserire un commento sul comportamento della procedura • Eventuali LABEL interne alla procedura non devono interferire con label del resto del programma o Suggerimento: usare un prefisso per le label che “ricordi” il nome della procedura
Chiamata della procedura • • Sintassi CALL <nome_procedura> Esempio CALL Vai. ACapo • CALL trasferisci il controllo alla procedura • In un programma possono essere presenti più istruzioni di CALL alla stessa procedura e anche CALL a procedure diverse • Una procedura può essere chiamata all’interno di un’altra procedura
Lo stack • • • Lo stack è una zona di memoria utilizzata per memorizzare valori temporanei. Lo stack segue la logica LIFO (Last In First Out) cioè l’ultimo elemento inserito è il primo a essere tolto dallo stack. Per esempio una pila di monete può dare l’idea del funzionamento dello stack: la prima moneta che viene prelevata è quella posta in “testa” alla pila cioè l’ultima che era stata inserita
Procedure e stack • L’istruzione CALL inserisce nello stack l’indirizzo della prossima istruzione da eseguire nel programma chiamante (IP) • L’istruzione RET “recupera” dallo stack l’indirizzo dell’istruzione da eseguire nel programma chiamante
Salvataggio temporaneo dei registri • Una procedura può avere come effetto collaterale quello di modificare i valori di alcuni registri. • Per evitare problemi è possibile inserire sullo stack i valori di questi registri all’inizio della procedura per poi recuperarlo alla fine di questa. • Per inserire un valore sullo stack si utilizza l’istruzione PUSH • Per recuperare e togliere un valore dallo stack si utilizza l’istruzione POP • Attenzione alla logica LIFO !
Un esempio Vai. ACapo PROC push ax push dx mov ah, 2 mov dl, 13 int 21 h mov dl, 10 int 21 h pop dx pop ax ret ENDP
- Slides: 9