• Non ci sono risultati.

Introduzione: Big Endian e Little Endian Introduzione: Big Endian e Little Endian

N/A
N/A
Protected

Academic year: 2021

Condividi "Introduzione: Big Endian e Little Endian Introduzione: Big Endian e Little Endian "

Copied!
5
0
0

Testo completo

(1)

I I I n n n t t t e e e r r r p p p r r r e et e t t a a a z zi z i i o o o n n n e e e d d d e e e g g g l l l i i i i i i n n n d d d i i i r ri r i i z z z z z z i i i d d d i i i m m m e e e m m m o o o r r r i i i a a a

Introduzione: Big Endian e Little Endian Introduzione: Big Endian e Little Endian

Ci chiediamo il modo in cui venga “interpretato” un indirizzo di memoria, ossia sostanzialmente quale sia l’oggetto che viene referenziato dall’indirizzo e dallo spiazzamento. Per rispondere a questa domanda, considereremo macchine la cui memoria gode delle seguenti due caratteristiche:

• è organizzata a byte;

• è possibile indirizzare i byte (8 bit), le parole corte (16 bit) e le parole (32 bit). In molti casi, sarà anche permesso l’indirizzamento delle parole doppie (64 bit).

La considerazione iniziale da fare è la seguente: i byte che costituiscono una parola possono essere “numerati” da sinistra verso destra o viceversa. Questa potrebbe apparire come una scelta irrilevante, ma in realtà ci si accorge presto che non è così . Ad esempio, mentre nella famiglia Motorola (a 32 bit) i byte sono normalmente numerati da sinistra a destra, al contrario, nella famiglia INTEL (a 32 bit) avviene il contrario, ossia la numerazione è da destra verso sinistra. Nel primo caso di parla di calcolatori a finale grande (Big Endian) mentre nel secondo caso di parla di calcolatori a finale piccolo (Little Endian).

La figura seguente riporta 4 parole della memoria di un calcolatore a 32 bit, i cui byte sono numerati da sinistra a destra:

(2)

15 14 13 12

11 10 9 8

7 6 5 4

3 2 1 0

0 4 8 12

byte Finale grande

Indirizzo di parola

Parola di 32 bit

In questo caso, l’indirizzo di parola (0,4,8 o 12 nel nostro esempio) identifica il byte più a sinistra di ciascuna parola (byte più significativo).

La prossima figura riporta invece 4 parole della memoria di un calcolatore a 32 bit, i cui byte sono numerati da destra a sinistra:

0 4 8 12

byte Finale piccolo

Parola di 32 bit

12 13 14 15

8 9 10 11

4 5 6 7

0 1 2 3

Indirizzo di parola

In questo caso, l’indirizzo di parola (sempre pari a 0,4,8 o 12) identifica il byte più a destra di ciascuna parola (byte meno significativo). In definitiva, quindi,

nell’ordinamento di tipo Big Endian, l’indirizzo di un dato è quello del suo byte più significativo, mentre invece, nell’ordinamento di tipo Little Endian, l’indirizzo di un dato è quello del suo byte meno significativo

.

Naturalmente, però, i numeri vengono memorizzati sempre da destra verso sinistra: per esempio, supponiamo di avere il numero intero 6, il quale, espresso in binario con 32 bit, è

00000000 00000000 00000000 00000110

Nel caso del sistema a finale grande, questa configurazione viene inserita, così com'è, a partire dal byte 0 per finire al byte 3. Al contrario, nel caso del sistema a finale piccolo, il primo byte a sinistra va nel byte 3, il secondo a sinistra va nel byte

(3)

2, il successivo nel byte 1 e l'ultimo, quello che contiene i bit significativi, va nel byte 0:

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0

byte 0 byte 1 byte 2 byte 3

Big Endian

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0

byte 3 byte 2 byte 1 byte 0

Little Endian

In ogni caso, i bit vengono comunque riportati con i tre bit 110 a destra della parola, mentre i rimanenti 29 bit a sinistra sono tutti zeri.

Inoltre, in entrambi i casi, l'indirizzo della parola che contiene questo numero è sempre 0. In un certo senso, quindi, cambia l'ordine con cui i bit vengono "letti":

mentre nel finale grande si legge a partire dalla cella avente l'indirizzo specificato e si va per indirizzi crescenti, nel finale piccolo si fa il contrario

.

Trasferimento dati tra due PC con diverso ordinamento Trasferimento dati tra due PC con diverso ordinamento

Date le premesse del precedente paragrafo, vediamo perché l’ordinamento dei byte è un aspetto tutt’altro che trascurabile. Per semplicità, consideriamo una semplice “scheda personale” di un impiegato, costituita da una stringa (il nome dell’impiegato) e da due interi (l’età ed il numero del dipartimento di appartenenza):

Nome: Jim Smith Età: 21 anni

Dipartimento: 260 (1×256+4=260)

Dovendo memorizzare questa scheda, abbiamo bisogno di 9 byte per il nome (ogni byte corrisponde ad un carattere, incluso lo spazio), di 1 byte per l’età e di 2 byte per il numero di dipartimento. Se poi vogliamo far riferimento a tali informazioni non a livello di singoli byte, ma a livello di singole parole (ad esempio da 32 bit), avremo bisogno di inserire degli 0 non significativi per riempire tali parole. Ad esempio, la rappresentazione a finale grande è mostrata nella figura seguente:

(4)

0 4 8 12 16

Finale grande

4 1 0 0

21 0 0 0

0 0 0 H

T I M S

M I J

Se invece vogliamo la rappresentazione a finale piccolo, abbiamo quanto segue:

0 4 8 12 16

Finale piccolo

Indirizzo

4 1 0 0

21 0 0 0

H 0 0 0

S M I T

J I M

E’ chiaro che entrambe le rappresentazioni sono efficaci. Il problema nasce invece quando una delle due macchine cerca di mandare la scheda ad un’altra macchina appartenente alla stessa rete. Ad esempio, supponiamo che quella a finale grande spedisca la scheda a quella a finale piccolo, trasmettendo un byte alla volta, cominciando dal byte 0 e finendo con il byte 19 (1). In questa situazione, il byte 0 della numerazione a finale grande va nel byte 0 della memoria a finale piccolo, il byte 1 della numerazione a finale grande va nel byte 1 della memoria a finale piccolo e così via, dando origine alla seguente situazione nella memoria della macchina a finale piccolo:

0 4 8 12 16

Esito del trasferimento da finale grande a finale piccolo

Indirizzo

0 0 1 4

0 0 0 21

H 0 0 0

S M I T

J I M

1 Per semplicità, supponiamo che i bit dei byte non vengano invertiti durante la trasmissione.

(5)

Il problema sorto è evidente: quando la macchina a finale piccolo tenta di stampare la scheda, tutto funziona bene per il nome, mentre invece si ottiene una età di 21×224 anni e l’indicazione del dipartimento è altrettanto erronea. Il motivo è che la trasmissione ha invertito l’ordine dei caratteri in tutte le parole, ma solo nelle prime tre questa operazione era lecita (trattandosi di stringhe), mentre invece non lo era nelle altre due (contenenti numeri interi).

Una soluzione ovvia del problema sarebbe quella di invertire, via software, i byte di una parola dopo aver fatto la copia:

0 4 8 12 16

Esito del trasferimento da finale grande a finale piccolo con scambio

Indirizzo

4 1 0 0

21 0 0 0

0 0 0 H

T I M S

M I J

Il problema, questa volta, è che i numeri interi sono giusti, ma lo sono le stringhe: infatti, quando il calcolatore legge la stringa iniziale, legge prima il byte 0 (che contiene uno spazio), poi il byte 1 (=M) e così via, commettendo ancora una volta un errore.

Si intuisce come una soluzione semplice al problema non ci sia. Una soluzione possibile, ma anche poco efficiente, potrebbe essere quella di includere un header (testata), all’inizio di ogni record, che specifichi che tipo di dati seguono (stringhe, interi, altri) e quanto sono lunghi; in tal modo, il calcolatore ricevente sa quando eseguire gli scambi e quando no.

Autore: Sandro Petrizzelli e-mail: sandry@iol.it

sito personale: http://users.iol.it/sandry

Riferimenti

Documenti correlati

improprio di questo Servizio Software potrebbe comunque risultare in violazione della legge italiana.. 675 "Tutela delle Persone e di Altri Soggetti Rispetto al Trattamento

• La parola tratteggiata è non allineata; ha il byte meno significativo in i+6 (Little Endian) il più significativo in i+9. • Occorrerebbero due accessi

When using the physical address extension, the CR3 register contains the base address of the page-directory-pointer table In IA-32e mode, the CR3 register contains the base address

– Le istruzioni di store richiedono l’accesso in scrittura alla memoria dati ed eseguono la memorizzazione del dato proveniente dal registro sorgente. – Le istruzioni di

– Le istruzioni di load e store per calcolare l’indirizzo di memoria – Le istruzioni di salto condizionato per effettuare il confronto.. Esecuzione delle istruzioni (2) Esecuzione

Miscelazione casuale, non è garantito un numero minimo di soggetti differenti all’interno della scatola. 12

Endian UTM Mini è il più piccolo Network Security Gateway della famiglia UTM e fornisce un efficente protezione e gestione della connettività per le moderne e complesse reti

bit (x86) Scarica Windows XP Tablet PC Edition 2005 SP3 italiano OEM 32 bit (x86) Scarica Windows XP Media Center Edition 2005, Update Rollup 2 SP3 italiano retail 32 bit (x86)

Abbiamo esaminato il caso della parità pari; per la parità dispari occorre invertire i bit di check in trasmissione (XOR con 1111) prima di inserirli al posto delle x.. Invertiremo

I dati binari sono semplici sequenze di bits senza nessuna particolare codifica di conseguenza gli operatori bit-a-bit prendono come operandi solo espressioni a valore di tipo

This readme provides information about Sentinel TM Protection Installer, its installation and few tips on using the related components (such as, the Sentinel License Monitor,

In pratica, nella funzione di codifica del messaggio, il bit 0 del primo carattere del messaggio viene memorizzato come bit meno significativo del canale di destra del primo

communication a discipline?”, to studies on the attitude of scientists to the media, on the way journalists regard scientists, and on the history of science. communication

L’infermiere di famiglia/comunità inoltre può rappresentare una soluzione per quanto riguarda l’assistenza nelle cosiddette “aree interne”: si tratta della cura di oltre un

We compare the hybrid, stochastic, and differential semantics for stochastic Concurrent Constraint Pro- gramming, focussing on the exhibited behavior of models and their robustness..

I moduli oggetto e l'eseguibile creati in tal modo saranno salvati in files aventi formato elf32-x86-64 e conterranno codice per l'architettura x84-64 ma con puntatori a

VERBO  INDICATIVO  PASSATO REMOTO .

Concluse le operazioni precedenti,potete ora installare le componenti necessarie: selezionate dal menu' a tendina STRUMENTI-DOWNLOADS e scaricate e installate i Componenti

Il passaggio dati alla procedura Unico e Irap avverrà in funzione delle date di inizio e fine esercizio impostate e con l’anno dichiarativo definito nella

3.1.1 Stampa di controllo Comunicazione Dati IVA nella procedura gestionale Dalla procedura gestionale si ottiene una stampa di anteprima dei dati che verranno poi

Pertanto tutte le operazioni con aliquota iva al 20% dovranno confluire nel rigo VE22 (Iva al 21%) e la differenza di imposta (tra quella dichiarata e quella

Per gestire correttamente il passaggio dati alla procedura dichiarativa del 770, durante la fase di inserimento delle fatture percipiente, devono essere compilati i dati relativi

410-412 quater rendendo il previo tentativo di conciliazione stragiudiziale, prima obbligatorio (id est condizione di procedibilità della domanda giudiziale), solo facoltativo per