Assembly/Rappresentazione dati/Campi di bit e Packed Data
Abbiamo finora scoperto come lavorare con singoli gruppi di bits. Può capitare di dover memorizzare più valori. Ad esempio una data (15/03/84). In questo caso, si dovrebbero utilizzare tre byte per memorizzare tutta la data. Con i Packed Data, possiamo risparmiare memoria:
Supponiamo di voler risparmiare quanto più spazio possibile. Sappiamo che:
Per memorizzare il giorno abbiamo bisogno di massimo 5 bits (valori da 1 a 31, con 5 bits, possiamo rappresentare 32 valori), per il mese, invece solo di 4 (valori da 1 a 12, 4 bits = 16 valori), per l'anno (da 00 a 99) abbiamo bisogno di 7 bits. Quindi potremo memorizzare la data usando 5 + 4 + 7 = 16 bits (2 bytes) in questo modo:
|-------------------------------| |D|D|D|D|D|M|M|M|M|Y|Y|Y|Y|Y|Y|Y| |-------------------------------|
Risparmiando un byte.
Questo metodo ci consente di risparmiare spazio sulla RAM, ma è più lento da analizzare. Infatti ad esempio per prendere il mese dovremo fare così:
- DATA = DATA AND 0000011110000000; (così azzero tutti i bit tranne quelli del mese)
- DATA = DATA >> 7 (sposto i bit che mi servono a destra)
Mentre usando un byte per campo, avevamo il valore già pronto.
Modulo precedente | Torna a | Modulo successivo |