2012-09-18 12 views
11

Capisco perfettamente cosa significhi il sistema a 32 o 64 bit. quindi in pratica tutti i registri o la lunghezza della parola sono 32 o 64 bit.Come un singolo byte di memoria è accessibile dalla CPU in una memoria a 32 bit e processore a 32 bit

Per semplicità prendiamo un sistema a 32 bit e diciamo che sto scrivendo un programma in C. se dichiaro un tipo int dico "int a = 5;" quindi una posizione di memoria di una lunghezza di parola è riservata per var a. così quando mai voglio accedervi posso farlo usando l'indirizzo di parola per quella posizione di memoria.

Ma diciamo che ho 4 caratteri "char a, b, c, d;" dato che è un byte ognuno di essi è collocato in una parola, quindi cosa devo fare se voglio accedere solo a char b? (dicendo che la memoria è byte indirizzabile) ora dire b è il terzo byte nella parola ... .quando arriva l'autobus? non è il 3 ° byte cablato alla 17 ° alla 24 ° linea del bus? quindi cosa succede alle altre 24 linee quando si accede solo a b?

+0

Controllare il linguaggio della macchina, linguaggio assembly, per quella particolare CPU, in particolare le parti sull'indirizzamento della memoria e registri CPU. – theglauber

+1

@deepak, Sulle piattaforme a 32 bit che supportano l'indirizzamento dei byte, è possibile scrivere un singolo byte nella memoria senza gli altri tre byte scritti (secondo i segnali di Byte Enable disattivati). –

+0

@EricZ, ora cosa succederebbe se il byte desiderato fosse il 2 ° byte (conteggio iniziale da zero) nella memoria? di solito quando accedo a una parola dalla memoria, il 2 ° byte si ferma tra la posizione dei bit 23 - 16 del registro. Ma in questo caso dovrà atterrare in posizione 7 - 0. Questo mi confonde perché pensavo che il bit 0 dalla memoria fosse cablato per atterrare nel bit 0 del registro, e il bit 31 al bit 31. Ho pensato che fosse tutto nel circuito, quindi come potrebbe un bit che dovrebbe atterrare alla posizione 16 del bit, atterrato in posizione 0 durante l'accesso al byte? – deepak

risposta

3

La risposta alla tua domanda dipende in gran parte da quale compilatore si utilizza e dal funzionamento interno della CPU, del controller di memoria e dell'architettura di memoria (cache e memoria esterna).
Hai solo il controllo sul compilatore (supponendo che tu stia utilizzando il compilatore C o C++). I compilatori hanno diverse modalità per i casi quando si utilizzano variabili che sono più piccole di una dimensione di parola. Esistono flag per l'ottimizzazione della velocità e l'ottimizzazione della memoria. A seconda di quale di questi flag è attivato, il compilatore può scegliere di generare codice che racchiude tutte e quattro le variabili (nel tuo caso) in una parola. O il compilatore può scegliere di allocare una parola di memoria per ciascuna delle variabili ma utilizzare un particolare byte per memorizzare il valore effettivo. Il modo in cui il compilatore lo farà per ciascuno dei casi è quello di generare diverse istruzioni per la CPU. In quest'ultimo caso, se la variabile viene letta dalla memoria, l'intera parola viene messa sul bus e quindi in un registro generale. Nel primo caso, la parola viene inserita nel registro, ma in seguito la parola può essere spostata in bit bit e gli altri bit possono essere azzerati utilizzando l'operazione AND logico. In questo modo il byte giusto sarà nel registro. O potrebbe essere l'architettura della CPU supporta l'accesso a livello di byte in una parola, nel qual caso sarà solo una operazione eseguita dalla CPU. Alla fine, è una buona idea capire cosa succede all'interno, ma non ti interessa molto perché il set di istruzioni generato dal compilatore funzionerà correttamente dal tuo punto di vista. L'unica volta che ti interessi è quando scrivi software sensibile alle prestazioni. In questo caso dovrai conoscere i dettagli della CPU e della memoria, nonché i flag supportati dal compilatore.

3

Dipende dall'assemblatore, può scegliere di dare una parola di memoria o un byte.
Quindi, anche se si dispone di 4 caratteri diversi nella parola, ciò che accade è che tutti sono accessibili contemporaneamente, ma solo quello su cui si richiede viene attivato. cioè tutti entrano nel processore dalla memoria, quindi viene considerato solo il byte che si desidera, gli altri vengono rifiutati.

Problemi correlati