マシンコードは、特定のプロセッサアーキテクチャのCPU命令に対応する単なるバイナリデータです。
それがどこに保存されるかに依存するので、私はそれがどのように保存されるかについてはあまり説明しません。たとえば、ディスク上では、通常、一連の磁化領域として保存されます。マシンコードは、ストレージの面で他のバイナリデータと同じです。データがコンピューターにどのように保存されるかについて質問がある場合は、いくつか例を挙げると、HDD、RAM、レジスターなど、コンピューター内のさまざまなデータストレージデバイスを調査する必要があります。
マシンコードがどのように格納されているかを視覚化する最も簡単な方法は、16進エディタでいくつかを確認することです。これは、16進数で表されるバイナリデータを示しています。たとえば、次のように指示します。
0xEB 0xFE
これは、1110101111111110または60414と簡単に書くことができます。これは、バイナリを人間が読める形式に変換する方法によって異なります。
この命令は無限ループを表します。(これは、x86 CPUで実行されていることを前提としています。他のCPUは、必要に応じて解釈できます。)アセンブリで次のようにコーディングできます。
j:
jmp j
アセンブラを実行すると、上記のコードが取得され、上記のバイナリマシンコードに変換されます。
指示は実際には2つの部分です。1つ目は、オペコードと呼ばれるもので、0xEB
です。このコードがCPUに入ると、次のことを意味します。プログラムから1バイトを読み取り、その数バイトのデータをスキップします。次に、CPUがバイトを読み取ります0xFE
。符号付き整数を想定しているため、2進データを数値-2として解釈します。その後、命令の読み取りが完了し、命令ポインタが2バイト進みます。次に、命令が実行され、命令ポインタが-2(0xFE)バイト先に移動します。これにより、命令ポインタは、命令が開始されたときと同じ値に効果的に設定されます。
これがあなたの質問に答えることを願っています。CPUの内部動作について疑問がある場合は、マイクロコードと電子論理ゲートを読んでください。基本的には、1ビットが5ボルトの電荷であり、0ビットが0ビットの電荷であるなど、一連の電圧差です。