Personal computer/Mapping: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Pizeta (discussione | contributi)
divido le pagine
Pizeta (discussione | contributi)
Riga 68:
 
=== Gestione a Polling ===
 
L'interfaccia rende disponibili le informazioni di sincronizzazione nel registro di stato tramite due bit
* '''BIF''' ''Buffer Input Full' ad indicare che il buffer in input è pieno, quindi contiene un valore che può essere letto dalla CPU
* '''BOE''' ''Buffer Output Empty'' il buffer di uscita è vuoto e quindi scrivibile dalla CPU
 
Prima di eseguire il trasferimento, la CPU deve controllare lo stato dell'interfaccia, un esempio del programma potrebbe essere
 
'''Input'''
 
MOV SI, 0 ; Inizializzazione dell'operazione di trasferimento
WaitDato: IN AL, Statuts ; Lettura del registro di stato
TEST AL, 1 ; valuta il registro di stato (''BIF'')
JZ WaitDato ; cicla le due operazioni precedenti se ''BIF'' = 0
IN AL, BufferIn ; altrimenti leggi il registro di buffer in input
MOV Dati[SI], AL ; memorizzane il valore in un array
INC SI ; incrementa il contatore per ulteriori letture
CMP SI, N ; verifica se l'operazione di lettura è terminata
JNE WaitDato ; se non è terminata torna ad attendere un dato
 
 
'''Output'''
 
MOV SI, 0 ; Inizializzazione dell'operazione di trasferimento
WaitDato: IN AL, Statuts ; Lettura del registro di stato
TEST AL, 1 ; valuta il registro di stato (''BOE'')
JZ WaitDato ; cicla le due operazioni precedenti se ''BOE'' = 0
MOV AL, Dati[SI] ; altrimenti prepara il dato da inviare all'interfaccia
OUT BufferOut, AL ; e copialo
INC SI ; incrementa il contatore per ulteriori scritture
CMP SI, N ; verifica se l'operazione di scrittura è terminata
JNE WaitDato ; se non è terminata torna ad attendere la liberazione del buffer
 
=== Gestione ad Interrupt ===