0x0000000000400507 <main+28>: 74 0c je 0x400515 <main+42>
0x0000000000400509 <main+30>: bf 28 06 40 00 mov $0x400628,%edi
..
0x400507 <main+28>: 0x28bf0c74
Ma conclusion est-elle correcte?
Non, les processeurs Intel sont peu endiens: http://en.wikipedia.org/wiki/Endianness
Tout d'abord, vous devez savoir que la plus petite unité de données que presque tous les processeurs modernes peuvent manipuler est un octet de 8 bits. Pour les nombres, nous (les êtres humains) écrivons et lisons de gauche à droite et nous écrivons le chiffre le plus significatif en premier, donc le chiffre le plus significatif est à gauche.
little-endian implique deux choses pour le CPU:
Supposons que le CPU récupère 4
octets de la mémoire, par exemple, en commençant à l'adresse 0x00
et cette adresse 0x00
contient l'octet 11111111
lequel est 0xFF
, adresse 0x01
contient l'octet 00111100
lequel est 0x3C
, adresse 0x02
contient l'octet 00011000
lequel est 0x18
et adresse 0x03
contient l'octet 00000000
lequel est 0x00
, puis lorsque le CPU interprète ces 4 octets comme un entier, il les interprète comme la valeur entière 0x00183CFF
. C'est-à-dire que l'UC considérera l'octet à l'adresse la plus élevée comme l'octet le plus significatif (MSB), ce qui signifie que pour l'UC, plus l'adresse est élevée, plus l'octet de cette adresse est significatif.
(0xFF) (0x3C) (0x18) (0x00) <-----value of each byte in hex
11111111 00111100 00011000 00000000 <-----byte at each addresse
^ ^ ^ ^
0x00 0x01 0x02 0x03 <-----addresses
Même chose lorsque le CPU écrit la valeur entière 0x00183CFF dans la mémoire. Il mettra 0xFF à l'adresse la plus basse et 0x00 à l'adresse la plus élevée. Et si vous (être humain) lisez intuitivement les octets des adresses basses aux adresses hautes, vous lisez FF 3C 18 00, qui est l'ordre inverse dans lequel 0x00183CFF est écrit.
Pour une grande endianité, le CPU lit et écrit les MSB aux adresses inférieures et les LSB aux adresses supérieures.