web-dev-qa-db-ja.com

CPUはどのようにしてコマンドと命令が実際に意味するのかを「知る」のですか?

プロセッサは、さまざまなコマンドの意味を「知っている」のですか?

MOV、Push、CALLなどのアセンブリレベルのコマンドを考えています...

73
Simon Verbeke

コンピュータが Assembly レベルの命令を解釈すると、これらの命令は、CPUが読み取るためのバイナリの同等のものに変換されます。 CPUが命令を実行すると、命令のオペコード部分が microcode の同等物を含む個々の「マイクロプログラム」に解釈されます。ご存じのとおり、完全なAssembly命令は、オペコードと、必要に応じてオペコードに関連する適用可能なデータ(レジスタ名、メモリアドレスなど)で構成されています。

マイクロコード命令は非常に低レベルであり(さらにアセンブリよりも)、マイクロプロセッサ内のロジックのフローを制御する実際のデジタル信号を制御します。たとえば、1つのマイクロコード命令で 条件コードレジスタ フラグを新しい値で更新したり、CPU レジスタ[〜#〜] alu [〜#〜] 単位。より複雑なタスクも可能ですが、これはwhatマイクロコードが使用されるという一般的な考え方を示しています。

コンパイルから実行までの一般的な流れは以下のとおりです。アセンブリ命令がアセンブルされます(バイナリの同等の0と1、または今後は論理信号に変換されます)。これらのロジック信号は、次にCPUによって解釈され、CPUのフローに特定の命令を実行するよう指示する、より低レベルのロジック信号に変換されます。これは、プロセッサのアーキテクチャと設計に応じて、1つ以上のクロックサイクルを要する場合があります(ほとんどのプロセッサリファレンスマニュアルには、この例のように、特定の命令を実行するために必要なクロックサイクル数 が記載されています )。

これはすべて、ハードプログラムされたマイクロコード(ある種の [〜#〜] rom [〜#〜] でプロセッサー内に物理的に埋め込まれ、製造時に設定されます)を使用して行われます。実際の低レベル 論理ゲート を介してフローを誘導します。これは、抽象的なアセンブリ命令とプロセッサの物理的な電気ロジックとの間のインターフェースを提供します。


したがって、要約すると、プロセッサ命令はプロセッサによってアセンブルおよびロードされます。次に、プロセッサはこれらの命令を使用して、その特定の命令に対応するマイクロプログラム(マイクロコードの形式)を検索します。これは、命令を「実際に」実行するものです。特定の命令のマイクロコードが実行されると(1つ以上のクロックサイクルがかかる場合があります)、プロセッサはマイクロコードを実行して次の命令をフェッチし、サイクルが繰り返されます。

88
Breakthrough

プロセッサは、コマンドが何であるかを実際に「認識」していません。コマンドは、コマンドが意味するものと私たちが解釈することをプロセッサに実行させる単なるバイナリパターンです。

たとえば、ADD-R1-into-R2操作では、レジスタ1と2の値がALU(算術論理演算ユニット)に到達し、ALUが他のさまざまなものの代わりに加算器の出力を使用し、レジスタ2の値を置き換えるALUの出力。これらすべてを実現する単純な論理回路があります( マルチプレクサ加算器カウンタ 、...)、ただし実際のプロセッサは非常に複雑な最適化を使用します。

それは、ブレーキを踏んだときに車が減速することをどのように知っているかを尋ねているようなものです。車は知らない、ブレーキペダルは偶然にハードパッドがホイールに押し付けられる方法を間接的に制御するだけです。

37
Craig Gidney

たとえば、x86/IA-32プロセッサーに即時の8ビット値をレジスターに移動するように指示する命令を考えてみます。この命令のバイナリコードは10110で、その後に使用するレジスタの3ビットの識別子が続きます。 ALレジスターのIDは000なので、次のマシンコードはALレジスターにデータ01100001をロードします。

10110000 01100001

このバイナリコンピュータコードは、次のように16進数で表現することにより、より人間が読めるようにすることができます。

B0 61

ここで、B0は「次の値のコピーをALに移動する」ことを意味し、61は値01100001の16進数表現であり、10進数では97です。インテルアセンブリ言語は、このような命令にニーモニックMOV(移動の略語)を提供します。そのため、上記のマシンコードは、セミコロンの後に、必要に応じて説明コメントを付けて、アセンブリ言語で次のように書くことができます。これは読みやすく、覚えやすいです。

http://en.wikipedia.org/wiki/Assembler_language

つまり、アセンブリプログラムを「アセンブル」すると、次のような指示が

MOV AL, 61h

数値に変換され、CPUは特別な意味を関連付け、それに応じて動作します。

10
Nate

推奨読書:

また、学生がCPUを実装するコースであるUC Berkeleyの CS152:Computer Architecture and Engineering のコースノートも確認してください。

グーグルで「自作CPU」を検索すると、たくさんの便利な機能が見つかります。

6
nibot

最も極端に低いレベルでは、CPUが実行できるのは追加だけです。加算から、減算、乗算、除算を行うことができます(これらは異なる方法での加算にすぎないため)。 CPUはこれを使用して、メモリアドレスに追加を適用することにより、メモリ内のデータを移動します。

ただし、これは可能な限り低いレベルであることを覚えておいてください。 CPUは実際、マイクロコードの形で特定のコマンドを「理解」します。 Breakthroughの回答を参照してください。非常によく書かれています。

4
n0pe

Programmers.stackexchange.comで関連する回答を示しました。参照 コンピューターはどのように機能しますか? ここで、コンピューターが電子を移動するための命令を解釈する方法について、最初からすべてについて簡単に説明しました。

2
Lie Ryan