例としてPythonを取り上げましょう。私が間違っていなければ、プログラムを作成すると、コンピューターは最初にコードをCに「変換」します。次に、Cからアセンブリに変換します。アセンブリはマシンコードで記述されています。(これは私がこれについて持っている漠然とした考えなので、間違っている場合は訂正してください)しかし、書かれたマシンコード、より正確には、プロセッサはその命令をどのように処理し、どのように何をすべきかを「見つける」のですか? ?
4 に答える
私が間違っていなければ、あなたがそれにプログラムするとき、コンピュータは最初にコードをCに「変換」します。
いいえ、そうではありません。Cは、システムプログラミングに使用される最も普及しているプログラミング言語であることを除けば、特別なことではありません。
Pythonインタープリターは、Pythonコードを仮想マシンによって実行されるいわゆるPコードに変換します。この仮想マシンは、P-Codeを読み取る実際のインタープリターであり、P-Codeのすべてのブリップにより、インタープリターは事前定義されたコードパスを実行します。これは、ネイティブのバイナリマシンコードがCPUを制御する方法とそれほど変わりません。より現代的なアプローチは、Pコードをネイティブマシンコードに変換することです。
CPythonインタープリター自体はCで記述されており、ネイティブバイナリにコンパイルされています。基本的に、ネイティブバイナリは、各数値が特定の操作を指定する一連の長い数値(オペコード)です。一部のオペコードは、それに続く定義された数の数がオペコードではなくパラメータであることをマシンに通知します。
CPU自体には、いわゆる命令デコーダが含まれています。これは、ネイティブの2進数を数値で読み取り、読み取る各オペコードに対して、この特定のオペコードを実装するCPUの回路に電力を供給します。メモリをアドレス指定するオペコード、メモリからレジスタにデータをロードするオペコードなどがあります。
プロセッサはどのように命令を処理し、どのように何をすべきかを「見つけ出す」のでしょうか。
単なるバイナリパターンであるすべてのオペコードに対して、CPU上に独自の回路があります。オペコードのパターンがこのオペコードを有効にする「スイッチ」と一致する場合、その回路はそれを処理します。
これについてのウィキブックスは次のとおりです:http: //en.wikibooks.org/wiki/Microprocessor_Design
数年前、ある人が単純な機能ロジックとメモリICから、つまりマイクロコントローラなどを使用せずに、動作するコンピュータ全体を構築しました。「BigMesso'Wires」と呼ばれるプロジェクト全体は、多かれ少なかれゼロから構築されたCPUでした。唯一のオタクは、単一のトランジスタからそのことを構築することでした(実際にはそれほど難しくはありませんでした)。彼はまた、CPUが内部でどのように機能するかを確認し、各命令をデコードして実行できるシミュレーターも提供しています。BigMess o'Wires Simulator
編集:私が最初にその答えを書いたときから、最新のディスクリートコンポーネントから本格的なCPUを構築することが行われました:あなたの考慮のために、MOS6502(Apple II、コモドールC64、NES、BBC Microなどに電力を供給したCPU)が構築されましたDiscetesから: https ://monster6502.com/
マシンコードは「プロセッサと通信」しません。
むしろ、プロセッサはマシンコードを「評価する方法を知っている」。[広く普及している] VonNeumannアーキテクチャでは、このマシンコード(プログラム)は、各セルにマシンコード命令(またはデータ)が含まれるインデックス可能な配列と考えることができますが、ここでは無視します。
CPUは、現在の命令(多くの場合、PCまたはプログラムカウンターによって識別されます)を「見て」、何をするかを決定します(これは、トランジスタ/「ベアメタル」で直接実行するか、さらに低レベルのコードに変換することができます)。 ):これは、フェッチ-デコード-実行サイクルとして知られています。
命令が実行されると、制御フラグの設定、レジスタへの値の入力、プログラム内の別のインデックスへのジャンプ(PCの変更)などの副作用が発生します。このCPUの簡単な概要を参照してください。少し上に。
これは、各命令の評価(発生した場合)と、従来のプロセッサの動作をもたらす副作用の相互作用です。
(もちろん、最近のCPUは非常に複雑で、多くの巧妙なトリッキーなことを行います!)
それはマイクロコードと呼ばれます。マシンコード命令を読み取り、それを低レベルのデータフローに変換するのはCPU内のコードです。
たとえば、CPUがadd
命令に遭遇すると、マイクロコードは2つの値を取得する方法、計算を行うためにそれらをALUにフィードする方法、および結果を配置する場所を記述します。
電気。回路、メモリ、および論理ゲート。
また、Pythonは通常、C→アセンブリ→マシンコードではなく、解釈されると思います。