DIS
命令形式
// 機能を有効化する
DIS <mode>
例
DIS SEC_REG;
DIS INT;
DIS SEC_REG, DIS SEC_DAG; // 複数のDIS命令を連結できる
説明
モード制御命令です。実行すると動作モードが変わります。以下のオペランドを採ることができます。
- SEC_REG : Secondary Register (MSTAT[0])
- 演算レジスタ群が表レジスタに変わります。
- BIT_REV : Bit Reversal (MSTAT[1])
- DAG1レジスタの出力がビット正順になります。
- AV_LATCH : ALU overflow staus latch mode. (MSTAT[2])
- ASTATのAVビットが通常モードで動きます。ラッチモードの場合、1命令ごとの結果がAVビットに反映されます
- AR_SAT : AR register saturation mode (MSTAT[3])
- ARレジスタを飽和モードではなくラップアラウンドで動かします。
- M_MODE : Multiplier Mode (MSTAT[4])
- 乗算器が固定小数点モードで動きます
- TIMER : TImer Mode (MSTAT[5])
- タイマーを動作させます。なお、このオペランドはADSP-2191では無視されますので使わないでください。
- SEC_DAG : Secondary DAG (MSTAT[6])
- DAGレジスタ群が表レジスタに変わります。
- INT : Interrupt
- 219xコアが割り込み不能になります。ICNTLレジスタのGIEビットを0にする命令です。
INTを除くモードは、MSTATのビットと一対一対応になっています。そのため、割り込みハンドラ内でこれらのモードを設定してもRTIを実行すると設定が元に戻ってしまいます。
MSTATはロード・レイテンシが長いため、普通に値をロードすると実際にモードが変わるのは数サイクル後になります。反面、DIS命令を使えば次のサイクルでモードが切り替わっています。可能な限りM_STATをいじらずDIS命令を使ってください。詳細はHRM
A-6を参照してください。
詳細はISRの8-69ページと、HRMのA-10ページを参照してください。
文法要素
<mode> ::= SEC_REG, BIT_REV, AV_LATCH, AR_SAT, M_MODE, TIMER, SEC_DAG, INT