H8/3048・ブランチ命令一覧表と演算によるフラグの変化

icon 項目のみ表示/展開表示の切り替え
フラグに影響与える命令
演算命令 mov命令でも変化する。
C V Z N
符号無しの桁あふれ 符号付の桁あふれ    

cmp B,A
btst #?,A

  H8/3048
オーバフローがある BVS V==1
オーバフローがない BVC V==0
符号なし dtc<src BLO C==1
キャリーがある
符号なし !(dtc>=src)
BCS C==1
符号なし dtc>=src
符号なし !(dtc<src)
BHS C==0
キャリーがない Bcc C==0
等しい
ゼロ
BEQ Z==1
等しくない
ゼロでない
BNE Z==0
符号なし dtc<=src
符号なし !(dtc>src)
BLS (C || V)==1
符号なし dtc>src
符号なし !(dtc<=src)
BHI (C || V)==0
符号がある(MSB=1) BMI N==1
符号がない(MSB=0) BPL N==0
符号あり !(dtc>=src)
符号あり dtc<src
BLT (N xor V)==1
符号あり dtc>=src
符号あり !(dtc<src)
BGE (N xor V)==0
符号あり dtc<=src
符号あり !(dtc>src)
BLE {Z=1 || (N xor V)}==1
符号あり dtc>src
符号あり !(dtc<=src)
BGT {Z=1 || (N xor V)}==0

フラグ変化例

BTST命令とブランチ命令を組み合わせる場合
テストされたビットが1の時ブランチさせるにはBNE命令、0の場合はBEQを用いる。
符号付の加減算で結果が収まらなかったときの結果が正負のどちらかを判断する方法
加算命令の場合V=1で結果が収まらなかった場合でC=1なら結果は負であり、C=0なら結果は正である。
減算命令の場合V=1で結果が収まらなかった場合でC=1なら結果は正である。C=0なら結果は負である。(Nはオーバーフローが生じた場合は正負が反対になっている。あくまでMSBを見ているだけ)
Cは桁借りが生じた場合にセットされる。(符号無しで見た場合にディスティネーションの方が小さい場合)
sub.b命令
計算 電卓での答え ディストネーション ソース CPUの答え フラグの変化
127-(-128) 255 01111111 10000000 = 11111111 255 NVC=1
64-(-64) 128 01000000 11000000 = 10000000 -128 NVC=1
64-(-63) 127 01000000 11000001 = 01111111 127 N=0 V=0 C=1
-128-(127) -255 10000000 01111111 = 00000001 1 N=0 V=1 C=0
-64-(65) -129 11000000 01000001 = 01111111 127 N=0 V=1 C=0

値が0かどうかのチェックはmov命令のあとでも可能である。  Z(BEQ BNE)
MSB値が0かどうかのチェックはmov命令のあとでも可能である。 N(BPL BMI)