Differenza tra accesso mappato alla porta e mappato alla memoria?


19

Qualcuno può spiegare qual è la differenza tra mappatura delle porte e mappatura della memoria e che cosa hanno entrambi i risultati? Perché la porta è mappata, in che modo differisce nella struttura dalle mappe di memoria e c'è qualche ragione per cui molte architetture usano entrambe? Inoltre, cos'è una "porta" in questo senso, perché porta può significare cose diverse in contesti diversi?

Esempio: port forwarding, porta come endpoint di comunicazione, "mapping delle porte".

Di 'che scrivo OUT sulla porta 400h (fittizia; solo per esempio) (come in x86-64, ecc.).

Cosa o dove sto scrivendo se non è in memoria? Come viene mappata una "porta" e che cos'è in questo senso?



Risposte:


24

Gli I / O associati alla memoria e gli I / O associati alla porta sono due metodi complementari per l'I / O.

I / O mappati in memoria

Nei sistemi mappati in memoria, si accede al dispositivo I / O come se fosse parte della memoria. Loade i Storecomandi vengono eseguiti per la lettura e la scrittura su dispositivi I / O, proprio come vengono utilizzati per la memoria (il mapping della porta ha comandi speciali per l'I / O). Ciò significa che i dispositivi I / O utilizzano lo stesso bus degli indirizzi della memoria, il che significa che la CPU può fare riferimento alla memoria o al dispositivo I / O in base al valore dell'indirizzo. Questo approccio richiede l'isolamento nello spazio degli indirizzi: vale a dire, gli indirizzi riservati per l'I / O non dovrebbero essere disponibili nella memoria fisica.

Di seguito è riportata l'immagine di un semplice sistema informatico di base . Il caso è molto più complicato nei sistemi contemporanei.

inserisci qui la descrizione dell'immagine


I / O mappato alla porta

Secondo Wikipedia

Gli I / O con mappatura delle porte spesso utilizzano una classe speciale di istruzioni CPU specificamente per l'esecuzione degli I / O. Questo si trova sui microprocessori Intel, con le istruzioni IN e OUT. Queste istruzioni possono leggere e scrivere da uno a quattro byte (outb, outw, outl) su un dispositivo I / O. I dispositivi I / O hanno uno spazio di indirizzi separato dalla memoria generale, o realizzato da un pin "I / O" aggiuntivo sull'interfaccia fisica della CPU o da un intero bus dedicato all'I / O. Poiché lo spazio degli indirizzi per l'I / O è isolato da quello per la memoria principale, questo viene talvolta definito I / O isolato.


Per quanto riguarda i vantaggi e gli svantaggi: poiché i dispositivi periferici sono più lenti della memoria, la condivisione dei dati e dei bus degli indirizzi può rallentare l'accesso alla memoria. D'altro canto, grazie alla semplicità I / O fornita dai sistemi mappati in memoria, la CPU richiede meno logica interna e questo aiuta a implementare CPU più veloci, economiche e meno dispendiose. La logica è simile a quella dei sistemi RISC: ridurre la complessità, ottenere un sistema più dedicato e robusto che è abbastanza utile per i sistemi integrati, ad esempio.

Al contrario (sempre da Wiki):

Le istruzioni di I / O con mappatura delle porte sono spesso molto limitate, spesso prevedono solo operazioni di caricamento e memorizzazione semplici tra i registri della CPU e le porte di I / O, quindi, ad esempio, per aggiungere una costante a un registro di dispositivi con mappatura delle porte richiederebbe tre istruzioni: leggere la porta su un registro CPU, aggiungere la costante al registro CPU e riscrivere il risultato sulla porta.

Consiglio vivamente di leggere l'articolo wiki per ulteriori informazioni.


Per rispondere a una delle tue domande:

Cosa o dove sto scrivendo se non è in memoria?

Si sta scrivendo nei registri dell'interfaccia I / O tramite il bus dati, che in seguito (quando pronto) invia i dati al dispositivo I / O effettivo. Di seguito è riportata un'immagine dell'interfaccia di un dispositivo I / O di esempio.

inserisci qui la descrizione dell'immagine


Cosa significa ciò che scrivi per la memoria mappata "Questo approccio richiede l'isolamento nello spazio degli indirizzi: vale a dire, gli indirizzi riservati per l'I / O non dovrebbero essere disponibili nella memoria fisica". Vuoi dire che gli indirizzi riservati agli I / O sono nella memoria principale e non disponibili per i non I / O. Chiaramente gli indirizzi IO e non-IO sono memoria fisica. Non esiste una memoria che non sia fisica. (A meno che tu non creda nelle argomentazioni di William Lane Craig, cioè che una cosa può avere un cervello e una memoria non fisici!).
barlop

1
e quando scrivi questo "Stai scrivendo nei registri dell'interfaccia I / O attraverso il bus dati, che in seguito (quando pronto) invia i dati al dispositivo I / O effettivo. Di seguito è riportata un'immagine di un I / O di esempio dispositivo." Non sei chiaro se il "registro" IO sia nel dispositivo, suppongo che se lo chiami registro sembra che sia nel dispositivo. Ma poi scrivi "..che più tardi (quando pronto) invia i dati al dispositivo I / O effettivo" Quindi non è chiaro dove stai dicendo che si trovano queste posizioni di memoria. Sia che si trovino all'interno del dispositivo, sia all'esterno del dispositivo ... o mai all'esterno del dispositivo.
barlop

1
Heads up: ho raccolto quelli da quello che ho imparato nella lezione sui microprocessori e alcuni da Wiki. Detto questo, ciò che intendo con il quale hai chiesto nel tuo primo commento è che: "Gli indirizzi IO e gli indirizzi non IO sono memoria fisica" non è chiaro come pensi. In realtà (per quanto ne so, per quanto mi ha insegnato) indirizzo decoder attiva l'interfaccia IO quando viene specificato l'indirizzo IO, il che significa che quando si fornisce un indirizzo, dovrebbe non essere nel range di indirizzo fisico, ad esempio, , $ 0000 - $ 00FF per fisico e $ 0100 - $ 01FF per IO (ignora l'importo, limita solo i limiti).
Varaquilex,

@barlop Per la tua seconda domanda, sei proprio qui, quello che volevo dire era "Di seguito un'immagine di un esempio di interfaccia del dispositivo I / O ". L'ho corretto nella modifica che ho appena apportato. Spero che la modifica abbia eliminato la confusione. Altrimenti, chiedi di più. Proverò a rispondere il meglio possibile.
Varaquilex,

1
@barlop Il punto della posizione della memoria è ambiguo nella maggior parte dei post e della letteratura che ho incontrato. O presumono che tu lo sappia già o non lo sanno davvero. Credo che la risposta sia in queste parole da LDD3 ch. 9: "La memoria I / O è semplicemente una regione di posizioni simili alla RAM che il dispositivo mette a disposizione del processore tramite il bus." (corsivo aggiunto) Vale a dire la memoria e / o i registri si trovano sul dispositivo. La porta I / O e la memoria I / O sono solo i 2 modi in cui il sistema rende tali posizioni disponibili per il software.
orodbhen,

2

In I / O con mappatura della memoria (semplicemente MMIO), i dispositivi sono accessibili tramite istruzioni che sono effettivamente destinate ad accedere alla memoria. Ogni dispositivo ottiene determinati indirizzi di memoria. Tuttavia, quando si tenta di leggere o scrivere in questa parte della memoria, un determinato dispositivo (probabilmente il Northbridge) lo invia invece al dispositivo correlato. Anche se il computer non ha memoria sufficiente per un tale indirizzo (poiché gli indirizzi MMIO sono in genere molto elevati), non importa come la memoria fisica (quella è quella che vedi quando guardi la scheda madre, quella conosciuta come RAM ) non è nemmeno correlato. Se si dispone di RAM sufficiente per l'indirizzo, viene mappato su uno non I / O superiore o semplicemente perso, il che significa che non è possibile leggere o scrivere lì.

L'I / O mappato alla porta (semplicemente PMIO) è molto diverso. Sono disponibili diverse istruzioni per leggere e scrivere sulle porte. Esiste uno spazio indirizzo porta proprio come lo spazio indirizzo memoria in cui gli indirizzi sono indirizzi I / O che comunicano effettivamente con i dispositivi o sono semplicemente non validi. PMIO può essenzialmente essere pensato come un MMIO con uno spazio di indirizzi di memoria separato solo per l'I / O.


"PMIO può essenzialmente essere pensato come un MMIO con uno spazio di indirizzi di memoria separato solo per l'I / O." - Lo spazio degli indirizzi è un concetto così semplice e basilare, perché affronti un'analogia fuorviante con la tua risposta altrimenti ragionevole? Quell'analogia fuorviante non cambia i fatti: ad esempio ci possono essere altri spazi di indirizzi oltre a uno "spazio di indirizzi di memoria".
segatura

1

Con nomi come "segnale I / O" e "mappatura della memoria" tutto è reso molto più complicato di quanto non sia in realtà, e quindi dà alla persona l'impressione che ci sia molto di più e copre un argomento avanzato. La tendenza ora è che le persone lo vedono come qualcosa di nuovo. Ma questo è molto lontano dal caso. Perfino Babbage nel 1830 guidava la sua stampante, questo aveva bisogno di un segnale I / O, sebbene fatto da un axel e una ruota dentata. Ad esempio nelle macchine di Hero of Alexandria 2000 anni fa o nei teatri fino ai tempi della Grecia, tiravano sempre una corda da una serie di corde diverse per controllare le luci o lo scenario, ogni corda è come una linea di ingresso e uscita, è come così semplice, l'indirizzo è "quale linea", ovvero quale cosa, memoria o dispositivo stiamo scegliendo,

Sebbene i grandi computer mainframe che riempivano gli edifici di armadi, usavano cose come 64 bit negli anni '40, e quindi si occupavano della mappatura degli I / O proprio allo stesso modo di tanto tempo fa, e..g Konrad Zuse e il suo computer delle dimensioni di una stanza usavano il floating punto che aveva circa 20 cifre in decimale negli anni '30 e che doveva guidare cose come la sua stampante, i suoi vari indicatori di lampadina e i suoi interruttori. Ma su minuscoli microprocessori la storia è diversa che non sono stati immaginati fino agli anni '60 e costruiti fino al 1971. Tutte queste tecniche che usano la logica a 8 bit negli anni '80, sono state usate per microprocessori a 4 bit negli anni '70, 2 bit negli anni '60 e sono state usate a 16 bit negli anni 90 ' s quando tutti hanno iniziato a prendere un computer e quindi perché ora era di fronte a loro hanno iniziato a discutere di questo I / O e argomento di mappatura della memoria per la prima volta, e sembrava essere qualcosa di nuovo che è arrivato con l'avvento di Internet; poi abbiamo avuto 32 bit negli anni '00 e 64 bit negli anni '10, il che ha causato discussioni infinite di memoria lungo le linee di dati. Per rispondere alla tua domanda parlerò dei chip che gli appassionati di elettronica hanno acquistato 30-40 anni fa, come ho fatto in quel momento, poiché in seguito le cose sono diventate così avanzate che non sono stato in grado di costruire con i chip successivi, ma il i principi sono gli stessi adesso, i cancelli sono semplicemente nascosti all'interno di chip con scatola nera più grandi che incorporano altri perni che gestiscono queste operazioni procedendo molto più in parallelo (ad esempio abilitando molti chiavistelli ottali,

Bene, non so nulla di tutte le nuove lingue o di come sia sui PC moderni ora, ma posso dirti com'era ai vecchi tempi quando costruivo computer con chip.

Tutte le mappature I / O e la mappatura della memoria significano in termini semplici, se si crea un carico di esempio di lampadine per qualche celebrazione e si hanno fili che vanno a ciascuno e si chiamano le posizioni di memoria delle lampadine, (cioè le lampadine rappresentano la memoria nella RAM, sia acceso o spento, e se selezioni la posizione 0 ottieni filo 0, posizione 1, filo 1, loc 2 filo 2 e così via) se hai aggiunto altri fili, ad esempio un filo è una campana, quella particolare posizione non è un ricordo è un dispositivo a cui viene emesso, usando il comando OUT, per farlo squillare. Ma è visto come una posizione di memoria dal punto di vista del computer, perché arriva allo stesso modo come un cavo per la MPU. Se è stato aggiunto un altro filo che era un interruttore gestito esternamente, si tratta di un dispositivo I / O, che sarebbe un'istruzione IN per il PC. Quindi questo è chiamato I / O mappato I / O.

Ora sui computer, i fili sui bus rappresentano linee di indirizzo o linee dati, MA sono in binario, cioè con 2 fili puoi avere 00 01 10 11 cioè 4 combinazioni 2 ^ 2, quindi con 8 linee 2 ^ 8 = 256 possibilità, con 20 linee 2 ^ 20 = 1048576 con 30 linee 2 ^ 30 = 1073741824 (1 concerto) di possibilità con 30 linee. Questo è il motivo per cui si chiama MAPPED, piuttosto che dire semplicemente I / O e memoria, stanno dicendo I / O mappato e memoria mappato, perché si stanno mappando i fili COME UNA COMBINAZIONE e si codificano binariamente. Quindi, se diciamo che avevi 2 fili, 4 combinazioni, non possono essere semplicemente collegati alle lampadine (per non parlare dell'attuale amplificazione richiesta dalle piccole tensioni della MPU e della prevenzione della corrente di feedback), ma i 2 fili hanno per passare attraverso un decodificatore (usavamo un 138 per decodificare 3 linee in 8 linee, un 164 per decodificare 4 linee binarie in 16 linee. ) Una volta attraverso il decodificatore queste 2 linee, ad esempio A0 e A1 (indirizzo 0 e indirizzo 1 (LINEE)), diventano 4 linee (accese o spente) per la particolare lampadina che stai guidando (nel caso su un computer, LA MEMORIA), ma in alcuni casi queste posizioni invece selezionano alcuni dispositivi di Input / output e dicono invece "usami", cioè come la memoria, una volta localizzati, i dati vengono quindi passati in un modo o nell'altro (usando una logica a tre stati intelligente per tagliare le tensioni sulla strada ogni volta) sulle linee del bus dati D0..7 o D0..31 o qualunque sia la dimensione dei dati sul computer (hai un computer a 2 bit, 4 bit, 8 bit, 16 bit, 32 bit, 64 bit, 128 bit, 256 bit, computer, qualunque cosa computer che stai costruendo). Quindi i dati passano naturalmente dentro o fuori dalle linee dati alla memoria o al dispositivo I / O (SE è mappato in memoria), ma QUESTO NON DOVREBBE ESSERE CONFUSO CON LE istruzioni IN / OUT, QUESTO IN e OUT significa da alcuni ALTRI blocchi di memoria I / O, uno speciale blocco di memoria I / O all'interno della MPU assegnato appositamente solo per l'I / O, ovvero (non mappato in memoria), questo spazio I / O non sempre si ottiene su alcuni microprocessori, ad es. non penso che lo avessimo su un 6502, ma lo avessimo su uno z80. Un numero maggiore di chip artistici utilizzava solo la mappatura della memoria, ad esempio nelle console di gioco, ecc. I chip più sensibili ma poco interessanti (sono rimasti nel libro) vanno anche nello spazio I / O. L'I / O con mappatura della memoria sta aumentando la velocità poiché incorpora l'indirizzamento della memoria (che è superveloce per la RAM), quindi un computer di tipo grafico utilizza solo la mappatura della memoria per l'I / O per ottenere la velocità. Gli I / O mappati I / O sono assegnati a porte lente, ad es. Rs232 o porta parallela, e utilizzano i comandi IN OUT. e. (non mappato in memoria), questo spazio I / O non si ottiene sempre su alcuni microprocessori, ad esempio non penso che lo avessimo su un 6502, ma lo avessimo su uno z80. Un numero maggiore di chip artistici utilizzava solo la mappatura della memoria, ad esempio nelle console di gioco, ecc. I chip più sensibili ma poco interessanti (sono rimasti nel libro) vanno anche nello spazio I / O. L'I / O con mappatura della memoria sta aumentando la velocità poiché incorpora l'indirizzamento della memoria (che è superveloce per la RAM), quindi un computer di tipo grafico utilizza solo la mappatura della memoria per l'I / O per ottenere la velocità. Gli I / O mappati I / O sono assegnati a porte lente, ad es. Rs232 o porta parallela, e utilizzano i comandi IN OUT. e. (non mappato in memoria), questo spazio I / O non si ottiene sempre su alcuni microprocessori, ad esempio non penso che lo avessimo su un 6502, ma lo avessimo su uno z80. Un numero maggiore di chip artistici utilizzava solo la mappatura della memoria, ad esempio nelle console di gioco, ecc. I chip più sensibili ma poco interessanti (sono rimasti nel libro) vanno anche nello spazio I / O. L'I / O con mappatura della memoria sta aumentando la velocità poiché incorpora l'indirizzamento della memoria (che è superveloce per la RAM), quindi un computer di tipo grafico utilizza solo la mappatura della memoria per l'I / O per ottenere la velocità. Gli I / O mappati I / O sono assegnati a porte lente, ad es. Rs232 o porta parallela, e utilizzano i comandi IN OUT. i chip più sensibili ma poco interessanti (sono rimasti nel libro) vanno anche nello spazio I / O. L'I / O mappato in memoria sta aumentando la velocità poiché incorpora l'indirizzamento della memoria (che è superveloce per la RAM), quindi un computer di tipo grafico utilizza solo il mapping di memoria per l'I / O per ottenere la velocità. Gli I / O mappati I / O sono assegnati a porte lente, ad es. Rs232 o porta parallela, e utilizzano i comandi IN OUT. i chip più sensibili ma poco interessanti (sono rimasti nel libro) vanno anche nello spazio I / O. L'I / O mappato in memoria sta aumentando la velocità poiché incorpora l'indirizzamento della memoria (che è superveloce per la RAM), quindi un computer di tipo grafico utilizza solo il mapping di memoria per l'I / O per ottenere la velocità. Gli I / O mappati I / O sono assegnati a porte lente, ad es. Rs232 o porta parallela, e utilizzano i comandi IN OUT.

Ora se invece di aggiungere due fili, se in realtà hai sostituito due fili che originariamente andavano alle lampadine e prendevano alcune di quelle lampadine e le sostituivano con altre cose, ad esempio una campana su uno e un interruttore su un altro, questi ora non sono referenziati (selezionato ) rispettivamente con le istruzioni IN e OUT, si fa riferimento accedendo a quella particolare posizione di memoria che seleziona quei fili (che erano originariamente lampadine). Quindi questo è I / O mappato in memoria.

I / O con mappatura di memoria significa che il bus reale dell'indirizzo che normalmente va alla memoria (la RAM), è collegato anche ad altri decodificatori (decodificatori logici) e quando rileva la particolare combinazione binaria di segnali di indirizzo, produce un output elevato , (ad esempio se hai avuto un carico di e e non cancelli, e hai detto, se questo e non quello e così via, usando i pin A0..A20 o qualunque dimensione sia il tuo bus di indirizzo), allora questo segnale alto ABILITA un fermo, (per un dispositivo particolare, come una porta seriale, una porta parallela), questo latch poi passa i dati sul bus dati, attraverso il dispositivo I / O. Questo è per scrivere sul dispositivo I / O. La lettura funziona in modo opposto, il dispositivo I / O, restituisce i dati e, se ricordo bene, invia la stessa identica combinazione di codici indirizzo sulle righe degli indirizzi.

Presumo, oggi deve funzionare allo stesso modo, tranne per il fatto che saranno solo più dati e linee di indirizzi.

Stai letteralmente CABLANDO l'I / O alle linee degli indirizzi. Quindi l'I / O è effettivamente MAPPATO nello spazio di memoria, come se fosse memoria. Ma un altro fermo impedisce ai pin di indirizzo di accedere al ram contemporaneamente, in modo da non avere tensioni di due indirizzi o fonti di dati sulla stessa linea, il che danneggerebbe i chip.

Con l'istruzione IN e OUT, ne abbiamo avuti 40 anni fa, sul chip z80. Questo è per casi speciali in cui il chip gestisce effettivamente l'I / O stesso in un modo diverso, cioè non è mappato in memoria. (ad es. con la memoria mappata, leggi o scrivi nella posizione della memoria, ma con IN e OUT stai già dicendo alla CPU che si tratta di un segnale I / O e non di memoria). Quindi, con l'istruzione IN / OUT, questo ha il suo spazio di indirizzi I / O (che è extra alla memoria del ram), questo Ram I / O, come sembra essere, ha un insieme di indirizzi uguali, eccetto che si accede direttamente al dispositivo tramite un decodificatore collegato a quegli indirizzi I / O e non si accede al dispositivo I / O dai pin di indirizzo standard, questo è per l'istruzione IN / OUT.

che in questo caso sono meglio passati come stringhe di codici ASCII per lettere e numeri. Questi comandi sono esattamente gli stessi di quelli utilizzati per le istruzioni IN e OUT in un ciclo in cui il conteggio è la lunghezza della stringa.

Se si accede, ad esempio, all'altoparlante del PC, si dovrebbe semplicemente trasmettere un dato alla volta utilizzando OUT.

Se stavi leggendo dalla porta parallela, dovresti eseguire IN e utilizzare il codice per l'indirizzo I / O della porta. Scrivendo su di esso, ad esempio per guidare vecchie stampanti o robotica con segnali elettronici, useresti il ​​comando OUT. La porta parallela e la porta seriale (vecchia RS232) sono porte tipiche utilizzate. L'RS232 è dati seriali, solo un bit consentito in entrata o in uscita, quindi se leggessi da un rs232, avresti solo 1 bit del byte che è rilevante, lo stesso con l'output. La velocità di trasmissione è di circa 17kHz max per un RS232, ma questi usavano molto l'elettronica, ai tempi in passato, costruivo circuiti RS232, ad esempio per leggere tensioni o pilotare microcontroller PIC. Ogni porta è denominata ad es. COM1 COM2 COM3 COM4 e hanno indirizzi I / O. Non sono sicuro a portata di mano qui, ma sono simili ad esempio 3F8h 378h (h = indirizzo esadecimale)

Non sono sicuro delle porte moderne, ma se stavi scrivendo su USB, molto probabilmente questo sarà I / O mappato in memoria per una maggiore velocità.

La porta della tastiera PS / 2, penso che questo usi l'istruzione IN, per leggere i dati dalla tastiera. Questo sostituisce il vecchio RS232, ma credo che abbia specifiche leggermente diverse.

Un'unità disco era di solito mappata in memoria, presumibilmente lo è ancora adesso, cioè non si guida un'unità disco con istruzioni IN / OUT, sarebbero troppo lenti. Ma le porte sono comunque lente, quindi non importa, ad es. Una stampante è lenta per quanto riguarda la velocità di trasmissione dati rispetto alla straordinaria ad es. 200 Megabyte / secondo richiesta da un disco rigido. Un altoparlante, ha solo bisogno della frequenza del suono circa 10 o 20, diciamo che 20kHz sarebbe ampio per un cicalino, quindi è I / O. Le cose lente usano l'I / O, le istruzioni IN / OUT. Quindi probabilmente l'USB è ora mappato in memoria, dovrai verificarlo.

Un modo migliore per capirlo è questo. Sui vecchi computer degli anni '80 a volte volevi controllare alcuni dispositivi che avevi costruito e non avevi specifiche per le porte di output (come in quei giorni il produttore lo teneva nascosto in modo che certe aziende come le società di joystick e cartucce) potessero andare avanti nel mercato con qualche accordo commerciale). Quello che dovevi fare era aprire il computer e letteralmente saldare i fili ad alcuni punti sul bus degli indirizzi, ad esempio hai saldato tre fili ad alcuni punti del circuito a una distanza di sicurezza (in modo da non danneggiare il chip con il calore), quelli punti collegati dal layout della scheda a es. pin A15 A7 e A1 sul microprocessore. E dovresti collegare anche di solito una linea MREQ (una linea di richiesta di memoria e / o la linea RD / WR per creare un segnale più ordinato e aggiungerla nella logica e / o no, ma se tu fossi intelligente potresti semplicemente farlo con le linee degli indirizzi) E poi hai collegato questi tre fili + questo segnale di tipo Ready aggiuntivo (ad esempio MREQ RD o WR line per dare un attivo basso o alto (che avrebbe bisogno di un possibile extra NOT gate qui) per dire che DATA è pronto sulla linea ADESSO) attraverso un gate AND a 4 ingressi, che ha fornito un'uscita a un led attraverso un resistore da 200 ohm, hai la tua memoria I / O ad alta velocità mappata su una luce a led , che è possibile agganciare tramite un fermo SR o un blocco tipo D per memorizzarlo esternamente in una memoria da 1 bit su un circuito. Qui 15 è la linea 32K, 7 è la linea 64, 1 è la linea 2 (il binario funziona con potenze di 2, quindi A1 è 2 ^ 1, A7 è 2 ^ 7 e A15 è 2 ^ 15), quindi se tu indirizzo indirizzato 32768 + 64 + 2 = 32834 = F041 in esadecimale, usando LDA o STA o LD su vecchie MPU nell'assemblatore, si dovrebbe produrre su questo led, si accenderebbe se si dicesse al resistore circa 100 ohm. Quindi hai fatto I / O mappati in memoria, che per quanto sia semplice, potresti farlo oggi saldando allo stesso modo le tue linee indirizzo mpu. Ma non lo faresti ora a causa della delicatezza dei circuiti. Ma potresti anche unire le linee dati D0..7 (ai vecchi tempi) o dire d0..31 ora per 32 bit su un vecchio PC 486. Quindi, se hai indirizzato quella posizione nel codice macchina facendo caricare l'accumulatore con il valore 8 (mov ax, 8 oggigiorno) o memorizzi quel valore dell'accumulatore in una posizione dell'indirizzo (mov F041h, accumulatore ax, oggi anche oggi potresti ottenere che ha portato a venire On. Nota, l'8, nell'esempio è ciò che si trova sul bus dati, in questo caso particolare, non stiamo trasmettendo dati, stiamo solo abilitando il dispositivo specifico (il LED è acceso, se abbiamo selezionato quel dispositivo I / O, qui, solo un LED), quindi in questo esempio non importa quale numero abbiamo con quell'asse MOV, 8 istruzioni, potrebbe essere ad esempio mov ax, 243 e potremmo comunque abilitare il LED sulla linea F041h quando poi moviamo F041h, come poiché stiamo utilizzando lo stesso indirizzo. Vedete, ci sono linee di indirizzo e ci sono linee di dati. Quindi quando indirizzi 3F8 in COM1 o qualunque sia l'indirizzo, la mappa di memoria I / O sta semplicemente inviando un segnale ad una porta, ad esempio ps / 2, e un e gate sta controllando se hai 1110000100 sulle linee, cioè 11 è 3 1000 è F e 0100 è 8, vedere conversione da binario a esadecimale. Se le tensioni elevate appaiono in quelle posizioni di bit in cui è presente un 1, allora la porta, ad esempio rs232 o ps / 2, è impostata su attiva, ovvero è abilitata, questo abilita i latch, dal segnale di abilitazione chip CE o chip CS seleziona semplice. 8 istruzioni, potrebbe essere ad es. Mov ax, 243 e abiliteremmo ancora il LED sulla linea F041h quando poi eseguiamo mov F041h, poiché poiché stiamo utilizzando lo stesso indirizzo. Vedete, ci sono linee di indirizzo e ci sono linee di dati. Quindi quando indirizzi 3F8 in COM1 o qualunque sia l'indirizzo, la mappa di memoria I / O sta semplicemente inviando un segnale ad una porta, ad esempio ps / 2, e un e gate sta controllando se hai 1110000100 sulle linee, cioè 11 è 3 1000 è F e 0100 è 8, vedere conversione da binario a esadecimale. Se le tensioni elevate appaiono in quelle posizioni di bit in cui è presente un 1, allora la porta, ad esempio rs232 o ps / 2, è impostata su attiva, ovvero è abilitata, questo abilita i latch, dal segnale di abilitazione chip CE o chip CS seleziona semplice. 8 istruzioni, potrebbe essere ad es. Mov ax, 243 e abiliteremmo ancora il LED sulla linea F041h quando poi eseguiamo mov F041h, poiché poiché stiamo utilizzando lo stesso indirizzo. Vedete, ci sono linee di indirizzo e ci sono linee di dati. Quindi quando indirizzi 3F8 in COM1 o qualunque sia l'indirizzo, la mappa di memoria I / O sta semplicemente inviando un segnale ad una porta, ad esempio ps / 2, e un e gate sta controllando se hai 1110000100 sulle linee, cioè 11 è 3 1000 è F e 0100 è 8, vedere conversione da binario a esadecimale. Se le tensioni elevate appaiono in quelle posizioni di bit in cui è presente un 1, allora la porta, ad esempio rs232 o ps / 2, è impostata su attiva, ovvero è abilitata, questo abilita i latch, dal segnale di abilitazione chip CE o chip CS seleziona semplice. come da quando stiamo usando lo stesso indirizzo. Vedete, ci sono linee di indirizzo e ci sono linee di dati. Quindi quando indirizzi 3F8 in COM1 o qualunque sia l'indirizzo, la mappa di memoria I / O sta semplicemente inviando un segnale ad una porta, ad esempio ps / 2, e un e gate sta controllando se hai 1110000100 sulle linee, cioè 11 è 3 1000 è F e 0100 è 8, vedere conversione da binario a esadecimale. Se le tensioni elevate appaiono in quelle posizioni di bit in cui è presente un 1, allora la porta, ad esempio rs232 o ps / 2, è impostata su attiva, ovvero è abilitata, questo abilita i latch, dal segnale di abilitazione chip CE o chip CS seleziona semplice. come da quando stiamo usando lo stesso indirizzo. Vedete, ci sono linee di indirizzo e ci sono linee di dati. Quindi quando indirizzi 3F8 in COM1 o qualunque sia l'indirizzo, la mappa di memoria I / O sta semplicemente inviando un segnale ad una porta, ad esempio ps / 2, e un e gate sta controllando se hai 1110000100 sulle linee, cioè 11 è 3 1000 è F e 0100 è 8, vedere conversione da binario a esadecimale. Se le tensioni elevate appaiono in quelle posizioni di bit in cui è presente un 1, allora la porta, ad esempio rs232 o ps / 2, è impostata su attiva, ovvero è abilitata, questo abilita i latch, dal segnale di abilitazione chip CE o chip CS seleziona semplice. 11 è 3 1000 è F e 0100 è 8, vedere conversione da binario a esadecimale. Se le tensioni elevate appaiono in quelle posizioni di bit in cui è presente un 1, allora la porta, ad esempio rs232 o ps / 2, è impostata su attiva, ovvero è abilitata, questo abilita i latch, dal segnale di abilitazione chip CE o chip CS seleziona semplice. 11 è 3 1000 è F e 0100 è 8, vedere conversione da binario a esadecimale. Se le tensioni elevate appaiono in quelle posizioni di bit in cui è presente un 1, allora la porta, ad esempio rs232 o ps / 2, è impostata su attiva, ovvero è abilitata, questo abilita i latch, dal segnale di abilitazione chip CE o chip CS seleziona semplice.

Con un fermo è il pin Abilita E o Abilita uscita bassa attiva OE. Cioè con l'esempio sopra descritto usiamo gli indirizzi per selezionare (decodificando) QUALE dispositivo I / O vogliamo usare (cioè nell'esempio il LED si accende, se quel dispositivo I / O è selezionato. Quindi questa è la linea di abilitazione ALLORA, una volta selezionato il dispositivo I / O, THEN passa i dati dal bus dati (D0..7 ai vecchi tempi, o esempio D0..63 ora per un computer a 64 bit), tramite i blocchi ottali 373 nel vecchio giorni, si tratta di circuiti di infradito di tipo D che memorizzano i dati all'interno delle infradito. Con un bordo di clock alto attivo, i dati passano attraverso e sono memorizzati. Questo bordo di clock proviene dal segnale "DATA RDY" sul segnale di dati , questo ha vari nomi, non so come si chiama adesso. Quindi per 64 bit, abbiamo 8 chiusure ottali. E usano i dispositivi di chiusura bidirezionale per controllare i dati in entrambi i modi o in tre stati, in modo che quando il dispositivo I / O non viene utilizzato, le linee di dati siano nello stato di alta impedenza. Quindi quindi si seleziona il dispositivo I / O con una combinazione sulle righe dell'indirizzo, questo è il numero, ad es. 3f8h in OUT 3F8h, 7, e i dati, qui nell'esempio 7, sono ciò che viene passato sulle righe dati, in il comando OUT i dati passano OUT al blocco dati e vengono inviati al dispositivo I / O. Se avessi IN, eseguiresti un comando, ad esempio IN 3f8h, 800h, (mi aspetto, ma non conosco la sintassi dell'assemblatore x86), ciò che intendo è, per IN, stai inserendo i dati dal righe di dati (dopo aver selezionato l'indirizzo, ad esempio qui 3f7h, che seleziona QUESTO dispositivo I / O), questi dati provengono dal dispositivo I / O, tramite i flip flop di tipo D nel fermo dati (uno per ogni bit delle linee del bus dati), e viene immesso nei pin D0..7 o (D0..63 su PC moderni) sull'unità di microelaborazione MPU ). In questo esempio ho inserito IN 3f8h, 800h, per mostrare che una volta che i dati vengono inseriti, vengono archiviati nell'indirizzo 800h. La sintassi di x86 penso sia diversa, dovresti probabilmente fare IN 3f8h, ah o qualcosa di simile, cioè prima in un registro con i dati in arrivo, poi MOV per 800h, ah cioè spostare i dati in memoria posizione nella RAM, (se si desidera archiviarlo) o fare qualcos'altro con ah ecc. ah è un registro di esempio, potrebbe essere qualsiasi, al, bh, bl ecc. qualunque, ma controllare la sintassi, ogni sistema assembler è leggermente diverso, non sono un esperto di x86. Ancora una volta, sto usando 3f8h come indirizzo I / O di esempio, ci sono centinaia,

Considerando che quando si accede alla memoria (la RAM, ad esempio RAM statica a 64 byte e RAM dinamiche negli anni '70, SRAM 8K e DRAM negli anni '80, file di SIMMS ciascuna con pochi megabyte ciascuna (modulo di memoria in linea singola) negli anni '90 e adesso è sotto forma di moduli DDR contenenti moduli DIMM, moduli di memoria dual in line, non ho verificato ma l'ultimo probabilmente non ha dubbio che ciascuno abbia qualche gigabyte su ogni piccolo chip), se non è un indirizzo I / O (molto pochi indirizzi sono indirizzi I / O, al giorno d'oggi la memoria è milioni di volte o più probabilità di trovarsi nello spazio degli indirizzi rispetto agli I / O su un PC moderno), usi ancora le stesse istruzioni di lettura dei dati di scrittura nella memoria, ma non lo sei pilotando alcuni circuiti logici esterni che cercano quei bit, invece quei pin di indirizzo e dati sono collegati direttamente ai chip RAM.

Nel codice macchina, l'I / O e l'indirizzamento della memoria sembrano uguali, come se fossero entrambi accessi alla memoria, ma ciò che accade fisicamente è totalmente diverso nel circuito elettronico reale.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.