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で範囲指定したレジスタを一括してスタックから復帰します。

-

範囲は先頭レジスタ番号と最終レジスタ番号で指定します。ただし、(先頭レジスタのレジスタ番号≦最終レジスタのレジスタ番号)となっている必要があります。

-

R0を指定することはできません。

-

使用されるスタックポインタは、PSWのUビットで示すスタックポインタになります。

-

スタックから復帰する順序はR1から復帰します。

 

【命令フォーマット】

構文

src

dest

dest2

コードサイズ

(バイト)

(1)RTSD src

#UIMM:8(注)

2

(2)RTSD src, dest-dest2

#UIMM:8(注)

Rd (Rd=R1~R15)

Rd2 (Rd=R1~R15)

3

弊社の「RXファミリ アセンブラ」では、即値は、4の倍数を指定してください。UIMM:8には、0〜1020(255×4)が指定できます。命令コードには、1/4した値が埋め込まれます。

 

【フラグ変化】

フラグ変化はありません。

 

【記述例】

RTSD    #4
RTSD    #16, R5-R7