アニケットはよくやったけど、私もやってみよう。
まず、最も低いレベルでは、コンピューター プログラムとすべてのデータは単なる数字 (単語と呼ばれることもあります) であり、ある種のメモリ内にあることを理解してください。最も一般的には、これらのワードは 8 ビット (1 と 0) の倍数 (32 と 64 など) ですが、必ずしもそうとは限りません。プロセッサによっては、各ワードがかなり大きくなります。とにかく、一連の 1 と 0、または必要に応じてオンとオフで表されるのは単なる数字です。数字が何を意味するかは、何を/誰が読んでいるか次第であり、プロセッサの場合、一度に1ワードずつメモリを読み取り、見た数字(命令)に基づいて何らかのアクションを実行します。このようなアクションには、メモリから値を読み取る、メモリに値を書き込む、読み取った値を変更する、メモリ内の別の場所にジャンプして命令を読み取るなどがあります。
非常に初期の頃、プログラマーは文字通りスイッチのオンとオフをフリックしてメモリを変更し、ライトをオンまたはオフにして 1 と 0 を読み上げていました。キーボードや画面などはなかったからです。時間が経つにつれて、メモリが大きくなり、プロセッサがより複雑になり、入力用のディスプレイ デバイスとキーボードが考え出され、それによりプログラミングがより簡単になりました。
アニケットの言い換え:
OPCODE は、読み取り、書き込み、ジャンプ、追加など、実行する操作を表すものとしてプロセッサによって解釈される命令語の一部です。多くの命令には、メモリ内のどこから読み取りまたは書き込みを行うか、どこにジャンプするかなど、命令の実行方法に影響を与えるオペランドもあります。たとえば、命令のサイズが 32 ビットの場合、プロセッサはオペコードに 8 ビットを使用し、2 つのオペランドのそれぞれに 12 ビットを使用できます。
スイッチの切り替えから一歩進んで、「モニター」と呼ばれるプログラムを使用してコードがマシンに入力される場合があります。プログラマーは簡単なコマンドを使用して、変更したいメモリを指定し、MACHINE CODE を数値で入力します。たとえば、0 から 9 までと A から F までの 16 進数を使用します。
スイッチを切り替えるよりはましですが、機械語の入力は依然として遅く、エラーが発生しやすくなります。それからのステップ アップは、命令を表す実際の番号の代わりにより簡単に覚えられるニーモニックを使用するアセンブリ コードです。ASSEMBLER の主な仕事は、プログラムのニーモニック形式を対応するマシン コードに変換することです。これにより、特に命令の一部がジャンプ先のメモリアドレスまたはスキップするワード数であるジャンプ命令のプログラミングが容易になります。マシンコードでプログラミングするには、正しい命令を作成するために骨の折れる計算が必要であり、コードが追加または削除された場合、ジャンプ命令を再計算する必要がある場合があります。アセンブラはプログラマに代わってこれを処理します。
これにより、メモリの読み取りや書き込みなどの低レベルの操作や基本的な計算を記述するという点で、マシン コードと基本的に同じである BYTECODE が残ります。バイトコードは通常、PHP や Java などの高水準言語をコンパイルするときに生成されると考えられており、多くのハードウェア ベースのプロセッサのマシン コードとは異なり、高水準言語の特定の機能をサポートする操作を行うことができます。主な違いは、バイトコードのプロセッサは通常プログラムであるということです。プロセッサは、一部のバイトコード仕様を解釈するために作成されています。たとえば、Smalltalk バイトコード用の SOAR (Smalltalk On A RISC) と呼ばれるプロセッサです。通常、ネイティブ マシン コードのバイトコードとは呼びませんが、CISC や EISC などの一部のタイプのプロセッサ (たとえば、レコード プレーヤーを作った人々の Linn Rekursiv) では、