Représentation du contenu de la mémoire I) Représentation multioctets des entiers ("sexe" des machines). Un mot de 32 bits doit avoir une adresse multiple de sa taille (4), donc de la forme 4X. Un entier 32 bits stocké à l'adresse 4X occupe donc 4 octets d'adresses 4X, 4X+1, 4x+2 et 4X+3. Mais quels chiffres de l'entier sont stockés dans quels octets ? 2 conventions (noms inspirés par "le voyage de Gulliver") * "Gros boutiste"/Big Endian : chiffres de poids fort en tête, poids faible en queue ==> mainframes, stations unix, SPARC, 68000 * "Petit boutiste"/Little Endian : chiffres de poids faible en tête, poids fort en queue ==> intel, digital equipement, pc et compatibilité PC, ARM Exemple : entier (dexadécimal) 0x12345678 à l'adresse 0x100000 (4X) = Convention de stockage BE/GB LE/PB octet d'adresse 0x100000 contenant | 0x12 | 0x78 | octet d'adresse 0x100001 contenant | 0x34 | 0x56 | octet d'adresse 0x100002 contenant | 0x56 | 0X34 | octet d'adresse 0x100003 contenant | 0x78 | 0x12 | Travail sur ARM papier : Big Endian Outils ARM sur machine : Little Endian II) Représentation des contenus de mémoire Soit une mémoire contenant dans l'ordre et à partir de l'adresse 0x2000 : * un caractère espace (code 0x20) sur un octet * un caractère 'a' (code 0x61) sur un octet + un entier 16 bits 1878 (0x3456) sur 2 octets + un entier 32 bits 0x12ab56ef sur 4 octets + la chaîne "abc" délimitée par un 0 final sur 4octets et une convention "petit boutiste" Octet par octet Détaillée 4 octets par 4 octets 0x2000 | 0x20 | 0x2000 | 0x20 | 0x61 | 0x56 | 0x34 | 0x2001 | 0x61 | 0x2004 | 0xEF | 0x56 | 0xAB | 0x12 | 0x2002 | 0x56 | 0x2008 | 0x61 | 0x62 | 0x63 | 0x00 | 0x2003 | 0x34 | 0x2004 | 0xEF | 4 octets par 4 octets découper les 16 et 32 bits 0x2005 | 0x56 | 0x2006 | 0xAB | 0x2000 | 0x20 | 0x61 | 0x3456 | 0x2007 | 0x12 | 0x2004 | 0x12ab56ef | 0x2008 | 0x61 | 0x2008 | < "abc\0" > | 0x2009 | 0x62 | 0x200a | 0x63 | 0x200b | 0x00 |