Wann und wo entstand die $ -Konvention für hexadezimale Literale?

Aug 16 2020

Ich fand diese Frage nach dem Ursprung von 0xhexadezimal interessant.

Als ich jedoch in den frühen 80er Jahren meine Zähne auf 8-Bit-65xx-Systemen programmierte, verwendete alles, was ich sah, a $, um hexadezimale Ziffern (Assembler, Monitore, Bücher, Magazine usw.) zu bezeichnen. Erst als ich meinen ersten Amiga 1000 bekam und anfing, C zu lernen, wusste ich sogar, dass das 0xPräfix eine Sache war.

Wenn das 0xPräfix eindeutig vor der 8-Bit-Umdrehung liegt , (1) warum wurde es $dann so weit verbreitet? Und im Gegenteil, (2) nachdem es für eine ganze Generation von 8-Bit-Programmierern allgegenwärtig geworden war, warum wurde es abrupt fallen gelassen? (Nicht , dass es wichtig ist , aber ich immer noch verwenden , $wenn der Code zu kommentieren oder zu kritzeln auf toten Bäumen.)

Antworten

21 Raffzahn Aug 16 2020 at 12:59

Kurze Antwort:

Motorola verwendete es für seinen 6800 und MOS (6500) erbte es von Motorola. Immerhin kamen die 6500 Teammitglieder aus dem 6800-Projekt heraus, so dass sie bereits daran gewöhnt waren.


Lange Antwort:

Wenn das 0x-Präfix eindeutig vor der 8-Bit-Umdrehung liegt,

Wirklich nicht. Motorola verwendete das $Präfix bereits mit dem 6800 von 1974. Unix wurde erst kürzlich (1973) in C umgeschrieben, wodurch die 0xKonvention zu dieser Zeit hinzugefügt und außerhalb von AT & T angezeigt wurde.

dann (1) warum wurde $ so weit verbreitet?

Aufgrund der 6800/02/09-Reihe von Motorola sowie der 6500-Serie von MOS, die in vielen Mikro- (Heim-) Computern der unteren Preisklasse verwendet wird. Vor allem von Acorn, Apple, Atari und Commodore. Natürlich würde jeder, der Software für diese Maschinen / CPUs schreibt, seine Notation verwenden.

Später wurde es durch die Beliebtheit des 68000 verstärkt, der beispielsweise bei Atari ST- und Commodore Amiga-Maschinen verwendet wurde.

Und das Gegenteil, (2) das für eine ganze Generation von 8-Bit-Programmierern allgegenwärtig geworden ist,

Dies hängt sehr stark von Ihrer 'Prozessorblase' ab, da dies nur für Benutzer von 65xx / 68xx-basierten Maschinen gilt. Wer mit einem x80 (8080, 8085, Z80) oder x86-basierten Computer wie Altair (S100), Tandy TRS-80 und der gesamten MSX-Welt aufgewachsen ist, wird dem nicht zustimmen. Sie werden ziemlich fest darin sein, dass ein HSuffix der einzig gültige Weg war und alles andere ziemlich exotisch ist :))

warum wurde es abrupt fallen gelassen?

Es war nicht. Es gibt keine weltweite Regierungsbehörde, die dies übertrifft. Schließlich ist die Verwendung eines Präfixes (oder Suffix) nicht Hex-Code eigen, sondern wird durch die verwendete Sprache definiert. Motorola / MOS-Assembler möchten ein $Präfix, Intel ein HSuffix, C ein 0xPräfix und andere wiederum ein mathematischeres Präfix von 16#(Ada) oder 16r(Smalltalk).

(Nicht, dass es wichtig wäre, aber ich benutze $ immer noch, wenn ich Code kommentiere oder auf toten Bäumen kritzele.)

Und viele andere auch (* 3).

Fazit: Die verwendete Sprache definiert die Notation - und wie immer hinterlässt die erste den tiefsten Eindruck.


Vorteil des Präfixes gegenüber dem Postfix

Die klassische Mathematik verwendet eine Postfix-Notation, bei der der Radix hinter einer Zahl steht. Welcher Intel mit ihrer nnnnHNotation folgte. Für das Schreiben von Compilern bringt dies den Nachteil mit sich, dass ein ganzes Wort (Konstante) zuerst gelesen werden muss, bevor entschieden werden kann, wie es interpretiert werden soll. Dies bedeutet, dass ein Puffer benötigt wird, der die gesamte Zeichenfolge enthält, da er erst nach dem Vorrücken bis zum Postfix konvertiert werden kann.

Durch die Verwendung eines Präfixes ist von Anfang an klar, wie die folgenden Zeichen zu interpretieren sind. Dies muss nicht gepuffert werden (* 2). Dies bietet einen Vorteil beim Parser-Design und vereinfacht den Assembler erheblich. Dies war besonders hilfreich für die schnelle Erstellung früher Cross-Assembler-Tools als ersten Bootstrap.


Einige Geschichten

  • Hex-Notation war in den Anfangsjahren eher ungewöhnlich. Stattdessen war Oktal die Sache, da die meisten Maschinen auf ein Vielfaches von 3 Wortgrößen gebaut wurden und Zeichen normalerweise als 6 Bit behandelt wurden.

  • Von den wenigen Maschinen / Systemen, die sehr früh Hex anboten, verwendeten viele verschiedene Buchstaben / Symbole, wie die letzten 6 im Alphabet UVWXYZ(* 2), oft sogar nicht fortlaufend.

  • IBM führte X'nnnn'1965 mit / 360 ein vorangestelltes Zeichenfolgenformat ( ) ein

  • Datenpunkt verwendet Oktal mit einem vorangestellten Nullpunkt

  • Intels 4004 verwendet hex mit einem Suffix von h

  • Intels 8008 verwendete alle Oktale in Handbüchern und Dokumentationen, geschrieben als nnnO

  • Bis 1973 mussten beide Monteure dieselben B / O / H-Suffixe verwenden.


* 1 - Die Pflege einiger Bytes Puffer mag heute seltsam sein, wo normalerweise die gesamte Quelle in den Speicher geladen wird, aber RAM war damals eine erschreckende Ressource. Infolgedessen wurden Algorithmen bevorzugt, die Daten wie von Papierbändern lesen und direkt an jedem gelesenen Symbol ohne Pufferung arbeiten konnten.

Ein optimaler Assembler ermöglicht es, jedes Element eines Zeichens gleichzeitig zu lesen und sofort zu verarbeiten, ohne nach vorne schauen zu müssen. Die Verwendung eines Präfixes unterstützt dies.

* 2 - Eine Konvention, die in der Technik häufig verwendet wird, wenn Symbole benötigt werden.

* 3 - Hier auf RC.SE versuche ich, die Notation gemäß dem Thema zu verwenden, also $für 65/68, Hfür Intel und so weiter ... und wenn es keine klare Beziehung gibt, werde ich auf die Notation / 370 zurückgreifen x'nn', da ich das am meisten benutzt habe, obwohl ich es $zuerst benutzt habe.