Quando e dove ha avuto origine la $ convenzione per i letterali esadecimali?

Aug 16 2020

Ho trovato interessante questa domanda sull'origine di 0xper denotare esadecimale.

Tuttavia, quando mi sono tagliato i denti programmando su sistemi 65xx a 8 bit nei primi anni '80, tutto ciò che vedevo usava una $per denotare cifre esadecimali (assemblatori, monitor, libri, riviste, ecc.). È stato solo quando ho ricevuto il mio primo Amiga 1000 e ho iniziato a imparare il C che ho capito che il 0xprefisso era una cosa.

Se il 0xprefisso precede chiaramente la rivoluzione a 8 bit , allora (1) perché è stato $adottato così ampiamente? E il contrario, (2) essendo diventato onnipresente per un'intera generazione di programmatori a 8 bit, perché è stato improvvisamente abbandonato? (Non che sia importante, ma lo uso ancora$ quando commento codice o scarabocchio su alberi morti.)

Risposte

21 Raffzahn Aug 16 2020 at 12:59

Risposta breve:

Motorola lo ha utilizzato per il proprio 6800 e MOS (6500) l'ha ereditato da Motorola. Dopotutto, i 6500 membri del team sono usciti dal progetto 6800, quindi erano già abituati.


Risposta lunga:

Se il prefisso 0x precede chiaramente la rivoluzione a 8 bit,

Non è vero. Motorola usava il $prefisso già con il 6800 del 1974. Unix solo di recente (1973) era stato riscritto in C, che ha aggiunto la 0xconvenzione in quel periodo, e mostrato al di fuori di AT&T.

allora (1) perché $ è stato adottato così ampiamente?

A causa della linea 6800/02/09 di Motorola e della serie MOS '6500 utilizzata in molti computer micro (domestici) di fascia bassa. In particolare da Acorn, Apple, Atari e Commodore. Naturalmente, chiunque scriva software per queste macchine / CPU userebbe la sua notazione.

Successivamente, è stato rafforzato dalla popolarità del 68000 utilizzato, ad esempio, con la linea di macchine Atari ST e Commodore Amiga.

E il contrario, (2) essendo diventato onnipresente per un'intera generazione di programmatori a 8 bit,

Ora questo dipende molto dalla tua "bolla del processore", poiché è vero solo per gli utenti di macchine basate su 65xx / 68xx. Chiunque sia cresciuto con una macchina basata su x80 (8080, 8085, Z80) o x86, come Altair (S100), Tandy TRS-80 e l'intero mondo MSX, non sarà d'accordo. Saranno abbastanza fermi in quanto un Hsuffisso era l'unico modo valido e tutto il resto è piuttosto esotico :))

perché è stato lasciato cadere improvvisamente?

Non lo era. Non esiste un organo di governo mondiale che lo surclassi. Dopotutto, l'utilizzo del prefisso (o del suffisso) non è inerente al codice esadecimale, ma è definito dalla lingua utilizzata. Gli assemblatori Motorola / MOS vogliono un $prefisso, Intel un Hsuffisso, C un 0xprefisso e altri ancora vogliono un prefisso più matematico di 16#(Ada) o 16r(Smalltalk).

(Non che sia importante, ma uso ancora $ quando commento il codice o scarabocchio su alberi morti.)

E così fanno molti altri (* 3).

Conclusione: il linguaggio che si usa definisce la notazione e, come sempre, il primo lascia l'impressione più profonda.


Vantaggio di Prefix rispetto a Postfix

La matematica classica usa una notazione con suffisso per avere la radice che segue un numero. Che Intel ha seguito con la loro nnnnHnotazione. Per la scrittura del compilatore, questo porta lo svantaggio che una parola intera (costante) deve essere letta prima, prima di poter decidere come interpretarla. Ciò significa che è necessario un buffer che contenga l'intera stringa, poiché può essere convertito solo dopo essere avanzato fino al suffisso.

Utilizzando un prefisso, è chiaro fin dall'inizio come interpretare i seguenti caratteri. Non è necessario eseguire il buffer (* 2). Ciò offre un vantaggio nella progettazione del parser e semplifica molto l'assemblatore. Ciò è stato particolarmente utile per la creazione rapida dei primi strumenti di cross assembler come primo bootstrap.


Un po 'di storia

  • La notazione esadecimale era piuttosto rara nei primi anni. Invece, ottale era la cosa, poiché la maggior parte delle macchine erano costruite con un multiplo di 3 parole , così come i caratteri erano solitamente gestiti come 6 bit.

  • Delle poche macchine / sistemi che all'inizio offrivano esadecimale, molte usavano varie lettere / simboli, come le ultime 6 dell'alfabeto UVWXYZ(* 2), spesso anche non continue.

  • IBM ha introdotto un formato di stringa con prefisso ( X'nnnn') con / 360 nel 1965

  • Datapoint utilizzava ottale con prefisso Zero

  • 4004 di Intel utilizzava esadecimale con suffisso h

  • L'8008 di Intel utilizzava tutto l'ottale nei manuali e nella documentazione, scritto come nnnO

  • Nel 1973, entrambi gli assemblatori furono costretti a utilizzare gli stessi suffissi B / O / H.


* 1 - Prendersi cura di pochi byte di buffer potrebbe sembrare strano oggi, dove l'intera sorgente viene solitamente caricata in memoria, ma la RAM era una risorsa spaventosa allora. Di conseguenza, sono stati preferiti algoritmi in grado di leggere i dati, come dal nastro di carta, e lavorare direttamente su ogni simbolo letto senza buffering.

Un assemblatore ottimale consente di leggere qualsiasi elemento un carattere alla volta e di elaborarlo immediatamente senza bisogno di guardare avanti. L'uso di un prefisso lo supporta.

* 2 - Una convenzione spesso utilizzata in ingegneria quando sono necessari simboli.

* 3 - Qui su RC.SE cerco di usare la notazione in base all'argomento, quindi $per 65/68, Hper Intel e così via ... e quando non c'è una relazione chiara, tornerò alla notazione / 370 x'nn', poiché era quello che usavo di più, nonostante avessi usato per $primo.