【ハウツー】
CPUの引き算命令では、ボローフラグが使用されており、大概、キャリーフラグで代用されます。6800では、「ボロー有り」の時にキャリーフラグが1になります。ところが、6502の場合には、「ボロー有り」の時にキャリーフラグが0になります。この違いは、どこから来たのでしょうか。
小学校の算数で筆算により引き算を行う時、被減数(引かれる数:minuend)が減数(引く数:subtrahend)よりも大きいときには、上の桁から10借りてきます。CPUでも同じように上の桁に借りを作ることがあり、「ボロー」(借り:borrow)と呼んでいます。
ボローは、上の桁に「借りた・借りていない」という二者択一の1ビットの情報で表現することができます。そこで、多くの場合、足し算において「上の桁への繰り上がり」を表現するためのキャリーフラグで代用されます。
Motoloraの6800やIntelの8080の場合、「借りた」場合には、キャリーが1に設定されます。一方、MOS Technologyの6502の場合、「借りた」場合には、キャリーが0に設定されます。この違いは、なぜ、現れるのでしょうか。その理由は、ALU(算術論理演算ユニット:Arithmetic Logic Unit)の設計に関わってきます。
一般的なCPUの場合、足し算を行う命令と引き算を行う命令が装備されています。そこで、ここでは、足し算と引き算だけを行う簡単なALUの設計を例に取り上げて、具体的に理由を探っていきます。ここで設計するALUは、2つの8ビット入力(x[7:0]、 y[7:0])の和と差を計算する装置です。
和と差の結果は、8ビットの出力(s[7:0])となります。他にキャリー入出力(Cin、 Cout)とボロー入出力(Bin、 Bout)を追加して、もっとビット数の大きな計算にも対応します。また、「和を計算するか、差を計算するか」という計算内容を指示するための入力(f)もあります。
入力"f"に従って、計算内容を切り替えるように作ればよいのだから、以下のような実装にすると解決できそうです。
2つの入力を持つ足し算回路と引き算回路を用意し、入力"f"によって出力を切り替えます。確かに簡単です。論理合成も通ることでしょう。ところが、この回路の場合、足し算回路と引き算回路が同時に使われることがありません。そのため、実装した回路のうち、半分しか使用されないという、実にもったいない構成になってしまいます。
なぜ、この構成ではもったいないのか。それは、引き算回路の実現方法に原因があります。
| 理研、脳・脊髄形成に必要な神経板湾曲の仕組みを解明 [20:16 5/25] |
| 京大、「慢性閉塞性肺疾患」患者の労作時呼吸困難は鍼治療が有効と実証 [20:08 5/25] |
| 120Hz SHVカメラ用イメージセンサーを使った撮像装置 - SHVフルスペック化へ [18:10 5/25] |
| 京大、視覚による物体認知は前頭前野からのトップダウン信号が重要と確認 [17:45 5/25] |
| 製品数の拡大だけでなくBCPの展開なども含めた総合力で事業の強化を図るTI [17:25 5/25] |
|
【レポート】【2010年非オタ編】成功したと思う歴代深夜アニメランキング [13:00 5/27] ホビー |
|
[東京スカイツリータウン]1/2000の模型が登場 スカイツリーやオフィス、駅など精巧に再現 [12:00 5/27] ホビー |
|
【連載】これだけは要チェック! TOEIC(R)単語帳 第106回 今回のお題は…「afterward」 [12:00 5/27] キャリア |
|
【レポート】駆け出しイラストレーターのでこ、自分のDTPスキル不足を憂うの巻 [12:00 5/27] クリエイティブ |
|
AKB48指原莉乃がアシカとコラボ!「センターになりたいです…とか言えたら」 [11:30 5/27] エンタメ |
4つの診断で、自分の適性を見つめなおそう!
働くこと・挑戦し続けることへの思いを綴ったインタビュー
あなたにピッタリのアドバイスを読むことができます。
転職に必要な情報が収集できます
企業からアプローチのメッセージが届きます。