ええっ⁈ CPU創ったの⁈ すっごーい! 第1章 第5節

~あんたCPUなんか創ってどうするのよ?! Vol.2~

2017/8/11
コミックマーケット C92 1日目 東7そ11b

第1章 第5節 他のCPUの加算機能はどうなっているのか

当たり前ですが、TD4以外の一般的なCPUはイミディエイトデータとの加算だけでなく、様々な加算を行うことが出来ます。以下の表をご覧ください。

表2 様々なCPUの加算命令
メーカー 型番 加算命令 説明
渡波郁 TD4 ADD アキュムレータ + イミディエイトデータ
インテル 4004 ADD アキュムレータ + レジスタ + キャリー
ADM アキュムレータ + RAM + キャリー
ザイログ Z80 ADD アキュムレータ + レジスタ
アキュムレータ + RAM
アキュムレータ + イミディエイトデータ
ADC アキュムレータ + レジスタ + キャリー
アキュムレータ + RAM + キャリー
アキュムレータ + イミディエイトデータ + キャリー
モステクノロジー 6502 ADC アキュムレータ + RAM + キャリー
アキュムレータ + イミディエイトデータ + キャリー
モトローラ 6809 ADD アキュムレータ + RAM
アキュムレータ + イミディエイトデータ
ADC アキュムレータ + RAM + キャリー
アキュムレータ + イミディエイトデータ + キャリー

 

イミディエイトデータ、つまりプログラム中で指定されている値との加算しか出来ないのはTD4だけです。むしろ逆に4004はイミディエイトデータのとの加算がありません。つまりイミディエイトデータとの加算は必ずしも必要な機能ではなく、命令としての重要度が低いことが分かります。

もし4004でイミディエイトデータとの加算を行う場合は以下のようにします。

  1. 加算対象となる値を任意のインデックス・レジスタ に格納する。もし加算対象となる値がアキュムレータに存在する場合はXCH命令を使って任意のインデックス・レジスタと交換する。
  2. LDM命令を使ってイミディエイトデータをアキュムレータに格納する
  3. 必要ならCLC命令を使ってキャリーをクリアする
  4. ADD命令を使ってレジスタ上の加算対象となる値をアキュムレータに加算する

以上のように少々面倒ですが、イミディエイトデータと加算する命令が無くても、他の命令を組み合わせることで目的を果たすことが出来ます。

表2を見るとキャリーについても同じことが言えますが、また別の機会にしましょう。