LPSTACKPとLPSTACKAはループスタック用の一時レジスタです。この二本のレジスタは組で使います。
HR A-19にはこの二本がループスタックのスタックトップであると書いていますが、大間違いです。
LPSTACKPとLPSTACKAはPUSH/POP命令を使ってループスタックにアクセスする際に一時的に値をおくためのレジスタです。LPSTACKPとLPSTACKAの値はDOループ命令には影響されません。高級言語からこのレジスタにアクセスすることはまずありません。
LPSTACKPは8ビット長、LPSTACKAは16ビット長です。PCスタックには24ビットアドレスが格納されており、LPSTACKPはページ部分(上位8ビット)、LPSTACKAはオフセット部分(下位16ビット)と対応します。LPSTACKPは16ビットレジスタとデータをやり取りする場合、右詰で上位は0フィル扱いになります。
図1 レジスタの構造
このレジスタは初期値が不定です。
VisualDSP++3.0 for 21xxはLPSTACKP/LPSTACKPに対するC/C++のAPIを用意していません(sysreg.h 1.7.4.1)。どうしても高級言語からアクセスしたい場合にはインライン・アセンブラを使ってください。
特に記されていないため、LPSTACKA/LPSTACKPへの書き込みの次のサイクルにはデータが確定していると予想されます。
項目 | マニュアルのページ等 |
---|---|
解説 | HR A-19 |
スタックのデータの流れ | HR 3-35 |
PUSH/POP命令 | ISR 8-8 |