MC68000
MC68000は16ビットのALUを持つ一方で、アドレスは常に32ビットで扱われ、フラットな32ビットアドレス空間を持つ。その実効アドレスの演算の為に、専用の16ビット幅のALUを2個持つ。
8086は20ビットのアドレス空間を持つが、リニアにアクセスできるのはセグメントと称された(セグメント方式#x86)16ビットの空間だけであった。これは特にグラフィックの扱いなどを面倒にした。
MC68000では実効アドレス演算の為に専用の2つの16ビットのALUを接続して用い、3つめのALUが16ビットの演算を行った。
例えば、32ビットのアドレスレジスタのポストインクリメント(そのアドレスにアクセスした後、アドレスレジスタの内容をインクリメント(増加)するアドレッシングモード)「ADD.W (An)+,Dn」はポストインクリメントをしない場合に較べても速度低下することがない。
したがって、16ビットCPUとして始まってはいるが、68000の命令セットは32ビットアーキテクチャになっている。
68000は8つの割り込みレベルを持つ。レベル0から7まで厳密に優先順位が決まっている。 番号が大きい割り込みが番号の小さい割り込みに対して割り込むことが出来る。ステータスレジスタには現在の割り込みレベルを特権命令でセットすることができ、これにより低いレベルの割り込みをブロックする。レベル7はマスクすることができないため、NMI(英: Non-Maskable Interrupt)とも言う。レベル0は他の全てのレベルが割り込むことができる。レベル0は割り込み要求がないことを示す。レベルはステータスレジスタに格納され、ユーザレベルプログラムからも見ることが出来る。
ハードウェア割り込みは3本の信号線によってCPUに伝えられ、この3本の値がペンディング中の最も高い割り込みレベルにエンコードされる。別途割り込みをエンコードするための割り込みコントローラが必要である。ただし、割り込み発生源が三つ以下のシステムでは、各割り込みを三本の信号線にそれぞれつなぐことで割り込みコントローラを省略できる。ただし、割り込みレベルと割り込みの対応が単純ではないためソフトウェアでの処理が複雑になる。
68000の設計者はアセンブリ言語が直交性を持つよう注意を払った。つまり、命令は操作とアドレッシングモードに分けられ、多くの場合は任意の操作に任意のアドレッシングモードを使えるようになっている。
ビットレベルで見ると、命令のオペコードの値は必ずしも現状の通りである必然性はない。このことは、ある意味でよい妥協点だった。真の直交性のあるマシンと同等の利便性を得ると同時にCPU設計者はオペコード表を自由に埋めることができた。
最小命令サイズは当時としては大きい16ビットである。さらに多くの命令やアドレッシングモードは追加のワードでアドレスやアドレスモードビット等を表現する。
多くの設計者はMC68000アーキテクチャはコストに見合うコンパクトなコードを実現していると信じている(特にコンパイラがコードを生成した場合)。多くの組み込み制御システムの設計者はメモリのコストに敏感であり、コードがコンパクトであるという信念がMC68000ならびに後継CPUを採用する動機に繋がり、アーキテクチャの寿命を延ばした。そして同様にコンパクトなARMアーキテクチャのThumb命令セットが登場するまで、多くの68000命令セット(のCPU)の採用をもたらし続けた。