レジスタのセットとCPUの命令はどのように機能しますか?

PC用のx86CPUで動作するようにコンパイルされたプログラムがで動作しない理由は何ですか? ARM CPU 例えば? プログラムを特定のプロセッサフ​​ァミリと互換性があり、他のプロセッサフ​​ァミリと互換性がない理由は何ですか? レジスタとは何ですか?それらの機能は何ですか? この記事では、何を説明します レジスタと命令CPUは 理解できるように

特定の命令セットを持つプロセッサ、または新しいプロセッサに命令セットが追加されたプロセッサについて何度も話しました。 これが何を意味するか見てみましょう。

CPUの命令

指示とは何ですか?

命令は、プロセッサで実行するために送信するアクションにすぎません。 命令は、浮動小数点、整数、ベクトル、スカラー、論理演算、データ移動操作、ビット移動操作(ビットが位置を変更する場合)、ジャンプ操作など、さまざまなタイプのデータを使用した算術演算にすることができます。

これらの同じ命令は、データの場所に応じて他のサブタイプに分類されます。 たとえば、一部の命令では、その時点でレジスタにあるデータを操作できますが、他のケースでは、データが配置されているメモリアドレス(直接モード)またはメモリのアドレス(間接モード)をマークする必要があります)。

CPUがバイナリコードで命令を読み取る方法

私たちのシステムが使用しているCPUに関係なく、それらはすべて、そのファミリに対応する特定の方法でバイナリコードを読み取ります。 彼らがすることは、彼らが実行しているバイナリコードの特定の量のビットを取り、その性質に従ってそれらの意味を解釈することです。 すべての命令は次のようにコーディングされます。最初の桁は命令コードとその実行方法に対応し、最後のビットはデータ自体または命令を実行するデータが見つかった場所です。

CPUのレジスタと命令のセットはISA(Instruction Set Architecture)と呼ばれ、すべて同じISAのもとで同じエンコーディングの命令を使用しているため、それらのバイナリコードも同じです。

アセンブリ言語とのステートメントセットの関係

Instrucciones x86を設定する

すべてのプロセッサフ​​ァミリには、その中に共通のアセンブリ言語があり、その命令には、そのプロセッサフ​​ァミリのレジスタおよび命令のセットと1:1の相関関係があります。 上の表では、さまざまなx86アセンブリ言語の命令とそれらの命令コードとの関係を確認できます。これは、表ではXNUMX進数で表されています。

新しい命令がISAに継続的に追加されることに注意してください。これにより、これらの新しい命令を明示的に使用する非常に新しいプログラムは、それらをサポートするプロセッサでのみ機能します。 一般に、命令セットはほとんど変化せずに長期間にわたって安定していますが、標準の一部として最終的に使用されるか、または後で破棄される特定の市場向けの命令が随時導入されています。

また、既存の命令よりも効率的な新しい命令の場合もありますが、これらの命令は、市場に依存するソフトウェアが大量にあるため、セットから削除されません。

RISC vs CISC vs RISC

RISCプロセッサには命令がほとんどないため、命令の不足をより複雑な命令で補う必要がありますが、見た目が軽いため、実行時に高速になります。 一方、CISCプロセッサは、ハードウェアのより複雑な構成を必要とするはるかに複雑な命令セットを備えていますが、代わりに、これらの命令をより少ないサイクルで実行します。

この違いは、当時は物議を醸していますが、PCでのPentium Proの登場以来、プログラムが一連のレジスタと命令を使用するという事実にもかかわらず、これらはプロセスでより簡単な命令のマイクロコードに変換され、CISCアーキテクチャがRISCアーキテクチャのように動作し、複雑な命令を使用して高いクロック速度を実現できます。

CPUのレジスタ

レジスターおよびインストラクション CPU

レジスタは、存在するプロセッサに最も近いメモリであり、したがって最速です。 これらは、プロセッサ制御ユニットで直接操作できる非常に小さなメモリです。 これらは、算術演算を実行するだけでなく、あらゆる種類の一般的なタスクを実行するために使用されます。

ISAに関係なく、CPUで最も一般的なレジスタは次のとおりです。

  • アキュムレータタイプレジスタ :算術演算に使用されます。 各ファミリには、アキュムレータタイプの異なる数のレコードがあります。
  • メモリアクセスレジスタ :RAMからアクセスするデータのメモリアドレスを含みます。
  • メモリとの間のデータレジスタ :メモリからコピーされたデータ(読み取り)または特定のメモリアドレスに書き込まれたデータ(書き込み)が含まれます。
  • 汎用レジスター :これらは、特定のユーティリティを持たないメモリレジスタですが、呼び出されるデータをできるだけ迅速に格納するために使用されます。
  • プログラムカウンター :実行する次の命令を示します。 ジャンプ命令は、次の命令ではなくプログラムの別の部分にアクセスしたくないときにそれらを変更します。 完全な各命令サイクルで、メモリアドレスは1ずつ増加し、プロセッサのアドレスバスに関連付けられます。

プログラムカウンタレジスタなど、プロセッサが指す次のメモリアドレスを示す一部のCPUレジスタは、すべてのCPUおよび他のタイプのプロセッサにあり、他のレコードはそれぞれに固有でありながらプログラムを実行することができます一連の記録と指示により、異なるISA間の1:1の相関はほぼ不可能になります。

命令コードの1:1コンバーターがあったとしても、XNUMXつのプロセッサーが同じ加算命令を持っていても、レジスターとそれらが使用するレジスターの使用方法が異なり、ある家族にはレジスターがあり、他のファミリーにはありません。 これらの困難の例は、両方が遭遇しました Microsoft 適応するときのクアルコム Windows すべてのx10アプリケーションがARMCPUでスムーズに実行されるように、ARMに対して86。

ただし、命令翻訳ソフトウェアを使用するなどの解決策があります。 上記のソフトウェアは、バイナリコードを中間コードに転送してから、アプリケーションを実行するターゲットプロセッサのバイナリコードに転送します。 明らかに、このプロセスははるかに遅く、市場に存在しないプロセッサのファミリからの非常に古いソフトウェアを実行することのみをお勧めします。