命令セットとは何ですか?

click fraud protection

すべてのCPUは、特定の命令セットをサポートするようにゼロから設計されています。 命令セットは、CPUが実行できるハードコードされた操作のセットです。 これらの操作には、たとえば、2つの数値を加算したり、プログラムの別の部分にジャンプしたり、2つの値を比較したりできます。 コンピューターが実行できる各操作は、オペコードによって一意に表されます。

オペコード

プログラムを実行するとき、CPUはプログラムカウンターを使用して、次に実行する必要のある命令を追跡します。 命令がフェッチされると、プログラムカウンターは、次の命令の開始を指すように、命令の長さだけインクリメントされます。 各命令はオペコードで構成されています。 命令に応じて、オペランドが含まれる場合と含まれない場合があります。 オペランドは、定数値でも、CPUレジスタまたはシステムRAM内の値の場所へのポインタでもかまいません。

完全な命令がフェッチされたら、デコードする必要があります。 これは、CPUがオペコードとオペランドを分離するプロセスです。 デコードされたオペコードは、CPU内の特定の電気経路を有効または無効にするために使用され、正しい動作をもたらします。

命令がデコードされると、実行されます。 CPUの正確な動作は、操作によって異なります。 加算演算は、2つの値を合計します。 ジャンプ操作は、プログラムのどこにジャンプするかを計算します。 比較操作は、2つの値を比較します。 NOPはNoOperationの略であるため、NOP操作はアイドル状態になります。

ほとんどの命令は、操作の結果を出力します。 この出力は、プロセッサレジスタに送られ、必要に応じてシステムRAMに送られます。 これらの各操作は、完了するまでに1クロックサイクルかかります。

違法なオペコード

各CPUアーキテクチャには、製造元によって公開されたオペコードの特定のリストがあります。 これらのオペコードの値は、必ずしも同じクロスプラットフォームである必要はありません。そのため、ソフトウェアをさまざまなアーキテクチャ用にコンパイルする必要があります。 場合によっては、製造元には文書化されていないオペコードも含まれています。 これらは「違法なオペコード」と呼ばれます。 不正なオペコードは、文書化されていませんが、呼び出されるたびに同じ機能を実行します。 ただし、文書化されていない非標準の機能として、CPUアーキテクチャを更新するとそれらを簡単に削除できます。

Apple IIの初期のコンピュータゲームの中には、特定の違法なオペコードに依存していたものがありました。 その後、IIcがゲームに必要な違法なオペコードを削除したため、後のAppleIIcCPUリビジョンでパフォーマンスと安定性の問題が発生しました。 違法なオペコードは、著作権保護サークルでも、コンテンツをクラックする海賊との戦いにおける隠すことによるセキュリティ手段として使用されていました。 一部の違法なオペコードは、単にデバッグツールおよびエラーハンドラーとして意図されています。

x86命令セットには、文書化されていない不正なオペコードが多数含まれています。 興味深いことに、これらの一部はIntelCPUとAMDCPUの間で共有されており、文書化されていないにもかかわらず、両社がその目的を公に認識していることを示しています。

コンパイラとアセンブリ

ほとんどのプログラムは高級言語で書かれています。 これらは比較的読みやすく、学習曲線を最小限に抑えるために英語の単語や速記を使用することがよくあります。 コンピュータがこれらのプログラムを実行するには、それらをコンパイルする必要があります。 コンパイラは基本的にトランスレータです。 高水準コードを取得し、CPUが理解できる命令であるコンピューターコードに変換します。

一部の言語では、マシンコードをオンザフライで生成する以前にコンパイルされたプログラムを介してコンパイルされていないコードを実行することも可能です。 アセンブリは、開発者が実行される操作を直接可視化および制御できるようにするために省略形を使用する低レベルのプログラミング言語です。 NOPは、アセンブリの省略形の例です。

結論

命令セットは、CPUアーキテクチャが実行できる公式関数のリストです。 実行できる操作の一覧です。 これらの操作はCPUにハードコードされ、それぞれのオペコードを使用して呼び出されます。

ソフトウェアは通常、コンパイラを使用して、人間が読める高水準コードからCPUが読み取れるマシンコードに変換します。 CPUアーキテクチャには、不正なオペコードと呼ばれる文書化されていないオペコードが含まれている場合があります。 不正なオペコードは、技術的には命令セットの一部です。 ただし、将来のプラットフォームの反復では確実に利用できない可能性があります。 以下のコメントにあなたの考えを残すことを忘れないでください。