山本ワールド
H8/3048・ブランチ命令一覧表と演算によるフラグの変化
| フラグに影響与える命令 | ||||
| 演算命令 | 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)