RTSD
|
スタックフレームの解放とサブルーチンからの復帰
|
RTSD
|
ReTurn from Subroutine and Deallocate stack frame
|
【構文】
(1)RTSD src
(2)RTSD src, dest-dest2
【オペレーション】*1
(1)SP = SP + src;
PC = *SP;
SP = SP + 4;
(2)signed char i;
SP = SP + ( src - ( register_num(dest2) - register_num(dest) +1 ) * 4 );
for ( i = register_num(dest); i <= register_num(dest2); i++ ) {
tmp = *SP;
SP = SP + 4;
register(i) = tmp;
}
PC = *SP;
SP = SP + 4;
【機能】
- | スタックフレームを解放後、サブルーチンから復帰します。 |
- | srcがスタックフレーム(自動変数領域)のサイズになるように指定してください。 |
- | スタックフレームの解放とレジスタの復帰を行った後、サブルーチンから復帰します。 |
- | srcがスタックフレーム(自動変数領域とレジスタ退避領域)のサイズになるように指定してください。 |
- | destとdest2で範囲指定したレジスタを一括してスタックから復帰します。 |
- | 範囲は先頭レジスタ番号と最終レジスタ番号で指定します。ただし、(先頭レジスタのレジスタ番号≦最終レジスタのレジスタ番号)となっている必要があります。 |
- | 使用されるスタックポインタは、PSWのUビットで示すスタックポインタになります。 |
【命令フォーマット】
|
|
|
|
|
(1)RTSD src
|
#UIMM:8(注)
|
−
|
−
|
|
(2)RTSD src, dest-dest2
|
#UIMM:8(注)
|
Rd (Rd=R1~R15)
|
Rd2 (Rd=R1~R15)
|
|
注 | 弊社の「RXファミリ アセンブラ」では、即値は、4の倍数を指定してください。UIMM:8には、0〜1020(255×4)が指定できます。命令コードには、1/4した値が埋め込まれます。 |
【フラグ変化】
フラグ変化はありません。
【記述例】