Quand et où est née la convention $ pour les littéraux hexadécimaux?
J'ai trouvé cette question0x
intéressante sur l'origine de pour désigner l'hexadécimal.
Cependant, quand je me suis coupé les dents en programmant sur des systèmes 8 bits 65xx au début des années 80, tout ce que je voyais utilisait un $
pour désigner des chiffres hexadécimaux (assembleurs, moniteurs, livres, magazines, etc.). Ce n'est que lorsque j'ai eu mon premier Amiga 1000 et que j'ai commencé à apprendre le C que j'ai même su que le 0x
préfixe était une chose.
Si le 0x
préfixe est clairement antérieur à la révolution 8 bits , alors (1) pourquoi a-t-il été $
adopté si largement? Et le contraire, (2) étant devenu omniprésent pour toute une génération de programmeurs 8 bits, pourquoi a-t-il été brusquement abandonné? (Pas que cela compte, mais je l' utilise toujours$
pour commenter du code ou gribouiller sur des arbres morts.)
Réponses
Réponse courte:
Motorola l'a utilisé pour leur 6800 et MOS (6500) l'a hérité de Motorola. Après tout, les 6500 membres de l'équipe sont sortis du projet 6800, donc ils y étaient déjà habitués.
Longue réponse:
Si le préfixe 0x est clairement antérieur à la révolution 8 bits,
Ce n'est pas vraiment le cas. Motorola utilisait $
déjà le préfixe avec le 6800 de 1974. Unix n'avait été réécrit que récemment (1973) en C, ce qui ajoutait la 0x
convention à cette époque et s'affichait en dehors d'AT & T.
alors (1) pourquoi $ a-t-il été adopté si largement?
En raison de la ligne 6800/02/09 de Motorola ainsi que de la série 6500 de MOS utilisée dans de nombreux micro-ordinateurs (domestiques) bas de gamme. Plus particulièrement par Acorn, Apple, Atari et Commodore. Naturellement, tous ceux qui écrivent des logiciels pour ces machines / processeurs utiliseraient sa notation.
Plus tard, il a été renforcé par la popularité du 68000 utilisé, par exemple, avec la gamme de machines Atari ST et Commodore Amiga.
Et le contraire, (2) étant devenu omniprésent pour toute une génération de programmeurs 8 bits,
Maintenant, cela dépend beaucoup de votre «bulle de processeur», car ce n'est vrai que pour les utilisateurs de machines basées sur 65xx / 68xx. Quiconque a grandi avec une machine x80 (8080, 8085, Z80) ou x86, comme Altair (S100), Tandy TRS-80 et tout le monde MSX, sera en désaccord. Ils seront assez fermes dans la mesure où un H
suffixe était le seul moyen valable et tout le reste est assez exotique :))
pourquoi a-t-il été brusquement abandonné?
Ce n'était pas. Il n'y a pas d'organisme dirigeant mondial qui le surclasse. Après tout, l'utilisation du préfixe (ou du suffixe) n'est pas inhérente au code hexadécimal, mais définie par le langage utilisé. Les assembleurs Motorola / MOS veulent un $
préfixe, Intel un H
suffixe, C un 0x
préfixe et d'autres veulent encore un préfixe plus mathématique de 16#
(Ada) ou 16r
(Smalltalk).
(Pas que cela compte, mais j'utilise toujours $ pour commenter du code ou griffonner sur des arbres morts.)
Et de nombreux autres (* 3).
Conclusion: le langage utilisé définit la notation - et, comme toujours, le premier laisse l'impression la plus profonde.
Avantage de Prefix sur Postfix
Les mathématiques classiques utilisent une notation postfixe pour avoir la base à la fin d'un nombre. Quel Intel a suivi avec leur nnnnH
notation. Pour l'écriture du compilateur, cela présente l'inconvénient qu'un mot entier (constante) doit être lu en premier, avant de pouvoir décider comment l'interpréter. Cela signifie qu'un tampon est nécessaire contenant toute la chaîne, car il ne peut être converti qu'après avoir progressé jusqu'au suffixe.
En utilisant un préfixe, il est clair dès le début comment interpréter les caractères suivants. Il n'est pas nécessaire de mettre en mémoire tampon (* 2). Cela donne un avantage dans la conception de l'analyseur et simplifie beaucoup l'assembleur. Cela a été particulièrement utile pour la création rapide des premiers outils d'assemblage croisé en tant que premier bootstrap.
Un peu d'histoire
La notation hexadécimale était plutôt rare dans les premières années. Au lieu de cela, l'octal était la chose, car la plupart des machines étaient construites avec un multiple de 3 mots , et les caractères étaient généralement traités comme 6 bits.
Parmi les quelques machines / systèmes qui offraient très tôt de l'hexagone, beaucoup utilisaient diverses lettres / symboles, comme les 6 derniers de l'alphabet
UVWXYZ
(* 2), souvent même non continus.IBM a introduit un format de chaîne préfixé (
X'nnnn'
) avec le / 360 en 1965Point de données utilisé octal avec un zéro préfixé
Intel 4004 utilisé hexadécimal avec un suffixe de
h
Le 8008 d'Intel utilisait tous les octaux dans les manuels et la documentation, écrits comme
nnnO
En 1973, les deux assembleurs utilisaient les mêmes suffixes B / O / H.
* 1 - Prendre soin de quelques octets de tampon peut sembler étrange aujourd'hui, où la source entière est généralement chargée en mémoire, mais la RAM était une ressource effrayante à l'époque. En conséquence, on a préféré des algorithmes capables de lire des données, comme à partir d'une bande de papier, et de travailler directement sur chaque symbole lu sans mise en mémoire tampon.
Un assembleur optimal permet de lire n'importe quel élément un caractère à la fois et de le traiter tout de suite sans avoir besoin de regarder en avant. L'utilisation d'un préfixe prend en charge cela.
* 2 - Une convention souvent utilisée en ingénierie lorsque des symboles sont nécessaires.
* 3 - Ici sur RC.SE j'essaye d'utiliser la notation en fonction du sujet, donc $
pour 65/68, H
pour Intel, et ainsi de suite ... et quand il n'y a pas de relation claire, je vais revenir à la notation / 370 x'nn'
, car c'est ce que j'ai le plus utilisé, bien que j'aie utilisé en $
premier.