| BSCH ビット操作命令 <<L1R>>,<<L1>>,<<L2>> |
【ニモニックとオペランド】
BSCH data, offset
【機能】
Search for a bit
ビットのサーチ
【オプション】
/0 "0"をサーチ(デフォルト) /1 "1"をサーチ /F ビット番号の増加方向にサーチ(デフォルト) /B ビット番号の減少方向にサーチ <<L2>>
【命令フォーマットと表記法】
【解説】
この命令はdataオペランド内の初めて現れる"0"または"1"をサーチします。offsetオペランドの初期値がサーチ開始ビットを指定します。実行後、結果(最初の整合ビットのビット番号)がread-modify-writeオペランドとしてのoffsetオペランドに設定されます。
サーチは指定データタイプのサイズ内でのみ行われ、ワード(またはバイト、ハーフワード)境界を越えることはできません。offsetオペランドのサイズは制限されていませんが、offsetの指定に使用するoffsetオペランドのビット数(下位ビット)はバイトでは3、ハーフワードでは4、ワードでは5です。BSCHではオペランドの上位ビットは無視されます。上位ビットがすべて"0"でなくても、これはエラーではなく、EITは発生しません。
デフォルトのサーチ方向は/FオプションによりLSB方向(つまりビット番号増加方向)です。仕様レベル<<L2>>では、/Bオプションによりビット番号減少方向のサーチが可能で、サーチデータサイズとしてバイト(sx = 00)またはハーフワード(sx = 01)を指定できます。
/Fオプションでは、指定ビットが見つからない場合、offsetオペランドが最後にサーチしたビット(ワード境界)の次のビットの番号に設定され、V_flagが"1"にセットされます。サーチが失敗してもEITは発生しません。したがって、offsetはサーチしたビット数だけ増加します。
/Bオプションでは、指定ビットが見つからない場合、offsetオペランドが"-1"に設定されます。この場合も、V_flagが"1"にセットされ、EITは発生しません。
【フラグ変化】
【発生EIT】
RIE data [Gen/ru], offset [Gen/m]のアドレッシングモード違反 RIE sx = 11, sy = 11 RIE sx = 00, sx = 01 仕様レベル<<L2>>以外のとき RIE b = 1(/B) 仕様レベル<<L2>>以外のとき
【注意事項】
【使用例】
16ビットの数値H'1104を32ビットに符号拡張して(H'00001104)、メモリから1ワードを読み出す実効アドレスとして使用します。メモリから読み出された32ビットデータ(H'7e07ffff)の範囲内で、ビット番号増加方向に、offsetオペランド(汎用レジスタR0;H'00000002)の下位3ビット(H'2)で指定されたビット(ビット2)から、"0"をサーチします。ビット0が"0"ですが、サーチはビット2から開始されるので、サーチはビット7の"0"で成功します。次に、offsetオペランドが7(H'00000007)に設定され、V_flagが"0"にセットされます。命令の前後での値の変化は次の通りです。
汎用レジスタR1の下位8ビット(H'40)で、offsetオペランド(R0; H'X3)の下位3ビットで指定されたビット(ビット3)から、ビット番号増加方向に、"1"をサーチします。ビット1のみが"1"で、サーチはビット3から開始されますから、サーチは失敗します。offsetオペランドが8(H'08;バイト境界を越えた最初のビット番号)に設定され、V_flagが"1"にセットされます。命令の前後での値の変化は以下の通りです。
![]()