竹下世界塔の計算機よもやま話

アクセスカウンタ

zoom RSS ボロー(桁借り)の扱い

<<   作成日時 : 2014/04/12 00:20   >>

ブログ気持玉 0 / トラックバック 0 / コメント 0

 キャリーフラグについて調査の続き。

 コンディションコードフラグ(ステータスレジスタ)を持つアーキテクチャにおいて、符号なしの加算で桁あふれが発生した時にはキャリーフラグが1にセットされる。減算の時にA-BでA<Bだった場合には桁借り(ボロー)が発生するが、この状態はキャリーフラグが兼用して保持する。
 ほとんどのアーキテクチャではボローが発生した時にはキャリーフラグが1、発生しなかった時には0になるが、それが逆になるアーキテクチャもある。

ステータスレジスタ(Wikipedia)

 では、POWER,ARM,PIC,6502について確認してみた。

□POWER ISA V2.06B V2 のp.93 Subtract from Extended の動作を見ると

RT ← ¬(RA) + (RB) + CA

 とある。これはRT= RB - RAを意味している。-RAは2の補数、つまりRAの反転+1なのでCA=1の時に通常の減算となる。CA=0の時は+1がない、つまりRT = RB-RA-1と同じになるのでこれはボロー(桁借り)である。

□ARM ARM アーキテクチャ リファレンスマニュアル A2.5.2 条件コードフラグに明記してあった。

C 以下の 4 つのいずれかの方法でセットされます。
• 比較命令の CMN を含め、加算の場合に、加算によってキャリーが生じた場合(符
号なしのオーバフロー)C が 1 にセットされ、それ以外は 0 にセットされます。
• 比較命令の CMP を含め、減算の場合に、減算によって桁下がりが生じた場合(符
号なしのアンダーフロー)C が 0 にセットされ、それ以外は 1 にセットされます。
• シフト演算を含む加算 / 減算の場合、シフタによって値の外にシフトされた最後
のビットが C にセットされます。
• 他の加算 / 減算以外の命令では通常、C は変更されません(特殊なケースについ
ては各命令の説明に記載されています)。

□PIC おもしろいPICマイコン―PIC12F675を使いこなす で確認した。

SUBLW/SUBWF命令においてCフラグは借り入れがなければ1、借り入れがあれば0にセットされる。

□6502 6502についてはALUにおけるボローフラグを考える(マイナビ) が詳しい。

あと、COSMACとSC/MPも同様だった。
SC/MP(IC Collection)
COSMAC(IC Collection)

 ボロー発生時にフラグを0にする流儀は演算器への入力をそのまま見せるやり方であり、ボロー発生時に1とプログラマに見せるにはステータスフラグのみインバータ1個だけあればいいと思うのだがどうだろうか。LSIの内部的には、バッファで分配したりなど信号と反転した信号は同居しているので。

テーマ

注目テーマ 一覧


月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ

トラックバック(0件)

タイトル (本文) ブログ名/日時

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文




ボロー(桁借り)の扱い 竹下世界塔の計算機よもやま話/BIGLOBEウェブリブログ
文字サイズ:       閉じる