条件付き減算を行います。(Subtract on Condition Flag)
[指定形式]
- | sbf imm4, reg1, reg2, reg3 |
imm4に指定できるものを次に示します。
- | 4ビット幅までの値を持つ絶対値式(0xDは指定できません) |
[機能]
- | “sbf imm4, reg1, reg2, reg3”の形式 |
第1オペランドに指定した絶対値式の下位4ビットの値で示されるフラグ状態(「表 5.30 sbfcnd命令」を参照)と現在のフラグ状態を比較します。
値が一致した場合には,第3オペランドに指定したレジスタのワード・データから,第2オペランドに指定したレジスタのワード・データを減算し,さらに1を減算します。その結果を第4オペランドに指定したレジスタに格納します。
値が一致しなかった場合には,第3オペランドに指定したレジスタのワード・データから,第2オペランドに指定したレジスタのワード・データを減算します。その結果を第4オペランドに指定したレジスタに格納します。
- | “sbfcnd reg1, reg2, reg3”の形式 |
cnd部分の文字列で示されるフラグ状態と現在のフラグの状態を比較します。
値が一致した場合には,第2オペランドに指定したレジスタのワード・データから,第1オペランドに指定したレジスタのワード・データを減算し,さらに1を減算します。その結果を第3オペランドに指定したレジスタに格納します。
値が一致しなかった場合には,第2オペランドに指定したレジスタのワード・データから,第1オペランドに指定したレジスタのワード・データを減算します。その結果を第3オペランドに指定したレジスタに格納します。
[詳細説明]
- | sbf命令に対し,アセンブラでは,機械語命令のsbf命令が1つ生成されます。 |
- | sbfcnd命令に対し,アセンブラでは,対応するsbf命令が生成され(「表 5.30 sbfcnd命令」を参照),“sbf imm4, reg1, reg2, reg3”の形式に変換されます。 |
|
|
|
|
sbfgt
|
((S xor OV)or Z)= 0
|
Greater than(signed)
|
sbf 0xF
|
sbfge
|
(S xor OV)= 0
|
Greater than or equal(signed)
|
sbf 0xE
|
sbflt
|
(S xor OV)= 1
|
Less than(signed)
|
sbf 0x6
|
sbfle
|
((S xor OV)or Z)= 1
|
Less than or equal(signed)
|
sbf 0x7
|
sbfh
|
(CY or Z)= 0
|
Higher(Greater than)
|
sbf 0xB
|
sbfnl
|
CY = 0
|
Not lower(Greater than or equal)
|
sbf 0x9
|
sbfl
|
CY = 1
|
Lower(Less than)
|
sbf 0x1
|
sbfnh
|
(CY or Z)= 1
|
Not higher(Less than or equal)
|
sbf 0x3
|
sbfe
|
Z = 1
|
Equal
|
sbf 0x2
|
sbfne
|
Z = 0
|
Not equal
|
sbf 0xA
|
sbfv
|
OV = 1
|
Overflow
|
sbf 0x0
|
sbfnv
|
OV = 0
|
No overflow
|
sbf 0x8
|
sbfn
|
S = 1
|
Negative
|
sbf 0x4
|
sbfp
|
S = 0
|
Positive
|
sbf 0xC
|
sbfc
|
CY = 1
|
Carry
|
sbf 0x1
|
sbfnc
|
CY = 0
|
No carry
|
sbf 0x9
|
sbfz
|
Z = 1
|
Zero
|
sbf 0x2
|
sbfnz
|
Z = 0
|
Not zero
|
sbf 0xA
|
sbft
|
always 1
|
Always 1
|
sbf 0x5
|
[フラグ]
CY
|
MSB(Most Significant Bit)からのボローがあれば1,そうでない場合0
|
OV
|
オーバーフローが起こった場合1,そうでない場合0
|
S
|
演算結果が負の場合1,そうでない場合0
|
Z
|
演算結果が0の場合1,そうでない場合0
|
SAT
|
−
|
[注意事項]
- | sbf命令のimm4に4ビットの範囲を越える絶対値式を指定した場合,次のメッセージが出力され,指定された値の下位4ビットが用いられてアセンブルが続行されます。 |
W0550011 : イミーディエトの値が指定可能な値の範囲を越えています。
|
- | sbf命令のimm4に0xDを指定した場合,次のメッセージが出力され,アセンブルが中止されます。 |
E0550261 : 指定された条件コードが不正です。
|