PUSH

命令形式

          // プッシュ
PUSH PC;
PUSH STS;
PUSH LOOP;

PUSH PC;
PUSH STS;

PUSH PC, PUSH STS;
PUSH LOOP, PUSH STS;

説明

PUSH命令は内蔵スタックに対してレジスタを退避します。退避の方法は退避するレジスタごとに異なります。この命令は取り扱いが微妙であるため、独自に割り込みハンドラやOSを書くとき以外には利用しないほうがいいかもしれません。

PC
PUSH PC命令はSTACKP:STACKAレジスタ・ペアをPCスタックにプッシュします。この二つのレジスタはPUSH/POPレジスタ専用のスクラッチ・レジスタです。ADSP-2191のシーケンサーは割り込みが発生したりやコール命令を実行すると自動的にPCの値をPCスタックにプッシュしますが、PUSH PC命令がプッシュするのはPCではないことに気をつけてください。
STS
PUSH STS命令はASTAT、MSTATレジスタをステータス・スタックにプッシュします。
LOOP
PUSH LOOP命令はSTACP:STACKAレジスタ・ペアをループ先頭アドレス・スタックに、LPSTACKP:LPSTACKAレジスタ・ペアをループ・ボトム・アドレス・スタックに、CNTRをループ・カウンタ・スタックにプッシュします。この動作はシーケンサーがDOループ命令を実行した場合とは異なることに注意してください。

二つのループ命令をコンマで区切って並べることにより、1サイクルで二つのプッシュ命令を実行できます。ただし、PUSH PCとPUSH LOOPは同時実行できません。また、PUSH命令とPOP命令をコンマで区切って同時実行できますが、その必要があるかどうかは疑問を感じます。

PUSH命令はシーケンサーの動作に直接影響を与えます。そのため、パイプラインの動作が微妙な場所では使用が禁止されています。

厳密に言えば、ループ・ボトムから6命令以上はなれていればPUSH命令を使用してもかまいません。しかし、実際には使えないと考えたほうが安全でしょう。

2191空挺団 | プログラム | EZ-KIT | こぼれ話 | アーキテクチャー | 命令 | レジスタ | DSP掲示板 | FAQ |