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
VaiACapo PROC
MOV AH, 2
MOV DL, 13
INT 21h
MOV DL, 10
INT 21h
RET
VaiACapo 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 VaiACapo
• 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
VaiACapo PROC
push ax
push dx
mov ah,2
mov dl, 13
int 21h
mov dl, 10
int 21h
pop dx
pop ax
ret
ENDP
Scarica

ppt - Alberto Ferrari