第二部 トロン仕様チップ命令詳細第十二章 キュー操作命令
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>>以外のとき)

【使用例】



 汎用レジスタR5の内容をオフセットとするデータ(ワード長)がR3の内容と等しいキューエントリをサーチします。