アカウント名:
パスワード:
直接的には、それだけバイナリ互換が重要だったからなんだけれども386のアーキテクチャ設計が非常に優秀だったからってのがあるでしょう。
で、ARMがx86を殺すかどうかなんとも言えないと思うけどな。
386が優秀ではないとは言わないが、i686で採用した内部RISCによって延命できたと思うよ。別の見方をすると、CPUシリーズで異なるuOPを吸収しているのがx86じゃないかな。生物界でも、優秀な種が生き残っているというわけでもなく、柔軟性があったからという例は多い。
私はi386より68Kの方が優秀だったと思う。
> 私はi386より68Kの方が優秀だったと思う。i386比でなら68kは善戦していますが、最短命令が1ワード(2バイト)と言うのは、i386の最短命令長1バイトと比べてメモリ貧乏だった当時はコード密度の点で厳しかったです。また、i386は自力で仮想記憶をサポートしていますが、68kは68010に外部MMUを追加しなければ仮想記憶をサポートできなかったり、命令セットが32bit化けを最初から想定しているなど掲げた理想は高かったのに比べて実装が追いついていない面もありました。
アーキレベルの残念な点は・CLR命令でRMWバスサイクル発生させる( MOVEQ #0, DST で十分)・相対ジャンプのオフセットが何故バイト?奇数だとアドレスエラーになるのでワードで指定すれば倍の範囲にジャンプできた・直交性のあるアーキを標榜する割にデータレジスタとアドレスレジスタが別などなど、それほど良いプロセッサかどうかは疑問。
結局、i386と競ったというのが伝説の原因?
当時、32bitも使ってバイトアドレッシングするなら、ビットアドレッシングで下位4bitは0固定が基本ってすりゃ綺麗なのにと思ったもんだな。まあそういうのも実際あったし。
実際010までは上位8ビットはアドレスバスにでませんでしたしね。
そこでポインタの上位バイトに参照先のオブジェクトを表すコードを埋め込む(貧乏)テクニックがありました。初期のMacintoshはまさにこれで、お陰で32bitクリーンなポインタかが32bit化で問題になったり。
その反省からか、AMD64ではアドレスバスに信号が出ていないビットもすべて1で埋めておかないと例外が出るようになりましたね。Z80あたりにはIXやIYの上半分や下半分だけにアクセスできる怪しい命令とかあったけど最近のプロセッサでは定義されていない命令は全部例外投げるようになったとか。
Z80でCレジを使ってIO命令を実行すると上位バイトにAレジの値が出るとか286でHIMEMにアクセスできてしまうパターンが有るとかプロセッサのERRATAなんだろうけど、後に仕様に昇格する大事な機能もあったりすますね。
Z80で正規の命令にも(8080にない)ニブル(4ビット)単位でローテートする命令があったりするのは、内部のALUが4ビット幅であったからだと聞いたことがあります(命令が増えているのに回路規模が変わらないのはマイクロコードをつかたからとも)。
Z80でCレジを使ってIO命令を実行すると上位バイトにAレジの値が出るとか
アドレス上位にBレジスタの値が出ることはマニュアルにも記述があった筈。
Z80で正規の命令にも(8080にない)ニブル(4ビット)単位でローテートする命令があったりするのは、内部のALUが4ビット幅であったからだと聞いたことがあります
Z80のRRD/RLD命令って、ALU関係ないんじゃね?
>> Z80でCレジを使ってIO命令を実行すると上位バイトにAレジの値が出るとか> アドレス上位にBレジスタの値が出ることはマニュアルにも記述があった筈。
Cレジ間接では上位アドレスにBレジで、IOポート直接指定ではAレジでした。(「なんで両方Bレジュじゃねーんだ」と思ったおぼろげな記憶が)
> Z80のRRD/RLD命令って、ALU関係ないんじゃね?
外部から見えるALUでなく、マイクロコードで使用される内部のALUが4ビット幅だって話です。これを2回廻して1バイトの演算をしているので、4ビット単位のシフトが少ないクロックで実行できる仕組みがあったということ。
外部から見えるALUでなく、
外部からALUなんて見えんよ。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
192.168.0.1は、私が使っている IPアドレスですので勝手に使わないでください --- ある通りすがり
そりゃあれですよ (スコア:2)
直接的には、それだけバイナリ互換が重要だったからなんだけれども
386のアーキテクチャ設計が非常に優秀だったからってのがあるでしょう。
で、ARMがx86を殺すかどうかなんとも言えないと思うけどな。
Re: (スコア:0)
386が優秀ではないとは言わないが、i686で採用した内部RISCによって延命できたと思うよ。
別の見方をすると、CPUシリーズで異なるuOPを吸収しているのがx86じゃないかな。
生物界でも、優秀な種が生き残っているというわけでもなく、柔軟性があったからという例は多い。
私はi386より68Kの方が優秀だったと思う。
Re: (スコア:2)
> 私はi386より68Kの方が優秀だったと思う。
i386比でなら68kは善戦していますが、最短命令が1ワード(2バイト)と言うのは、i386の最短命令長1バイトと比べてメモリ貧乏だった当時はコード密度の点で厳しかったです。
また、i386は自力で仮想記憶をサポートしていますが、68kは68010に外部MMUを追加しなければ仮想記憶をサポートできなかったり、命令セットが32bit化けを最初から想定しているなど掲げた理想は高かったのに比べて実装が追いついていない面もありました。
アーキレベルの残念な点は
・CLR命令でRMWバスサイクル発生させる( MOVEQ #0, DST で十分)
・相対ジャンプのオフセットが何故バイト?奇数だとアドレスエラーになるのでワードで指定すれば倍の範囲にジャンプできた
・直交性のあるアーキを標榜する割にデータレジスタとアドレスレジスタが別
などなど、それほど良いプロセッサかどうかは疑問。
結局、i386と競ったというのが伝説の原因?
Re: (スコア:0)
当時、32bitも使ってバイトアドレッシングするなら、ビットアドレッシングで下位4bitは0固定が基本ってすりゃ綺麗なのにと思ったもんだな。
まあそういうのも実際あったし。
Re: (スコア:2)
実際010までは上位8ビットはアドレスバスにでませんでしたしね。
そこでポインタの上位バイトに参照先のオブジェクトを表すコードを埋め込む(貧乏)テクニックがありました。
初期のMacintoshはまさにこれで、お陰で32bitクリーンなポインタかが32bit化で問題になったり。
Re: (スコア:0)
その反省からか、AMD64ではアドレスバスに信号が出ていないビットもすべて1で埋めておかないと例外が出るようになりましたね。
Z80あたりにはIXやIYの上半分や下半分だけにアクセスできる怪しい命令とかあったけど最近のプロセッサでは定義されていない命令は全部例外投げるようになったとか。
Re: (スコア:2)
Z80でCレジを使ってIO命令を実行すると上位バイトにAレジの値が出るとか
286でHIMEMにアクセスできてしまうパターンが有るとか
プロセッサのERRATAなんだろうけど、後に仕様に昇格する大事な機能もあったりすますね。
Z80で正規の命令にも(8080にない)ニブル(4ビット)単位でローテートする命令があったりするのは、内部のALUが4ビット幅であったからだと聞いたことがあります(命令が増えているのに回路規模が変わらないのはマイクロコードをつかたからとも)。
Re: (スコア:0)
Z80でCレジを使ってIO命令を実行すると上位バイトにAレジの値が出るとか
アドレス上位にBレジスタの値が出ることはマニュアルにも記述があった筈。
Z80で正規の命令にも(8080にない)ニブル(4ビット)単位でローテートする命令があったりするのは、内部のALUが4ビット幅であったからだと聞いたことがあります
Z80のRRD/RLD命令って、ALU関係ないんじゃね?
Re: (スコア:2)
>> Z80でCレジを使ってIO命令を実行すると上位バイトにAレジの値が出るとか
> アドレス上位にBレジスタの値が出ることはマニュアルにも記述があった筈。
Cレジ間接では上位アドレスにBレジで、IOポート直接指定ではAレジでした。
(「なんで両方Bレジュじゃねーんだ」と思ったおぼろげな記憶が)
> Z80のRRD/RLD命令って、ALU関係ないんじゃね?
外部から見えるALUでなく、マイクロコードで使用される内部のALUが4ビット幅だって話です。
これを2回廻して1バイトの演算をしているので、4ビット単位のシフトが少ないクロックで実行できる仕組みがあったということ。
Re:そりゃあれですよ (スコア:0)
外部から見えるALUでなく、
外部からALUなんて見えんよ。
Re:そりゃあれですよ (スコア:2)