0

友人と私は昨夜組み込みプロセッサなどについて話していましたが、ASMと特定の命令セットのトピックについて話しましたが、この質問はx86プロセッサにも適用できると思います。

ASMのレジスタについて学習していると、すべてのレジスタが100%一意で特定の用途を持っていることが明らかになりました(少なくともx86アーキテクチャでは)。しかし、彼のプロセッサのいくつかについて話し合ったとき、彼が使用しているチップのいくつかには、何にでも使用できるいくつかの汎用レジスタがあり、命令によって特に使用されるレジスタはほとんどないことを私に知らせました。

要約すると、技術的にはレジスターを使用して指示を実行することはできませんか?それらはすべて同じサイズですが、どのような違いがありますか(スタックポインタなどは別として)?

4

2 に答える 2

3

任意のレジスタを命令のオペランドとして使用できる命令セットは、直交と呼ばれます。8086は間違いなく直交設計ではありませんでした。8086の数年後にリリースされた競合他社は、高度に直交する設計であり、その品質で多くのプログラマーに支持されたMotorola68000でした。

ただし、8086の設計はランダムに選択されたわけではなく、2つの非常に重要な原則が役割を果たしました。

  • 前世代の8080との互換性が大きな目標でした。古いアセンブリコードを新しいプロセッサに機械的に変換できるようにします。次に、8080は8008の影響を大きく受けました。新しいアーキテクチャを市場に受け入れることは常に困難であり、Intelは、ツールとプログラムへの投資が顧客にとって重要な資産であることを早期に認識していました。非常に長い間それをうまく果たしてきた目標、そして確かにそれが持っている限りデザインが続いた理由。

  • プロセステクノロジは、プロセッサの実装に使用できるトランジスタの数に確固たる上限を設定します。8086は29,000個のアクティブトランジスタしか必要としませんでした。これは16ビットプロセッサにとってはかなりのエンジニアリング上の偉業です。非直交設計を使用すると、多くのグルーロジックを削除でき、高速になります。68000は、予算の直交する命令セットに別の用途を選択しましたが、バスインターフェイスがかなり不安定で、たとえば、データが非整列アドレスでアドレス指定されたときに悪名高いバスエラープロセッサ障害が発生しました。

于 2012-12-09T17:24:47.223 に答える
1

すべてのレジスタが100%ユニークで特定の用途を持っていることが明らかになりました

誤り。EAXの唯一の用途は何ですか?

技術的に指示を実行するために使用されるレジスターはありません

任意のレジスタを好きなように使用できます。一部の命令は、特定のレジスタでオペランド/戻り結果を期待していることに注意する必要があります。たとえば、0になるまでloopデクリメントし、ESIからEDIに移動します。ECXmovsb

于 2012-12-09T16:26:55.067 に答える