web-dev-qa-db-fra.com

Pourquoi x86 est-il peu endian?

Une vraie question que je me suis posée récemment est quels choix de conception ont amené x86 à être une petite architecture endienne au lieu d'une grande architecture endienne?

45
bfrog

En grande partie, pour la même raison, vous commencez par le chiffre le moins significatif (l'extrémité droite) lorsque vous ajoutez, car les portages se propagent vers les chiffres les plus significatifs. Mettre l'octet le moins significatif en premier permet au processeur de démarrer sur l'ajout après avoir lu uniquement le premier octet d'un décalage.

Après avoir fait suffisamment de codage et de débogage d'assembly, vous pouvez conclure que ce n'est pas le petit endian qui est le choix étrange - c'est étrange que nous, les humains, utilisons le gros endian.

63
I. J. Kennedy

C'est assez archéologique, mais ce n'était probablement pas le choix d'Intel. Intel a conçu des processeurs avec une compatibilité descendante une préoccupation principale, ce qui facilite la traduction mécanique du code Assembly de l'ancienne vers la nouvelle architecture. Cela fait passer l'horloge de 8086 à 8080 au premier microprocesseur où l'endianité comptait, le Intel 8008 .

Ce processeur a été démarré lorsque CTC (nommé plus tard DataPoint) est venu à Intel pour demander de l'aide avec son produit de terminal de données. Conçu à l'origine par Victor Poor et Harry Pyle, il avait une conception de processeur logique en MSI (beaucoup de puces). Ils ont demandé à Intel de leur fournir une solution de stockage, en utilisant des registres à décalage de 512 bits.

Ce n'était pas le produit préféré d'Intel, ils ont pris ce genre de travaux de conception personnalisés pour survivre au temps de montée en puissance de leur puce 1024 bits RAM. Tedd Hoff, Stan Mazor et Larry Potter ont regardé la conception et proposé un processeur LSI avec RAM.au lieu de cela qui est finalement devenu le 8008. Poor et Pyle sont crédités de la conception du jeu d'instructions.

Qu'ils aient choisi le petit-endian est crédible de cette interview avec Poor . Il la passe assez rapidement et l'interview est plutôt dispersée mais la partie pertinente de la page 24:

Shustek : Ainsi, par exemple, le stockage des nombres d'octets les moins significatifs en premier est venu du fait que c'était série et que vous deviez d'abord traiter les bits faibles.
Mauvais: Vous deviez le faire de cette façon. Tu n'avais pas le choix.

La remarque "n'avait pas le choix" est étrange, et semble ne s'appliquer qu'à la conception bit-série du processeur MSI. Aussi la raison pour laquelle ils ont acheté des registres à décalage au lieu de RAM. Il revient à la page 34:

Hendrie: Vous souvenez-vous de l'un de leurs retours sur la conception ou de l'un de ces détails ...
Mauvais: L'un d'eux était le bit par rapport au 8 bits. Ils voulaient une pièce large de 8 bits et, finalement, c'est comme ça qu'ils l'ont construite.
Médiocre: Mais il circulait toujours. Mais, voyez-vous, il y a des points intéressants à savoir s'il va y avoir un gros bout ou un petit bout aurait pu être changé à ce stade, mais nous ne l'avons pas fait. Nous venons de le laisser ...
Hendrie: Même après être passé à huit bits?
Médiocre: Bien. C'est pourquoi la gamme de produits Intel est ainsi aujourd'hui

Stan Mazor d'Intel, qui a travaillé sur les conceptions 4004 et 8008, développe le "Push back" dans Oral History Panel on Intel 8008 Microprocessor :

Et enfin, la conception originale de Datapoint ... ce qu'ils voulaient était une machine série [bit]. Et si vous pensez à une machine série, vous devez traiter toutes les adresses et les données un bit à la fois, et la manière rationnelle de le faire est: de faible à élevé car c'est ainsi que le transport se propagerait. Cela signifie donc que [dans] l'instruction de saut elle-même, la façon dont l'adresse 14 bits serait placée dans une machine série est à rebours, comme vous le regardez, parce que c'est la façon dont vous souhaitez la traiter. Eh bien, nous allions construire une machine parallèle octet, pas bit-serial et notre compromis (dans l'esprit du client et juste pour lui), nous avons mis les octets à l'envers. Nous mettons d'abord l'octet de poids faible, puis l'octet de poids fort. Cela a depuis été surnommé le format "Little Endian" et c'est en quelque sorte contraire à ce que vous pensez être naturel. Eh bien, nous l'avons fait pour Datapoint. Comme vous le verrez, ils n'ont jamais utilisé la puce [8008] et c'était donc en quelque sorte "une erreur", mais ce [format Little Endian] a survécu aux 8080 et 8086 et [est] l'une des marques de cette famille.

Ainsi, Intel voulait construire un processeur parallèle octet avec 8 broches distinctes pour accéder au bus de données. La raison pour laquelle Intel a insisté sur le compromis est expliquée dans "Microprocesseurs Intel: 8008 à 8086" par Stephen P. Morse et all:

Ce stockage inversé, qui devait hanter tous les processeurs évolués à partir de 8008, était le résultat de la compatibilité avec le processeur série-bit Datapoint, qui traite les adresses du bit bas au bit haut. Ce stockage inversé avait une vertu à l'époque où les puces de mémoire 256 par 8 étaient populaires: il permettait à toutes les puces de mémoire de sélectionner un octet et de le verrouiller pour la sortie en attendant les six bits de poids fort qui ont sélectionné la puce. Cela a accéléré les accès à la mémoire.

En fin de compte, CTC n'a pas utilisé le 8008, il a été terminé un an trop tard et ils avaient déjà implémenté le processeur MSI à ce moment-là. La conception du microprocesseur était certainement la propriété intellectuelle de CTC, mais ils en ont échangé les droits avec Intel pour le coût de la conception. Peu d'erreur :) Des poursuites judiciaires concernant les droits de brevet ont suivi plus tard.

Ainsi, comme indiqué, Intel s'est retrouvé avec un petit endian à cause du fonctionnement des ports série.

46
Hans Passant

Il reflète la différence entre considérer la mémoire comme toujours organisée un octet à la fois et considérer qu'elle doit être organisée une unité à la fois, où la taille de l'unité peut varier (octet, mot, dword, etc.)

3
Ted Hopp