前述のように,本書では,加減算器やシフタや一時メモリーは持っているが, 乗除算器は持たないコンピュータしか扱わないことにする。 かつて,機械式の計算機があったが,それは加算と減算しかできなかったが, それと同じ機能を持っていると考えてよい。 なお,乗除算は桁をずらしながら加減算を行うことで達成できる7.4。
データ処理部(data processing unit)はいろいろなデータの処理を行うが, 処理内容によって異なる回路に機能分化しているため, こうしたデータを,機能回路から別の機能回路に動かす方法が必要である。 それには図 7.3に示すように, バス(bus)と呼ばれるデータ幅のビット数だけ平行に引かれた線を利用する。 どの機能回路もバスとの間にスイッチで繋がっており, ある機能回路がスイッチを接続してバスにデータを載せ, そのデータを必要とする別の機能部分が,バスにスイッチ接続してデータをもらう。 こうして,データをやりとりしたい二つの機能回路が共通のバスを利用するのである。
機能部分の中で中核となるのは,数値計算を行う 算術論理回路(arithmetic logic unit)あるいはALUである 7.5。 これは加減算のような数値計算をするもので,多くの場合,2入力を受けて, 1出力を直ちに出す。 このためよくY字の形で記載される。
加減算だけでなく,数値の大小比較をしたり, ビットごとのANDやORなどの論理演算をしたりする。 また正数からその補数を作り出すような計算もする。 この場合には,1入力1出力となるが, こうした場合には,片方の入力を利用しないだけである。 当然,計算結果は若干の遅延はあるものの直ちに出力されるので, 論理回路の一種である。 また,いろいろな計算に対処できるように,複数の論理回路を含むことになるが, できたら可変的な論理回路として設計しておく方がよいであろう。
ALUは制御部に対し,計算の際のオーバフローなどの異常や 数値比較などの大小結果などを知らせるための フラグと呼ばれる特別な出力を持つ。 またフラグの内容は制御部の指示に基づいて, フラグレジスタ(flag register)と呼ばれる一時メモリーに記憶しておくことができ, その内容は制御部に利用される。
乗除算や論理演算などで必要なビットシフトを行うために, シフタ(shifter)がALUの手前に置かれる。 これは,バスのデータを取り込んで, 所定のビット数だけずらしたデータを出力する。
計算途中の値を保持する一時メモリーであるレジスタ(register)も, いくつか必要である。 このレジスタだけが,任意のクロック数だけ遅延を与えることのできる, いわばデータ処理部で唯一のシークエンス回路である。
図中リテラル(literal)とあるのは, 制御部とデータ処理部の間の情報の授受のためのパスであり, Aバスそのものの分岐である。 主として,命令にアドレスが入っているとき, その処理をデータ処理部に依頼するための授受を行う。
制御線については次節で説明する。