転送とレジスタ

転送命令というのは簡単な命令に見えますが、実際にはそうではありません。特にDSPの場合信号処理という錦の御旗が立つと何でもありになってしまいます。以下では気をつけるべき点を上げます。

まず、一部のレジスタは16ビットに足りません。dmpg1, dmpg2, iopg, ijpg, stackp, lpstackp, px, astat,ccodeレジスタがそうです。これらのレジスタが転送命令で使用されると、その転送命令は両辺のオペランドを「符号無し整数」として扱います。

たとえば、iopgがソースでax0がデスティネーションとします。ADSP-2191はiopgの8ビットをax0の下位8ビットにコピーし、ax0の上位8ビットは0に変更します。逆にiopgがデスティネーションでax0がソースならば、単に上位8ビットが省略されます。

また、sr2とmr2は16ビットレジスタとして扱われますが、意味のある値は+127~-128です。それ以外の値を設定した場合、演算は意味のある結果になりませんので注意してください。

上記以外のレジスタはすべて符号付き整数として扱われます。これが意味を持つのはSR1, MR1へのコピーを行うときです。両レジスタへのコピーは必ずSR2, MR2へ影響を与えます。すなわち、SR1, MR1に符号付き数を代入すると符号ビットがSR2, MR2に拡張されます。符号無し数を代入した場合はSR1, MR1には0が代入されます。

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