| QSCH キュー操作命令 <<L2>> |
【ニモニックとオペランド】
QSCH
【機能】
Search for an entry in a queue
キューの中のエントリのサーチ
【オプション】
/NM R6マスクなし /MR R6マスクあり /F キューの順方向にサーチ /B キューの逆方向にサーチ /ee 割出し条件(下表のニモニック参照)
【命令フォーマットと表記法】
割出し条件が満たされない場合には、 サーチが続行されます。
レジスタ上のパラメータ
R0 : サーチを開始するキューエントリのアドレス。リターンパラメータ としては、サーチ成功時に割出し条件が成立したエントリを指定。 サーチをキューの先頭から開始する場合には、キューヘッダのア ドレスをR0に入れる必要があります。 R1 : リターンパラメータとして使用。サーチが完了したときに直前の キューエントリのアドレスを保持。 R2 : サーチを終了するキューエントリのアドレス。 R3 : 比較値 R5 : キューエントリ内のサーチデータのオフセット(エントリの先頭 から) R6 : マスク値(m = 1のとき)
初期化する必要のある汎用レジスタはR0、R2、R3、R5です。実行結果はR0とR1に格納されます。上記のレジスタに格納されている値に基づいてサーチを続行することができます。
【解説】
この命令はレジスタにストアされたパラメータに基づいてキューエントリをサーチし、指定条件を満たすエントリを見つけます。サーチ条件としては、マスク(特定ビットの抽出)と割出し条件による比較が用意されています。
QSCH命令の実行手順を以下に詳述します。QSCH実行前と実行後の
キューの状態を示します。
手順
サーチするエントリを指定します。(1) サーチはR0とR1を連続更新しながら行います。
(2) R0の内容をR1にセットします。
(3) 順方向サーチの場合、R1で指定されたエントリの前方リンクがR0にセットされます。つまりR1が指定するエントリの直後のエントリをR0が指定します。サーチされるのはR0が指定するこのエントリです。
逆方向サーチの場合には、R1で指定されたエントリの後方リンクがR0にセットされます。
R0とR2にストアされたアドレスを比較します。
現サーチアドレスR0とサーチ終了アドレスR2を比較します。一致すれば、命令が終了して、V_flagが1にセットされます。一致しなければ、サーチが続行されます。
対象データを比較値と比較します。
R0が指定するエントリの先頭からオフセット(R5)のところにある対象データをR3にストアされた比較値と比較します。この比較が指定された割出し条件を満たせば、命令が終了し、F_flagがセットされます。
割込みの有無をチェックします。
割込みがあれば、サーチを一時的に中断して、割込みを処理します。なければ、上の(1)に戻ってサーチが続行されます。
R1は、シングルリンクキューのとき、エントリを削除するために使用されます(QDEL命令の解説参照)。
一般に、R0、R2にキューヘッダのアドレスをセットしてQDEL命令を実行することにより、キューが空の場合を含めてキュー全体のサーチを行うことができます。
以下の例のように、R2がサーチする最初のエントリを指定している場合でもR0とR1はサーチの成功、失敗に関係なく更新されるので、注意が必要です。
【フラグ変化】
【発生EIT】
RIE sx = 11 RIE eeee ≧ 0111 RIE m = 1またはb = 1(仕様レベル<<L2>>以外のとき)
【使用例】