コンディションコードレジスタ
コンディションコードレジスタ
ステータスレジスタの下半分(ユーザバイト)はコンディションコードレジス タ(CCR)になっている.
- 5つのフラグ
- X エクステンド (Extend)
- N ネガティブ (Negative)
- Z ゼロ (Zeron)
- V オーバーフロー (Overflow)
- C キャリー (Carry)
順に X,N,Z,V,C という名前がつけれられてい る. それぞれエクステンド,ネガティブ,ゼロ,オーバーフロー,キャリーの意味 である.
CCRの使用目的の第1は,条件判定/条件ジャンプ である. これを行う命令は,Bcc, DBcc などである. (実際にはccのところにNE,LTなどの判定条件がかかれる)
CCRのもう1つの重要な用途は,多倍長演算や多倍長シフトのときの桁上げである. 68000では,桁上げにはXビットを用いる.
Nフラグ
- データを「2の補数である」とみなして,演算結果が負のとき,N=1,
さもなければN=0
つまり,(最上位ビット=1)のときN=1,さもなければN=0
Zフラグ
- 演算結果が0(ゼロ)のとき,Z=1.さもなければZ=0
Vフラグ
- オーバーフローとは:
データを「2の補数である」とみなして, 符合ビットが「正しい値を示していない(破壊)」とき,「オーバーフロー」であるという.
- Vフラグの変化条件
- 算術演算において,「オーバーフロー」が発生したらV=1,さもなけ ればV=0.
- move 命令のあとは,必ず V=0.
- 但し move to CCR では,Vフラグは変化し得る
Cフラグ
- キャリー,ボロー
オペランドが「正または0の数」であるとみなして, 「桁上げ(キャリー)」,「桁下げ(ボロー)」が発生した場合
- 加算命令におけるキャリー
(1) (最上位ビット=1)の数と(最上位ビット=1)の数の加算を行った場合
(2) (最上位ビット=1)の数と何かの数の加算を行い,(最上位ビット=0)に なった場合
(3) 何かの数と(最上位ビット=1)の数の加算を行い,(最上位ビット=0)に なった場合
- 減算命令におけるボロー
(1) (最上位ビット=0)の数と(最上位ビット=1)の数の減算を行った場合
(2) (最上位ビット=0)の数と何かの数の減算を行い,(最上位ビット=1)に なった場合
(3) 何かの数と(最上位ビット=1)の数の減算を行い,(最上位ビット=1)に なった場合
- キャリー,ボローは,2の補数とは関係ない
- 加算命令におけるキャリー
- Cフラグの変化条件
- 減算命令の結果,「キャリー」あるいは「ボロー」が発生したらC=1, さもなければC=0.
- move 命令のあとは,必ず C=0.
- 但し move to CCR では,Cフラグは変化し得る
Xフラグ
- 多倍長演算のためのフラグ
- 機能的には,Cフラグと同じ
- Xフラグが変化するときには,常にX=C
- Cフラグが変化するからといって,常に,X=Cになるとは限らない.
例えば,move 命令の後(move to CCR システムを除き)C=0になるが,Xは変化しな い