In che modo il caricamento / memorizzazione dei byte è implementato dalla CPU?

1

So che nella macchina a 32 bit, la CPU legge dalla memoria 32 bit alla volta. dato che anche in questo caso i registri sono a 32 bit, posso capire come funziona.

Quello che non capisco è come la cpu implementa le istruzioni di caricamento di 1 byte. carica l'intera parola in cui si trova il singolo byte nel registro, quindi esegue una sorta di "spostamento dei byte", oppure la CPU può caricare un singolo byte, in questo caso quando avviene il mascheramento dei byte, è fino a quando il il byte è stato caricato nel registro o si verifica quando il byte viene inviato attraverso il bus dati?

P.S. La CPU che sto usando è MIPS, le istruzioni di cui sto parlando sono: lb o lbu

    
posta AlexDan 28.04.2014 - 18:47
fonte

3 risposte

3

Dipende.

Alcune CPU (CISC) hanno carichi di byte che possono indirizzare i singoli byte in modo che il byte di interesse siano gli 8 bit di basso ordine sul bus; il resto dei bit è mascherato.

Molte CPU RISC eseguono word-load, barrel shift, mentre altre eseguono word-load, bit shift e nel mezzo, sono quelle che fanno il word-load, il byte shift.

Alcune CPU eseguiranno carichi di parole consecutivi quando un valore di due byte si estende su un limite di 32 bit, spostando e mascherando le parole insieme.

Le famiglie di CPU possono eseguire diverse implementazioni a seconda del particolare modello di processore. Questo spiega perché non esiste una descrizione dell'attuazione; è una decisione a cui interessa solo il venditore.

Per quanto riguarda le prestazioni, dovrai solo testarlo sulla particolare CPU e configurazioni di memoria che ti interessano.

    
risposta data 29.04.2014 - 04:41
fonte
1

In molte macchine a 32 bit senza una cache di memoria, la memoria sarà divisa in quattro sezioni a 8 bit, ognuna delle quali sarà connessa a otto bit del bus di sistema e avrà una sua logica di "abilitazione" . Se un processore esegue un'istruzione di memorizzazione a 16 bit, abiliterà due delle otto sezioni e produrrà i dati appropriati sui fili che si collegano ad essi. Le altre due sezioni non saranno abilitate, quindi i loro contenuti non saranno interessati.

Si noti che mentre alcune macchine suddividono entrambe le operazioni di scrittura e lettura nello stesso modo, in realtà è necessario solo che il sottosistema di memoria consenta scritture "parziali". Se il processore esegue un caricamento a 16 bit, si aspetterà di ricevere dati dalle due sezioni a 8 bit che contengono l'indirizzo in questione, ma non gli interesserà se anche le altre sezioni forniranno dati. Ogni sezione ha il proprio set separato di otto pin di dati e il processore ignorerebbe qualsiasi dato inserito nei set non utilizzati.

Si noti inoltre che nei sistemi con cache di memoria, le cose si complicano. A seconda dell'architettura di caching, un archivio a 16 bit potrebbe far sì che i due banchi di memoria che si stanno scrivendo siano impostati per "scrivere" mentre quelli che non lo sono sarebbero impostati per "leggere"; tutti i 32 bit della cache sarebbero quindi impostati su "write" (i 16 bit catturerebbero i dati memorizzati dalla CPU, mentre gli altri 16 afferrerebbero l'altra metà della stessa parola, recuperati dalla memoria). In alternativa, potrebbe scrivere solo 16 bit nella cache, ma impostare i flag che indicano che gli altri 16 bit di quella parola sono "sconosciuti". Nonostante questa complessità, la maggior parte dei progettisti di CPU ritiene che la pulizia semantica delle istruzioni di "memorizzazione" a 8 e 16 bit valga il costo.

    
risposta data 03.11.2014 - 20:58
fonte
0

La CPU può leggere un singolo byte, ma non solo quel byte. Nel termine più ampio, il byte potrebbe non essere ancora in memoria, quindi è necessario caricare una pagina, aggiornare la mappa della memoria e memorizzare un blocco nella cache (anche la cache è nella CPU), quindi può essere caricata.

Se hai bisogno di meno di una parola, l'estensione del segno potrebbe essere eseguita come menzionato in set di istruzioni MIPS . La CPU carica la parola macchina (32 bit) e, a seconda dell'istruzione, esegue l'estensione del segno o annulla i byte non interessanti. Quindi, non è semplicemente "byte shifting". Le operazioni vengono eseguite sul registro, quindi dopo il caricamento.

    
risposta data 29.04.2014 - 04:23
fonte

Leggi altre domande sui tag