マイクロプログラム方式
水平型の制御ワードには、相応の幅のビット列があって、CPU内の各部を制御する。56ビット以上ということも珍しくない。例えば簡単なフィールドの配置例は以下の通りである。
このタイプのマイクロマシンでジャンプ先アドレスを即値としてジャンプ命令オペコードの次に与えるジャンプ命令を実装する場合、マイクロアセンブリ言語は以下のようになる。
CPU制御のあらゆる部分を各クロックサイクル毎に記述してシーケンサを動作させるものである。
水平型のマイクロコードでは、必要ならプロセッサの各部を同時に働かせる指示ができる利点があるが、半面、多数の操作を同時にできない場合にはNOPとなるフィールドが多くならざるをえないことに注意。
逆にマイクロプログラム方式にも利点はある。
マイクロプログラム方式で複雑な命令を実装したとしても、コントロールストアが大きくなるだけで他のハードウェア資源は節約できることもある。例えば、1つのALUで実効アドレスの計算と通常の演算命令の計算を兼ねることが多い(Z80、8086など)。
非RISC命令セットでは、(平均すると)1命令でより多くのことを実行できるため、同じプログラムを書いたとき命令数が少なくて済み、メモリ使用量が低減されキャッシュの効果も大きくなる。
x86系の設計では、命令をデコードした結果(マイクロ命令列)を動的なバッファに出力し、それに対して動的な並べ替え(アウトオブオーダー実行)を行う。静的なマイクロプログラム方式は自動反復命令やFPUの超越関数などの複雑な命令で使用している。
現代的なCISCアーキテクチャでは、単純な命令は直接ハードウェアで実行する設計になっていることもある。
多くのRISCおよびVLIWプロセッサは全ての命令を(その命令がキャッシュ上にある限り)1サイクルで実行する。これはマイクロコードを持つCPUがマイクロ命令を1サイクルにひとつ実行するのとよく似ている。VLIWは水平型マイクロコードのような非常に長い命令を使う。一方RISCはもっと小さい垂直型マイクロコードのような命令を使用する。
マイクロプログラム方式はネットワークプロセッサなどの特定用途向けのプロセッサで今もよく使われている。
コントロールストアをRAMで構成すると、動的にプログラマブル可能にできるが起動時に読み込みが必要である。ROMにすれば読み込みは必要ないが、動的にプログラム可能という利点がなくなる。
マイクロプログラム方式は、主にCISCのCPUで採用されている。
マイクロプログラム方式に対し、論理ゲートとフリップフロップを配線でつなぎあわせて直接実装する方式はワイヤードロジック(布線論理)と呼ばれる。RISCは原則としてはワイヤードロジックで構築される。
「マイクロ」という用語は英語の小さいという一般的な意味として使われている。このため、マイクロプロセッサやマイクロコンピュータやマイクロコントローラやその他「マイクロ」と付く物とは関連性は無い。
IBMなどのベンダーではマイクロコードという語を「ファームウェア」の同義として使うことがあり、周辺機器に格納されるマイクロプログラムも機械語プログラムもまとめてマイクロコードと呼ぶことがある。