Personal computer/Mapping: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Pizeta (discussione | contributi)
Pizeta (discussione | contributi)
Riga 101:
 
=== Gestione ad Interrupt ===
 
Nella gestione ad interrupt la CPU esegue un programma principale qualsiasi e viene interrotta da una richiesta di passaggio alla routine di servizio associata all'interruzione. La procedura chiamata dall'interfaccia deve quindi avere un ''prologo'' e un ''epilogo'' che permettano alla CPU di poter tornare ad eseguire il programma principale alla fine della routine di servizio
 
'''Programma principale'''
 
MOV Index, 0
MOV FineOp, 0
.
. ; in questa fase la CPU esegue altre operazioni e può accettare gli interrupt
.
WaitFineOp: CMP FineOp, 1
JNE WaitFineOp
 
La variabile FineOp è usata per la sincronizzazione, viene azzerata in fase di inizializzazione dal programma principale, ed impostata ad 1 dal gestore delle interruzioni (la routine di servizio) quando è completata l'operazione di I/O.
 
'''Routine di servizio'''
 
PUSH AX ; Memorizza i registri
PUSH SI ;
MOV SI,Index ; e inizializza il trasferimento
IN AL,BufferIn ; leggi dal buffer
MOV DatiIn[SI],AL ; salva i dati letti
INC SI ; incrementa il puntatore
MOV Index,SI ; e memorizzalo in una variabile accessibile alle successive routine
CMP SI,N ; verifica se il trasferimento è finito
JNE Epilogo
MOV FineOp,1 ; se lo è indicalo anche al programma principale
Epilogo: POP SI ; ripristina i registri
POP AX
IRET ; ritorna al programma principale
 
[[Categoria:Informatica]][[Categoria:Personal Computer]]