16進リテラルの$規則はいつどこで発生しましたか?
16進数を表すための起源について尋ねるこの質問0x
は興味深いと思いました。
しかし、80年代初頭に8ビット65xxシステムでプログラミングをやめたとき、私が見たものはすべて、$
16進数を表すために使用されていました(アセンブラー、モニター、本、雑誌など)。私が最初のAmiga1000を入手し、Cを学び始めて初めて、0x
接頭辞が重要であることがわかりました。
0x
接頭辞が明らかに8ビット革命よりも前のものである場合、(1)なぜ$
それほど広く採用されたのですか?反対に、(2)8ビットプログラマーの世代全体に遍在するようになったのに、なぜ突然ドロップされたのですか?(それが重要ないことを、私はまだ使用して$
コードをコメントや枯れ木の上に落書きをするとき。)
回答
簡潔な答え:
Motorolaは6800に使用し、MOS(6500)はMotorolaから継承しました。結局のところ、6500人のチームメンバーは6800プロジェクトから出てきたので、彼らはすでにそれに慣れていました。
長い答え:
0xプレフィックスが明らかに8ビット革命よりも前のものである場合、
実際にはそうではありません。Motorolaは、$
1974年の6800ですでにプレフィックスを使用していました。Unixはごく最近(1973年)にCで書き直され、その0x
頃の規則が追加され、AT&Tの外部に表示されました。
それでは(1)なぜ$がそれほど広く採用されたのですか?
モトローラの6800/02/09ラインと、多くのローエンドのマイクロ(家庭用)コンピュータで使用されているMOSの6500シリーズのためです。最も顕著なのは、Acorn、Apple、Atari、Commodoreです。当然、これらのマシン/ CPU用のソフトウェアを作成する人は誰でもその表記法を使用します。
その後、たとえばAtariSTやCommodoreAmigaシリーズのマシンで使用される68000の人気によって強化されました。
そしてその反対、(2)8ビットプログラマーの世代全体に遍在するようになった、
これは、65xx / 68xxベースのマシンのユーザーにのみ当てはまるため、「プロセッサバブル」に大きく依存します。Altair(S100)、Tandy TRS-80、およびMSXの世界全体のように、x80(8080、8085、Z80)またはx86ベースのマシンで育った人は誰でも同意しません。H
接尾辞が唯一の有効な方法であり、他のすべてが非常にエキゾチックであるという点で、彼らは非常に堅固です:))
なぜ突然落ちたのですか?
そうではありませんでした。それを凌駕する世界的な統治機関はありません。結局のところ、いずれかのプレフィックス(またはサフィックス)の使用は16進コードに固有のものではなく、使用される言語によって定義されます。Motorola / MOSアセンブラは$
プレフィックス、IntelはH
サフィックス、Cは0x
プレフィックスを必要とし、他のアセンブラは16#
(Ada)または16r
(Smalltalk)のより数学的なプレフィックスを必要とします。
(それは重要ではありませんが、コードにコメントしたり、枯れ木に落書きしたりするときは、$を使用します。)
他にもたくさんあります(* 3)。
結論:使用する言語は表記法を定義します-そしていつものように、最初は最も深い印象を残します。
プレフィックスに対するプレフィックスの利点
古典的な数学では、基数の末尾に数字を付けるという後置表記を使用します。どのIntelが彼らのnnnnH
表記法に従ったのか。コンパイラの記述では、これにより、単語全体(定数)を最初に読み取ってからでないと、解釈方法を決定できないという欠点があります。これは、文字列全体を保持するバッファが必要であることを意味します。これは、文字列が後置まで進んだ後にのみ変換できるためです。
プレフィックスを使用することで、次の文字の解釈方法が最初から明確になります。これはバッファリングする必要はありません(* 2)。これはパーサーの設計に利点をもたらし、アセンブラーを大幅に簡素化します。これは、最初のブートストラップとして初期のクロスアセンブラツールをすばやく作成するのに特に役立ちました。
いくつかの歴史
初期の16進表記はかなり珍しいものでした。代わりに、ほとんどのマシンは3ワードサイズの倍数で構築されており、文字は通常6ビットとして処理されていたため、8進数が重要でした。
非常に早い段階で16進数を提供した数少ないマシン/システムのうち、多くはアルファベットの最後の6
UVWXYZ
(* 2)のように、多くの場合非連続でさえ、さまざまな文字/記号を使用していました。IBMは、
X'nnnn'
1965年に/ 360で接頭部付き文字列形式()を導入しましたデータポイントは、接頭辞がゼロの8進数を使用しました
Intelの4004は、接尾辞が
h
Intelの8008は、マニュアルとドキュメントですべて8進数を使用しました。
nnnO
1973年までに、両方のアセンブラは同じB / O / Hサフィックスを使用するようになりました。
* 1-数バイトのバッファの世話は、ソース全体が通常メモリにロードされる今日、奇妙に見えるかもしれませんが、RAMは当時は恐ろしいリソースでした。その結果、紙のテープなどからデータを読み取り、バッファリングせずに読み取られた各シンボルを直接処理できるアルゴリズムが好まれました。
最適なアセンブラを使用すると、任意のアイテムを一度に1文字ずつ読み取り、先を見越すことなくすぐに処理できます。プレフィックスの使用はこれをサポートします。
* 2-記号が必要なときにエンジニアリングでよく使用される規則。
* 3-ここRC.SEではトピックに応じて表記を使用しようとしているので$
、65/68、H
Intelなど...明確な関係がない場合は/ 370表記にフォールバックしますx'nn'
、$
最初に使用したにもかかわらず、それが私が最も使用したものだったので。