web-dev-qa-db-ja.com

x86リトルエンディアンなのはなぜですか?

最近私が自分に尋ねている本当の質問は、x86がビッグエンディアンアーキテクチャではなくリトルエンディアンアーキテクチャになるためにどのような設計の選択がもたらされたかということです。

45
bfrog

主に、同じ理由で、追加時に最下位桁(右端)から開始します。これは、桁上げが上位桁に向かって伝播するためです。最下位バイトを最初に配置することで、オフセットの最初のバイトのみを読み取った後、プロセッサは追加を開始できます。

十分なアセンブリのコーディングとデバッグを行った後、奇妙な選択はリトルエンディアンではないという結論に達するかもしれません。人間がビッグエンディアンを使用するのは奇妙です。

63
I. J. Kennedy

これはかなり考古学的ですが、おそらくインテルの選択ではありませんでした。 Intelは、下位互換性を備えたプロセッサを設計し、アセンブリコードを古いアーキテクチャから新しいアーキテクチャに簡単に機械的に変換できるようにしました。これにより、クロックが8086から8080に戻り、エンディアンが問題となる最初のマイクロプロセッサ Intel 8008 に戻ります。

このプロセッサは、CTC(後にDataPointと呼ばれる)がインテルにデータターミナル製品のサポートを依頼したときに開始されました。 Victor PoorとHarry Pyleによって最初に設計されましたが、MSI(多くのチップ)で論理プロセッサ設計されていました。彼らはIntelに512ビットのシフトレジスタを使用したスト​​レージソリューションを提供するように依頼しました。

それはIntelのお気に入りの製品ではなく、1024ビットの立ち上げ時間を生き残るためにこの種のカスタムデザインジョブを引き受けましたRAM=チップ。TeddHoff、Stan Mazor、Larry Potterは代わりに、RAMを備えたLSIプロセッサを設計および提案しましたが、最終的に8008になりました。

彼らがリトルエンディアンを選択したことは、 この貧困層へのインタビュー から信頼できます。それはそれをかなり素早くスキップし、インタビューはかなり散らばっていますが、24ページの関連部分:

Shustek:たとえば、数値を最初に最下位バイトを格納することは、これがシリアルであり、最初に下位ビットを処理する必要があったという事実に由来します。
悪い:あなたはそれをそのように行わなければなりませんでした。あなたには選択肢がありませんでした。

「選択の余地はありませんでした」という発言は奇妙で、MSIプロセッサのビットシリアルデザインにのみ適用されるようです。 RAMの代わりにシフトレジスタを購入した理由も。 34ページで再び表示されます。

ヘンドリー:デザインについてのプッシュバック、またはそれらの詳細について覚えていますか...
悪い:それらの1つは、1ビット対8ビットでした。彼らは、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とマイクロプロセッサの権利を交換しました。ちょっとした間違い:)後に続く特許権に関する訴訟。

したがって、言われたように、インテルはシリアルポートが機能する方法のためにリトルエンディアンになりました。

46
Hans Passant

これは、メモリを常に一度に1バイトずつ編成すると見なすことと、ユニットを1つずつ編成すると見なすことの違いを反映しています。

3
Ted Hopp