Unità di memoria indirizzabile

6

Da Wikipedia :

the term endian or endianness refers to the ordering of individually addressable sub-components within a longer data item as stored in external memory (or, sometimes, as sent on a serial connection). These sub-components are typically 16- or 32-bit words, 8-bit bytes, or even bits.

Mi chiedevo cosa significasse "indirizzabile"?

Ad esempio, in C, il più piccolo indirizzabile è un byte / carattere. Come può essere un po 'indirizzabile?

Grazie e saluti!

    
posta Tim 09.07.2011 - 16:49
fonte

6 risposte

12

How can a bit be addressable?

La famiglia 8051/8052 e alcune altre architetture di microcontrollori (PIC a gamma media e bassa, Infineon C16x / STM ST10) supportano l'indirizzamento bit-indirizzabile. Nell'8051, i byte RAM da 0x20 a 0x2f sono bit indirizzabili (128 bit in totale). Inoltre, molti dei registri di funzioni speciali (SFR) sono anch'essi indirizzabili a bit (in particolare quelli con indirizzi di byte che terminano con 0 o 8 per l'architettura 8051).

Persupportarequesto,l'8051haunnumerodiistruzionicheoperanodirettamentesuibit,comeset/clear/complementbit,jumpsebitèimpostato/nonimpostato,ecc.Questisonomoltopiùefficientichecaricareungenerale-usoregistroeutilizzandoleistruzioniANDoOR.

Adesempio,l'istruzioneperimpostareilbit3dell'indirizzodibyte0x2Asarebbe(ilvalore53hètrovatonellatabellasopra):

SETB53h

cheèun'istruzionea2byte,1ciclo.

Allostessomodo,lamaggiorpartedeicompilatoriCperl'8051(adesempio Keil C51 ) supportano un tipo "bit" in Oltre ai tipi C standard come char, short, int ecc. Le istruzioni C che fanno riferimento alle variabili bit sono compilate in codice utilizzando le istruzioni di assemblaggio di manipolazione dei bit.

Quindi il codice:

bit flag;
  .
  .
  .
flag = 1;

si compilerebbe in un'unica istruzione SETB come nell'esempio sopra.

EDIT:

Per quanto riguarda l'endianità su macchine bit indirizzabili, in generale i bit in un byte sono etichettati da 7 a 0 (da MSB a LSB), come nel diagramma sopra. Questo è vero se il byte endianness è big endian come Motorola 6800, 68000 e PowerPC, o little endian come la famiglia 6502, Intel x86 e Amtel AVR.

Stranamente, i minicomputer DEC 50 anni fa usavano la notazione inversa: i bit numerati PDP-8 da 0 a 11 (da MSB a LSB). Queste macchine tuttavia non erano indirizzabili a bit. Il DEC è cambiato nella forma più comune utilizzata oggi quando è uscito con il PDP-11.

    
risposta data 09.07.2011 - 21:15
fonte
5

L'equivoco qui è ciò che la CPU supporta nelle istruzioni della macchina e ciò che un linguaggio di programmazione supporta (ma potrebbe essere necessario farlo in modo ingombrante con le istruzioni della macchina).

La piattaforma x86 supporta il caricamento di singoli byte per indirizzo, ma ad es. la piattaforma Sparc (usata da Sun) supporta solo il caricamento di parole intere di 4 o 8 byte che devono essere allineati a un limite di parola. Non conosco immediatamente una piattaforma in grado di manipolare i singoli bit in memoria senza prima ottenere l'intero byte, manipolarlo e memorizzare il byte indietro.

big-endian, little-endian si riferisce all'ordine in cui i singoli byte sono posizionati nella parola. x86 è little endian, quindi per "1234" l'indirizzo più basso ottiene il "4" e il più alto "1". Sparc è il contrario. MIPS può essere o, ed è impostato all'avvio.

Quindi, la risposta è: indirizzabile significa che c'è un'istruzione della CPU che fa ciò che vuoi. Le lingue superiori possono emulare di più, ma raramente si associano a semplici istruzioni della CPU.

    
risposta data 09.07.2011 - 20:13
fonte
2

Se il sistema presuppone che l'indirizzo X punti al X-esimo bit della memoria e che X + 1 punti al seguente bit.

    
risposta data 09.07.2011 - 17:03
fonte
1

La parte indirizzabile si riferisce a sezioni di memoria. Ad esempio, a volte lavoro su un sistema a 8 bit. L'indirizzamento è di 16 bit. Quindi la memoria potrebbe essere qualcosa del genere:

0x00 - Address 1
0x05 - Address 2
0xFF - Address 3

È possibile indirizzare solo 8 bit alla volta in modo da poter scrivere solo su uno dei tre indirizzi. Il massimo che posso scrivere è 255 (0xFF) e il minimo è 0. Se fosse un sistema a 16 bit, potrei scrivere 256 (0x100) nel secondo indirizzo e farebbe qualcosa di simile alla memoria:

0x00 - Address 1
0x01 - Address 2
0x00 - Address 3

Il layout differirebbe a seconda che il sistema sia piccolo o grande endian.

Indirizzabile fa riferimento alla dimensione della memoria su cui è possibile scrivere in un determinato momento.

Se qualcosa è 8 bit e vorresti solo indirizzare il 1o (o il 2o o l'ennesimo bit o qualsiasi altra cosa) dovresti scrivere sull'indirizzo di memoria che contiene il bit che stai cercando e scrivere il valore che vuoi ma solo alterando il bit specifico.

Ad esempio:

0x00 - Address 1 - (0000 0000)

Se desideri modificare il secondo bit, dovresti leggere il valore a questo indirizzo e capovolgere il bit e poi scrivere il nuovo numero di nuovo all'indirizzo. Non sono esattamente un professionista di C ma qualcosa del tipo:

int i = *address_1;
i = i | 0x02;
*address_1 = i;

Questo leggerà il valore all'indirizzo 1 (supponendo che address_1 sia un puntatore ad esso), capovolge il secondo bit e quindi memorizza il nuovo valore nell'indirizzo di memoria da cui proviene.

    
risposta data 09.07.2011 - 17:31
fonte
1

"indirizzabile" viene utilizzato perché i dati sono archiviati in memoria e, a seconda dell'architettura del computer, la memoria può essere indirizzabile alla parola o indirizzabile ai byte ecc. (descrive come accedere ai dati in memoria).

Ad esempio, la memoria indirizzabile a byte, come nel caso dell'architettura 68K, ha degli indirizzi di memoria che corrispondono a un certo byte in memoria.

EXTRA

Inoltre, una parola è composta da una certa quantità di byte. La notazione big endian / little endian si riferisce semplicemente alla disposizione dei byte all'interno di una parola.

Ad esempio, la notazione big endian ha i byte più significativi indirizzati dall'indirizzo di memoria inferiore:

Esempio

diciamo che vogliamo memorizzare B2F6 in memoria e la nostra memoria è byte indirizzabile con 2 byte in una parola, quindi:

Word 0

        --------------------
        |  B2    |  F6     |     BIG ENDIAN NOTATION
        --------------------
       address 0    address 1
    
risposta data 10.07.2011 - 04:40
fonte
1

'Indirizzabile' indica una dimensione della memoria che può essere indirizzata individualmente. Questo è tipicamente un byte, che è 8 bit. I singoli bit all'interno di un byte non sono indirizzabili. Per accedere a singoli bit, è possibile utilizzare il bit-masking o il bit-shifting per rimuovere tutto tranne il bit richiesto all'interno del byte complessivo. Endianness influenza l'ordine di memorizzazione dei byte indirizzabili individualmente all'interno di un blocco di memoria più grande, che è tipicamente di 32 bit o 4 byte (una parola).

Il blocco di memoria più grande inizia ad avere importanza solo quando si ha a che fare con i frame dello stack, poiché uno stack frame deve consumare l'intero blocco di memoria da 4 byte. In altre parole, la memoria è comunemente composta da blocchi di memoria a 4 byte ordinati e le istruzioni di stack macchina possono inserire o inserire solo blocchi di memoria a 4 byte (frame stack). Tuttavia, le istruzioni della macchina possono ancora accedere a tutti i byte all'interno di un blocco di memoria da 4 byte.

    
risposta data 09.07.2011 - 23:57
fonte

Leggi altre domande sui tag