FE EXAM

演算装置(ALU)

加算・減算・論理演算などの計算を実行するCPUの演算回路

INTERACTIVE VISUALIZATION
入力A
入力B
ALU
結果
入力 A + B
45 + 23
演算
加算 (ADD)
結果
6801000100
入力 A45
00101101
入力 B23
00010111
演算種別
プリセット
加算 (ADD)45 + 23 = 68
入力A = 4500101101入力B = 2300010111ALU演算装置+加算 (ADD)制御装置からの演算指令結果 = 6801000100フラグレジスタへ
ビット演算(8ビット)
A00101101
+ B00010111
=01000100
1286432168421
フラグレジスタ
ゼロ (Z)
0
結果が0
キャリー (C)
0
桁あふれ/借り
符号 (S)
0
MSB=1
解説

📌
ALUとは

入力A入力BALU結果2つの入力を演算して1つの結果を出す

ALU(Arithmetic Logic Unit=算術論理演算装置)とは、CPUの中で実際に計算を行う回路です。2つの入力値(AとB)と「どんな演算をするか」の指示を受け取り、足し算・引き算・論理演算などを実行して1つの結果を出力します。日本語では単に「演算装置」とも呼びます。

身近な例で考えると、ALUは電卓の計算部分です。電卓に「5」「+」「3」と入力すると「8」が出るように、ALUも2つの数と演算の種類を受け取って答えを返します。ただし電卓と違い、ALU自身は「次に何を計算するか」を決めません。それを決めて指示するのは制御装置です。ALUは指示された計算をただ実行する役割に徹します。

上のツールで入力AとBをスライダーで変え、演算種別ボタンを切り替えてみてください。▶のような自動再生はありませんが、値を動かすたびに結果・ビット計算・フラグが即座に更新されます。とくに「255 + 1」のプリセットでは桁あふれが起きる様子が観察できます。

📌
実行できる演算の種類

ALUが実行できる演算は、大きく算術演算論理演算の2種類に分けられます。これがALUの名前(Arithmetic = 算術、Logic = 論理)の由来です。

分類演算記号内容
算術加算 ADD+2つの値を足す
算術減算 SUB2つの値を引く
論理論理積 AND両方が1のビットだけ1
論理論理和 ORどちらかが1なら1
論理排他的論理和 XOR値が異なるビットだけ1

論理演算はビットごとに独立して計算される点がポイントです。たとえばANDなら、A・Bの同じ位置のビットを見比べ、両方1のときだけ結果のそのビットが1になります。上のツールの「0xF0 AND 0x0F」プリセットで、上位4ビットと下位4ビットの取り出し(マスク処理)の動きが確認できます。

なお、乗算(掛け算)や除算(割り算)はALUが直接持たないことも多く、その場合は加算とシフト演算の繰り返しで実現されます。ALUは「四則演算と論理演算を行う回路」と捉えておくとよいでしょう。

📌
フラグレジスタとの関係

ALUZゼロフラグCキャリーフラグS符号フラグ演算のたびにフラグが自動で更新される

ALUは計算結果を出すと同時に、その結果の性質を表す情報フラグレジスタ(フラグ=旗、状態を示す1ビットの集まり)に記録します。代表的なフラグは次の3つです。
ゼロフラグ (Z):結果が0のとき1になる
キャリーフラグ (C):加算で桁あふれ、減算で借りが出たとき1になる
符号フラグ (S):結果の最上位ビット(MSB)が1のとき1になる(負を表すことが多い)

これらのフラグは、後に続く条件分岐命令の判断材料になります。たとえば「2つの値を引き算してゼロフラグが立った(=結果が0)」なら、その2値は等しいと分かります。プログラムの if (a == b) は、内部では「a − b を計算してゼロフラグを見る」という形で実現されているのです。

上のツールでプリセット「5 − 5」を選ぶとゼロフラグが、「255 + 1」を選ぶとキャリーフラグが立ちます。入力Bを大きくして「A < B」となる減算をすると、借りが発生してキャリー(ボロー)フラグが立つ様子も観察できます。フラグはALUが演算結果に応じて自動で立て、分岐命令がそれを参照するという流れになっています。

📌
CPU5大装置の中でのALUの位置

CPU制御装置ALU(演算装置)レジスタ(PC・IR・ACCなど)高速な一時記憶+ 主記憶装置 + 入出力装置(CPU外)

コンピュータは5つの装置(5大装置)で動いています。
制御装置:命令を解読して指揮する司令塔
演算装置(ALU):実際に計算を行う
記憶装置(レジスタ+主記憶):データや命令を記憶する
入力装置・出力装置:外とのやり取りを担う

ALUはこの中で「唯一、計算をする装置」です。なぜALUだけが計算をするのでしょうか。それは役割を分担して専門化することで、全体の設計がシンプルになるからです。制御装置は命令の解読だけ、ALUは計算だけ、レジスタは記憶だけと役割を分けると、それぞれを独立して作れます。制御装置はALUに「計算の指令」を送るだけでよく、ALUは計算に特化した回路を積むことができます。

身近な例で言うと、工場のライン作業です。ラインごとに1つの仕事だけを担当することで、全員が得意な仕事に集中し、全体の生産効率が上がります。コンピュータの5大装置も同じ発想で設計されており、ALUは「計算する」という1つの仕事だけに集中できる仕組みです。

📌
なぜALUは専用の回路(ハードウェア)で作るのか

ソフトウェア命令を1つずつ読みながら計算→ 時間がかかるALU(回路)電気信号で直接計算を行う→ 超高速vs同じ計算でも速さが桁違い

ALUは専用のハードウェア回路(電子回路)として作られています。プログラムとして書いたソフトウェアではなく、最初から「計算する」という目的だけのために設計された物理的な回路です。

なぜハードウェアにするのか。それは速さが決定的に違うからです。ソフトウェアで計算しようとすると、命令を1つずつ読み込んでから処理を行うため、手順が増えます。一方、ALUの回路は電気信号が流れるだけで即座に計算結果が出ます。命令を読む手間がないため、ソフトウェアとは比べ物にならない速度で動きます。

わかりやすいアナロジーで考えると、「自動ドア(ハードウェア)vs 手でドアを押す(ソフトウェア)」の違いです。どちらもドアは開きますが、センサーが反応して機械が自動で動く自動ドアのほうが圧倒的に速い。ALUも同じで、計算専用の回路がそのままデータに働きかけるため、プログラムを逐一解釈する方式より格段に速く計算できます。コンピュータが1秒間に何億回もの計算をこなせるのは、ALUがハードウェア回路だからです。

関連コンテンツ