Inizia con qualcosa di simile:
http://www.cpu-world.com/info/Pinouts/8088.html
State imparando le istruzioni per un tempo molto vecchia tecnologia dei chip/architettura. Indietro quando tutto tranne il core del processore era off-chip.Vedi le linee di indirizzo e le linee di dati e c'è una riga di lettura RD e riga di scrittura WR e linea IO/M?
Esistono due tipi di istruzioni basate sulla memoria e I/O in base al fatto che c'erano spazi indirizzabili, facilmente decodificati dall'IO/M IO o dalla memoria.
Ricordate che la logica di incollaggio 74LSxx, molti fili e molti chip per collegare una memoria al processore. E la memoria era solo quel ricordo, grandi chip costosi. Se avessi una periferica necessaria a fare qualcosa di utile, avevi anche i registri di controllo, la memoria potrebbe essere i dati dei pixel, ma da qualche parte dovevi impostare i limiti di scansione orizzontale e verticale, questi potrebbero essere singoli latch 74LSxx, NON ricordi, avere io/O mappato I/O salvato su entrambe le logiche di colla e ha molto senso dal punto di vista del programmatore, evitando anche di cambiare i registri dei segmenti per mirare alla finestra della memoria 64K, ecc. Lo spazio degli indirizzi di memoria era una risorsa sacra, specialmente quando volevo limitare la decodifica dell'indirizzo a pochi bit perché ogni bit costava un certo numero di chip e fili.
Come l'I/O mappato I/O mappato in memoria I/O big e little endian era una guerra religiosa. E alcune delle risposte che vedrai alla tua domanda rifletteranno le opinioni forti che sono ancora in circolazione oggi nelle persone che l'hanno vissuta. La realtà è che ogni chip sul mercato oggi ha più busess per varie cose, non si blocca il tuo orologio in tempo reale dal bus di memoria ddr con un decodificatore di indirizzi. Alcuni hanno persino bus di dati e istruzioni completamente separati. In un certo senso, Intel ha vinto la guerra per il concetto di spazi di indirizzi separati per diverse classi di cose anche se il termine porta I/O è malvagio e cattivo e non dovrebbe essere pronunciato per dire 20-30 anni in più. Hai bisogno della gente della mia età che l'abbia vissuta per essere ritirata o scomparsa prima che la guerra sia davvero finita. Anche il termine I/O mappato in memoria è una cosa del passato.
Questo è davvero tutto ciò che è sempre stato, un singolo indirizzo decodifica un bit all'esterno del chip Intel che è stato controllato mediante l'uso di istruzioni specifiche. Usa un set di istruzioni in cui il bit era in uso una serie di istruzioni che il bit era spento. Vuoi vedere qualcosa di interessante da un'occhiata al set di istruzioni per i processori xmos xcore hanno un sacco di cose che sono istruzioni invece di registri mappati in memoria, ci vuole questo I/O mappato I/O cosa ad un livello completamente nuovo.
Dove è stato utilizzato è come descritto sopra, si inserirebbero cose che avevano senso e si poteva permettersi di masterizzare lo spazio di indirizzamento della memoria per pixel video simili, memoria di pacchetti di rete (forse), memoria di schede audio (beh non sia ma si potrebbe avere), ecc. E i registri di controllo, lo spazio di indirizzamento relativo ai dati era molto piccolo, forse solo pochi registri, sono stati decodificati e utilizzati nello spazio I/O. le ovvie sono/erano le porte seriali e le porte parallele che avevano poca o nessuna memoria, avresti potuto avere un piccolo fifo sulla porta seriale se non altro.
Perché lo spazio indirizzo era scarso non era raro ed è ancora visto oggi di avere la memoria nascosta dietro due registri un registro indirizzo e di un registro di dati, questa memoria è disponibile solo attraverso questi due registri, non è la memoria mappata. quindi scrivi l'offset in questa memoria nascosta nel registro degli indirizzi e leggi o scrivi il registro dei dati per accedere al contenuto della memoria. Ora perché intel aveva le istruzioni rep e si poteva combinarlo con insb/w outsb/w il decodificatore hardware sarebbe (se tu avessi gente simpatica/amichevole che lavora con te) autoincrementare l'indirizzo ogni volta che hai fatto un ciclo I/O. Quindi è possibile scrivere l'indirizzo di partenza nel registro degli indirizzi e fare un rep outsw e senza masterizzare i cicli di fetch e decode clock nel processore e sul bus di memoria si potrebbe spostare i dati abbastanza velocemente dentro o fuori dalla periferica. Questo genere di cose è ora considerato un difetto di progettazione grazie ai moderni processori super scalari con recuperi basati sulla previsione delle filiali, l'hardware può leggere in qualsiasi momento senza avere nulla a che fare con l'esecuzione del codice, pertanto non è MAI necessario incrementare automaticamente un indirizzare o cancellare i bit in un registro di stato o modificare qualcosa come risultato di una lettura in un indirizzo.
I meccanismi di protezione incorporati nel 386 e al presente rendono davvero molto facile l'accesso I/O dallo spazio utente. A seconda di cosa fai per vivere, cosa produce la tua azienda, ecc. Puoi sicuramente usare la famiglia di istruzioni dallo spazio utente (programmi applicativi in windows e linux, ecc.) O spazio kernel/driver, è il tuo scelta. Puoi anche fare cose divertenti come approfittare della macchina virtuale e usare le istruzioni I/O per parlare con i driver, ma questo probabilmente farebbe incazzare la gente sia nei mondi windows che linux, che driver/app non lo farebbero molto lontano. Gli altri poster sono corretti in quanto probabilmente non avrai mai bisogno di usare queste istruzioni a meno che tu non stia scrivendo i driver, e probabilmente non scriverai mai driver per dispositivi che usano I/O mappato I/O perché sai ... il i driver per questi dispositivi legacy sono già stati scritti. I progetti moderni hanno sicuramente I/O ma sono tutti mappati in memoria (dal punto di vista dei programmatori) e utilizzano istruzioni di memoria e non istruzioni I/O. Ora il lato opposto se questo è DOS non è sicuramente morto, a seconda di dove potresti costruire macchine per il voto o pompe di benzina o registratori di cassa o una lunga lista di apparecchiature basate su DOS. Infatti, se lavori da qualche parte per la costruzione di periferiche o schede madri PC o PC, gli strumenti basati su DOS sono ancora ampiamente utilizzati per testare e distribuire aggiornamenti del BIOS e altre cose simili. Mi imbatto ancora in situazioni in cui devo prendere il codice da un programma di test DOS corrente per scrivere un driver linux. Proprio come non tutti quelli che possono lanciare o prendere una partita di football nella NFL, la percentuale di lavoro del software che coinvolge questo genere di cose è pochissima. Quindi è ancora sicuro dire che queste istruzioni che hai trovato probabilmente non ti saranno più utili di una lezione di storia.
Potete consigliare un libro dove posso leggere di più su questo? la tua risposta è grande, grazie! –
Penso di aver imparato per lo più questa roba in un corso di architettura informatica presso la mia università, circa 30 anni fa; quindi non posso citare un libro da cui ho preso questa roba, scusa! Tuttavia, su Google google per alcune parole chiave pertinenti, ho trovato molti di loro in una pagina in un libro: http://www.amazon.com/Microprocessors-Microcomputer-Based-System-Mohamed-Rafiquzzaman/dp/0849344751 I non posso dirti nulla del libro se non che è del 1995 e non potrei vedermi pagare $ 149 per questo. Il tuo chilometraggio può variare, ovviamente. –
Ben fatto. Grazie per questa spiegazione. Sono stato a lungo confuso dalla nozione di IO spazio come mi è stato insegnato rigorosamente con MMIO. Il fatto che memoria e IO possano essere pensati come indirizzabili a loro stessi mi lascia un po 'imbarazzato per non averlo capito prima. – sherrellbc