web-dev-qa-db-fra.com

Donc sur x86-64 c'est du gros endian?

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?

32
kern

Non, les processeurs Intel sont peu endiens: http://en.wikipedia.org/wiki/Endianness

65
linuts

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:

  1. 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 00011000lequel 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
    
  2. 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.

18
Gab是好人