|
 |
Il Processore e il Debugger |
I BUS DEI PROCESSORI 5/6
[10 di 60] |
 |
|
Il Bus degli INDIRIZZI con i
Dispositivi di I/O |
|
 | In chiusura della pagina precedente abbiamo sottolineato
che il processore è in grado di distinguere tra memoria
e dispositivo di I/O, semplicemente fissando uno
dei 2 livelli logici possibili sulla sua linea di controllo MEM/IO. |
 | Sulla base di questa premessa vediamo di analizzare ora il problema dell'indirizzamento
delle periferiche; di certo la CPU deve poterle coinvolgere
quando lo ritiene necessario e non può permettersi canali privilegiati,
cosicché il medesimo
bus degli indirizzi utilizzato per la memoria sarà usato
anche per chiamare in lettura (con le linee di
controllo MEM/IO e RD entrambe a 0) e/o
in scrittura (con MEM/IO
e WR entrambe a 0) i dispositivi di I/O. |
 | I progettisti dei processori 80x86 hanno stabilito fin
dall'inizio di destinare per questo scopo solo una
parte delle linee di indirizzo disponibili: attualmente
solo le prime 16 (poco meno della metà...)
vengono coinvolte nelle operazioni di IN/OUT, per cui è facile prevedere la
possibilità di gestire fino a 65536 (216)
dispositivi d'ingresso ed
altrettanti d'uscita. |
 | Nei primi modelli (tra cui l'8086) le linee d'indirizzo coinvolte
erano per altro solo 10, per cui il numero
di dispositivi gestibili era ridotto a 1024 (210)
d'ingresso ed
altrettanti d'uscita. |
 | E' dunque chiaro che, per programmare un
dispositivo a basso
livello, è necessario conoscere il suo nome binario,
il suo indirizzo base. |
 | Ad ogni oggetto, presente sulla scheda madre del
tuo Computer o raggiungibile attraverso le sue porte di I/O, viene
affidato un numero esadecimale a 16 bit, in grado di farlo riconoscere; al processore basterà,
per poterlo controllare, mettere questo numero sul
bus address. |
 |
Non tutte le linee del
bus address sono
coinvolte nelle operazioni verso i dispositivi di Input e di Output. |
 | Sebbene non sia un'affermazione assoluta, nella gran parte
dei casi l'indirizzo del dispositivo concorrente
sarà predisposto nel registro DX che, con
i sui 16 bit è più che sufficiente per esprimerlo; in senso figurato si può
parlare di nome del dispositivo, sottolineando
che ogni periferica sarà identificabile con un numero
esadecimale unico e dedicato. |
 | Come per la lettura
o la scrittura della
memoria anche quella dei
dispositivi si realizza facendo eseguire
al processore un'istruzione specifica. |
 | Ora però il flusso dei dati è legato all'istruzione stessa:
la periferica fornisce il dato al processore con l'istruzione
IN, e lo riceve con l'istruzione
OUT:
 | l'istruzione
IN AL,DX
si legge così: metti in AL il dato
proveniente dalla periferica il cui indirizzo è indicato dal contenuto di DX.
 | si tratta dunque di un'operazione di
lettura di periferica. |
 | obbliga il processore a scrivere sui primi 16 bit del
bus address l'indirizzo fisico ottenuto dal
contenuto del suo registro DX. |
 | non appena l'indirizzo è stabile il processore mette MEM/IO a 0
e RD a 0,
obbligando il dispositivo a copiare la sua informazione sul
bus dati. |
 | il processore si mette in attesa
sul bus dati per catturare l'informazione in arrivo e, non appena è
disponibile, la trascrive nel suo registro AL. |
 | se la periferica è lenta potrebbe anche
fornire in ritardo questo dato: la CPU
infatti non rimane in attesa all'infinito; per questa ragione, nelle
operazioni di IN dai dispositivi,
possono essere necessarie interfacce più
efficienti. |
 | se il processore fosse un 8086
e il contenuto del suo registro DX
fosse 0379H , sul
bus address verrebbe posto il numero
fisico 00379H (a 20 bit) e sul
bus dati (e poco dopo, in
AL) verrebbe a trovarsi il byte (8 bit)
proveniente dal
Registro
d'ingresso della porta parallela. |
|
 | l'istruzione
OUT DX, AL si legge così:
spedisci alla periferica il cui indirizzo è
indicato dal contenuto di DX il
dato contenuto nel registro AL.
 | si tratta dunque di un'operazione di
scrittura di periferica. |
 | obbliga il processore a scrivere sui primi 16 bit del
bus address l'indirizzo fisico ottenuto dal
contenuto del suo registro DX. |
 | poichè il dato gli appartiene (provenendo da un suo
registro, AL) il processore lo copia
immediatamente sul bus dati, a
disposizione del dispositivo d'uscita |
 | dopo qualche istante (non appena indirizzo e dato sono
stabili) il processore mette MEM/IO a
0 e WR a
0, avvisando la periferica che il dato è
pronto sul bus dati, a sua
disposizione |
 | se la periferica è lenta potrebbe anche
perdere questo dato: esso non è infatti
disponibile all'infinito; per questa ragione, nelle operazioni di
OUT verso i dispositivi, possono
essere necessarie interfacce più efficienti. |
 | se il processore fosse un 8086
e il contenuto del suo registro DX
fosse 0378H , sul
bus address verrebbe posto il numero
fisico 00378H (a 20 bit) e sul
bus dati (assunto da
AL) verrebbe a trovarsi il byte (8 bit)
destinato al
Registro
d'uscita della porta parallela. |
|
|
 | La potenza indiscussa dell'Assembly
rispetto ad ogni altro
linguaggio di programmazione sta nella sua capacità di intervenire nei punti
più sensibili del personal computer, mediante l'indirizzamento
diretto dei dispositivi. |
 | L'uso diretto di questo strumento va comunque esercitato
con molta attenzione e con la consapevolezza
di quello che si andrà a fare... |
 | L'elenco degli
indirizzi dei principali dispositivi di un PC è disponibile
cliccando qui. |
©
2001-2010 - Studio Tecnico
ing. Giorgio OBER
Tutti i diritti sono riservati
|