ええっ⁈ CPU創ったの⁈ すっごーい! 第1章 第5節
~あんたCPUなんか創ってどうするのよ?! Vol.2~
2017/8/11
コミックマーケット C92 1日目 東7そ11b
第1章 第5節 他のCPUの加算機能はどうなっているのか
当たり前ですが、TD4以外の一般的なCPUはイミディエイトデータとの加算だけでなく、様々な加算を行うことが出来ます。以下の表をご覧ください。
メーカー | 型番 | 加算命令 | 説明 |
---|---|---|---|
渡波郁 | TD4 | ADD | アキュムレータ + イミディエイトデータ |
インテル | 4004 | ADD | アキュムレータ + レジスタ + キャリー |
ADM | アキュムレータ + RAM + キャリー | ||
ザイログ | Z80 | ADD | アキュムレータ + レジスタ アキュムレータ + RAM アキュムレータ + イミディエイトデータ |
ADC | アキュムレータ + レジスタ + キャリー アキュムレータ + RAM + キャリー アキュムレータ + イミディエイトデータ + キャリー |
||
モステクノロジー | 6502 | ADC | アキュムレータ + RAM + キャリー アキュムレータ + イミディエイトデータ + キャリー |
モトローラ | 6809 | ADD | アキュムレータ + RAM アキュムレータ + イミディエイトデータ |
ADC | アキュムレータ + RAM + キャリー アキュムレータ + イミディエイトデータ + キャリー |
イミディエイトデータ、つまりプログラム中で指定されている値との加算しか出来ないのはTD4だけです。むしろ逆に4004はイミディエイトデータのとの加算がありません。つまりイミディエイトデータとの加算は必ずしも必要な機能ではなく、命令としての重要度が低いことが分かります。
もし4004でイミディエイトデータとの加算を行う場合は以下のようにします。
- 加算対象となる値を任意のインデックス・レジスタ に格納する。もし加算対象となる値がアキュムレータに存在する場合はXCH命令を使って任意のインデックス・レジスタと交換する。
- LDM命令を使ってイミディエイトデータをアキュムレータに格納する
- 必要ならCLC命令を使ってキャリーをクリアする
- ADD命令を使ってレジスタ上の加算対象となる値をアキュムレータに加算する
以上のように少々面倒ですが、イミディエイトデータと加算する命令が無くても、他の命令を組み合わせることで目的を果たすことが出来ます。
表2を見るとキャリーについても同じことが言えますが、また別の機会にしましょう。