Personal computer/Mapping: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
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]]
|