| RRNG OS関連命令 <<L1R>>,<<L1>>,<<L2>> |
【ニモニックとオペランド】
RRNG
【機能】
Return from an inner ring
内側リングからのリターン
【オプション】
なし
【命令フォーマットと表記法】
【解説】
JRNG命令によるジャンプ後に内側リングから復帰します。
命令動作
- @SP+ → tmp1
@SP+ → tmp2
@SP+ → tmp1.RNGのSPRNG > tmp1.RNGの場合には、RTVEが発生します。
- RRNGは内側リングへのジャンプ違反があったかどうかを検査します。
SM = 0かつtmp1.RNG ≠ 00の場合には、RFEが発生します。
- tmp1.PSH → PSH(PRNGを含む)
tmp1.RNG → RNG
tmp2 → PCRRNG実行中に処理取消型 EIT [RTVE,RFE]が発生した場合には、RRNG実行後に解除されるはずのJRNGのスタックフレームが残ります。したがって、EITとJRNGが同一のスタックを使用していた場合には、JRNGスタックフレームに追加される形でEITスタックフレームが形成されます。EITと JRNGが異なるスタックを使用する場合には、JRNG命令で使用していたスタックの内容やそのスタックポインタは変化しません。
RRNGでDCTが発生すると、処理取消型EITの発生時とは異なり、JRNGスタックフレームの解除後にDCTスタックフレームが形成されます。
この動作では、RRNG命令の実行中にDCTタイプのEITが発生することがありますので、この可能性についてのチェックを行う必要があります。
RFEが発生したときのスタックの例
RRNGとEITが同一スタックを使用するとき
![]()
- JRNG命令を実行した側のリングのSPは変化しません。
- EIT処理後の新 PSWはRRNG実行前のPSWの値が、RFEまたはRTVEのEITVTEによって書き換えられたものです。
- PRNGはRRNGを実行した側のリングを示します。
- スタックに退避されたPSW(つまりRFEを発生させたPSW)はEIT処理後のPSWには影響しません。
RRNG命令でスタックからポップされたPSWについては、PSHとRNG以外のフィールドは無視されます。ただし、これらのフィールドはJRNG命令からRRNG命令までの間に書き換えてはなりません。
RRNG命令で同一のリングに復帰する場合には、SPの最終値は
- mem[初期 SP +8]→ SP
となります。
JRNGVBのEビットはRRNG命令の動作には関係しません。Eビットが0の場合にも、RRNG命令は実行されます。
【フラグ変化】
【発生EIT】
RTVE RNG > tmp1.RNG(スタックから復帰したPSWのRNG) RFE SM = 0かつtmp1.RNG ≠ 00 OAJE/OAJT スタックから復帰したPCが奇数 DCT RNG値の変更によるDCT条件成立
【使用例】