命令サイクル(フェッチ・デコード・実行サイクル、または単にフェッチ・実行サイクルとも呼ばれる)とは、中央処理装置(CPU)が起動からコンピュータのシャットダウンまで命令を処理するために実行する一連の動作のことです。命令サイクルは、フェッチ段階、デコード段階、実行段階の3つの主要な段階から構成されます。

より単純なCPUでは、命令サイクルは順次実行され、各命令は処理されてから次の命令が開始されます。ほとんどの最新のCPUでは、命令サイクルは命令パイプラインを介して並行して、多くの場合並列に実行されます。つまり、前の命令の処理が完了する前に次の命令の処理が開始されます。これは、サイクルが個別のステップに分割されているため可能です。[ 1 ]
プログラムカウンタ(PC)は、次に実行される命令のメモリ アドレスを保持するレジスタです。各命令がメモリ アドレス レジスタ(MAR)にコピーされた後、PC は次のシーケンシャル命令へのポインタをインクリメントするか、指定されたポインタにジャンプするか、条件付きで指定されたポインタに分岐することができます。[ 2 ]また、CPU が停止している間、PC は外部割り込みまたはリセット信号を受信するまで、実行中の命令を保持します。
MAR(メモリアドレスレジスタ)は、命令の位置を示すアドレスを格納する役割を担います。読み出し信号が発信されると、MARに格納されたアドレス内の命令が読み出され、メモリデータレジスタ(MDR)、別名メモリバッファレジスタ(MBR)に格納されます。このコンポーネントは、メモリ内の位置を指すアドレスバッファとして機能します。
MDRは、MARのアドレスから読み取られた命令を一時的に保持する役割を担います。命令サイクルにおいて双方向レジスタとして機能し、メモリからCPUへ、あるいはCPUからメモリへ出力することができます。
現行命令レジスタ(CIR、ただし命令レジスタIRと呼ばれることもある)は、CPUが命令をデコードし、実行段階に必要な正しい制御信号を生成するために、命令を一時的に保持する場所です。
制御ユニット(CU)は、現在の命令レジスタ(CIR)内の命令をデコードします。次に、CUはCPU内の他のコンポーネント(例えば、算術論理演算ユニット(ALU)など)に信号を送信したり、メモリに信号を送りオペランドをフェッチしたり、浮動小数点演算ユニット(FPU)に信号を送信したりします。ALUは、命令内の特定のオペコードに基づいて算術演算を実行します。例えば、RISC-Vアーキテクチャでは、命令が論理演算か算術演算かを区別するために、funct3とfunct7というオペコードが存在します。
各コンピュータのCPUは、異なる命令セットに基づいて異なるサイクルを持つことができますが、次のサイクルに似ています。[ 3 ]
さらに、ほとんどのプロセッサでは割り込みが発生する可能性があります。割り込みが発生すると、CPUは割り込みサービスルーチンにジャンプしてそれを実行した後、本来実行しようとしていた命令に戻ります。場合によっては、命令の実行中に割り込みが発生することもありますが、その場合でも影響はなく、割り込みからの復帰後に命令が再実行されます。
システムに電源が投入されるとすぐに最初の命令サイクルが開始され、システムアーキテクチャによって事前に定義された初期 PC 値が使用されます (たとえば、Intel IA-32 CPU では、事前定義された PC 値は ですが、 ARM アーキテクチャCPU0xfffffff0ではです)。通常、このアドレスは読み出し専用メモリ(ROM)内の命令セットを指し、オペレーティングシステムのロード (またはブート)プロセスが開始されます。[ 4 ]0x00000000
フェッチ段階は、どの命令でも同じです。
デコード処理により、プロセッサは実行すべき命令を決定し、CPU は命令を実行するためにフェッチする必要のあるオペランドの数を把握できます。メモリからフェッチされたオペコードは次のステップのためにデコードされ、適切なレジスタに移動されます。デコードは通常、CPU の CU 内のバイナリデコーダによって実行されます。 [ 6 ]
アーキテクチャがオペランドのアドレスを決定する方法を指定する方法はいくつかあり、通常はアドレッシングモードと呼ばれます。[ 7 ]
有効な住所を見つける一般的な方法には、次のようなものがあります。
CPUは、デコードされた命令(CUからデコードされたもの)を制御信号のセットとして対応するコンポーネントに送信します。命令の種類によっては、以下のいずれかの処理が行われる可能性があります。
命令サイクルの中で、エンドユーザーの視点から見て有用なのはこの段階だけです。それ以外の部分はすべて、実行ステップを実現するために必要なオーバーヘッドです。