最近私が自問している本当の質問は、x86がビッグエンディアンアーキテクチャではなくリトルエンディアンアーキテクチャになるためにどのような設計上の選択がもたらされたのかということです。
3 に答える
ほとんどの場合、足し算の際に最下位桁 (右端) から開始するのと同じ理由で、キャリーは上位桁に向かって伝播するためです。最下位バイトを最初に置くと、プロセッサはオフセットの最初のバイトのみを読み取った後に加算を開始できます。
アセンブリのコーディングとデバッグを十分に行った後、奇妙な選択はリトル エンディアンではなく、私たち人間がビッグ エンディアンを使用するのは奇妙であるという結論に達するかもしれません。
これは非常に考古学的ですが、インテルの選択ではない可能性が最も高いです。Intel は下位互換性を第一に考慮してプロセッサを設計し、古いアーキテクチャから新しいアーキテクチャへのアセンブリ コードの機械的な変換を容易にしました。これにより、クロックが 8086 から 8080 に戻り、エンディアンが重要な最初のマイクロプロセッサであるIntel 8008に戻ります。
そのプロセッサは、CTC (後に DataPoint と呼ばれる) が Intel にデータ端末製品のサポートを依頼したときに開始されました。もともとは、Victor Poor と Harry Pyle によって設計され、MSI (多数のチップ) で論理プロセッサを設計していました。彼らはインテルに、512 ビットのシフト レジスタを使用するストレージ ソリューションを提供するよう依頼しました。
それは Intel のお気に入りの製品ではありませんでした。彼らは、1024 ビット RAM チップの立ち上げ時間を乗り切るために、この種のカスタム設計の仕事を引き受けました。Tedd Hoff、Stan Mazor、Larry Potter が設計を検討し、代わりに RAM を搭載した LSI プロセッサを提案しました。それが最終的に 8008 になりました。Poor と Pyle は、命令セットを設計したとされています。
彼らがリトル エンディアンを選択したことは、この Poor とのインタビューから信頼できます。それはそれをかなり素早くスキップし、インタビューは散らばっていますが、関連する部分は 24 ページにあります。
Shustek : たとえば、数値の最下位バイトを最初に格納するのは、これがシリアルであり、最初に下位ビットを処理する必要があるという事実に由来します。
悪い: あなたはそうしなければなりませんでした。選択の余地はありませんでした。
「選択の余地がなかった」という発言は奇妙で、MSI プロセッサのビットシリアル設計にのみ適用されるようです。また、RAM の代わりにシフト レジスタを購入した理由もあります。34ページに再び登場します。
Hendrie:
デザイン や詳細について彼らから反対されたことを覚えていますか ? 彼らは 8 ビット幅のパーツを望んでおり、最終的にはそのように構築しました。
悪い: しかし、それはまだ再循環していました. しかし、ご覧のとおり、その時点でビッグエンドまたは小さなエンド部分が変更される可能性があるかどうかにかかわらず、興味深い点がありますが、変更しませんでした.
ヘンドリー: 8 ビットに行った 後でも?
悪い: そうです。これが、今日のインテル製品ラインがそのようになっている理由です。
設計 4004 と 8008 に取り組んだ Intel の Stan Mazor は、Intel 8008 マイクロプロセッサのオーラル ヒストリー パネルで「プッシュ バック」について詳しく説明しています。
そして最後に、Datapoint の元の設計は... 彼らが望んでいたのは [ビット] シリアル マシンでした。シリアル マシンについて考える場合、すべてのアドレスとデータを一度に 1 ビットずつ処理する必要があります。これを行う合理的な方法は、下位ビットから上位ビットへということです。つまり、ジャンプ命令自体では、シリアル マシンに 14 ビット アドレスを配置する方法は、ビット バックワードであるということです。さて、私たちはビットシリアルではなく、バイトパラレルマシンを構築するつもりでした。妥協点として(顧客の精神と彼のためだけに)、バイトを逆に入れました。[最初に] 下位バイトを配置し、次に上位バイトを配置します。それ以来、これは「リトル エンディアン」形式と呼ばれるようになりましたが、これはあなたが自然だと思うものとは正反対のものです。良い、私たちは Datapoint のためにそれを行いました。ご覧のとおり、彼らは [8008] チップを使用したことがないので、ある意味では「間違い」でしたが、その [リトル エンディアン形式] は 8080 と 8086 に引き継がれ、マークの 1 つです。この家族の。
そこで、Intel は、データ バスへのアクセス用に 8 つの個別のピンを備えたバイト パラレル CPU を構築したいと考えました。Intel が妥協を主張した理由は、Stephen P. Morse らによる「Intel Microprocessors: 8008 to 8086」で説明されています。
8008 から進化したすべてのプロセッサに付きまとうこの反転ストレージは、下位ビットから上位ビットまでアドレスを処理する Datapoint ビットシリアル プロセッサとの互換性の結果でした。この反転ストレージには、256 x 8 メモリ チップが一般的だった初期の頃に利点がありました。これにより、すべてのメモリ チップがバイトを選択し、チップを選択した 6 つの上位ビットを待っている間、出力用にラッチすることができました。これにより、メモリアクセスが高速化されました。
最終的に、CTC は 8008 を使用しませんでした。1 年遅れで終了し、それまでに MSI プロセッサを実装していました。マイクロプロセッサのデザインは確かに CTC の知的財産でしたが、彼らはその権利を Intel とデザイン コストで交換しました。ちょっとした間違い :) 特許権に関する訴訟はその後に続きました。
そのため、インテルは、シリアル ポートの動作方法が原因で、リトルエンディアンを採用することになりました。
これは、メモリが常に一度に 1 バイトずつ編成されると考えるのと、一度に 1 ユニットずつ編成されると考えるのとの違いを反映しています。