Este programa permite una profundidad de la pila RPN limitada únicamente por la memoria indirecta disponible. Recupera los registros Y
, Z
y T
que previamente han sido retirados a la memoria indirecta con el programa H
y reestablece la sesión guardada con H004 PUSH MEM
.
La etiqueta I
se corresponde con la tecla COS
, que pretende ser abreviación de stack out. Además está colocada entre las teclas ENTER
y R↓
.
Dirección | Nombre |
---|---|
I<ENTER> | POP YZT |
I004 | POP MEM |
Pulsar XEQ
, seguido de I
, seguido de ENTER
. Los registros Y
, Z
y T
se sobreescriben con los valores almacenados en las tres últimas posiciones de la pila de memoria indirecta. Los registros X
y LASTx
se conservan. Si la pila no tiene al menos un tamaño de 3, la operación se aborta con un mensaje de error evitando la destrucción de datos en direcciones indirectas menores a la dirección mínima de la pila, pero la pila RPN se deja en un estado indefinido.
Registro | Antes | Después |
---|---|---|
T | t | (j+2) |
Z | z | (j+1) |
Y | y | (j) |
X | x | x |
L | l | l |
J | j+3 | j |
Recupera todas las variables de la A
a la Z
(excepto J
), los registros estadísticos, los registros X
, Y
, Z
y T
, y el registro LASTx
en la pila que se guardaron previamente con el programa PUSH MEM
. ¡Se sustituirán todos los datos de las variables con los de los datos guardados en la pila de usuario! POP MEM
se puede ver como descartar la sesión actual y recuperar el estado de la calculadora al que estaba antes de la llamada a PUSH MEM
.
Se puede cancelar la sesión anterior insertando en la pila el valor 37
(J007 PUSH X
) seguido de J005 DEALLOC
Para pasar datos a la sesión anterior, hay más alternativas a la descrita en el programa H
: Se deberá preparar de antemano una dirección de memoria indirecta con espacio suficiente. Este puntero se tendrá que pasar a la sesión anidada en una variable A
–Z
. La sesión anidada guardará entonces los datos de salida en la memoria indirecta. Es el equivalente a un puntero out
.
Ejemplo: Este ejemplo muestra como usar PUSH X
para reservar un solo registro de memoria indirecta. Entre paréntesis tabulado, la instrucción o instrucciones alternativas para tres valores de retorno en lugar de uno.
RCL J : Se guarda en I la dirección de memoria STO I indirecta donde guardar el valor a devolver por la sesión anidada. XEQ PUSH X : Se reserva un registro de memoria indirecta con PUSH (XEQ PUSH YZT) XEQ PUSH MEM : Se inicia la sesión nueva ... STO(I) : Se guarda el dato a pasar a la sesión anterior (STO (I)) (ISG I) (STO (I)) (ISG I) (STO (I)) ... XEQ POP MEM : Fin de la sesión XEQ POP X : Se recupera en el registro X el valor de la sesión anidada. (XEQ POP YZT)
De forma similar, los programas PUSH YZT
y ALLOC n=X
se pueden usar para reservar más memoria donde guardar los datos de devolución antes de la llamada a H004 PUSH MEM
.
Registro | Antes | Después |
---|---|---|
T | t | (j+3) |
Z | z | (j+2) |
Y | y | (j+1) |
X | x | (j) |
L | l | (j+4) |
J | j+37 | j |
I001 LBL I POP YZT: I002 XEQ J023 I003 GTO I005 I004 GTO I024 I005 0 I006 STO(J) I007 R↓ I008 DSE J I009 GTO I011 I010 GTO J035 I011 0 I012 x<>(J) I013 DSE J I014 GTO I016 I015 GTO J035 I016 0 I017 x<>(J) I018 CF 0 I019 DSE J I020 SF 0 I021 RCL(J) I022 R↑ I023 RTN POP MEM: I024 ⎻32 I025 RCL J I026 29 I027 STO- J I028 DSE J I029 GTO I031 I030 GTO J035 I031 R↓ I032 x<> J I033 ENTER I034 x<>y I035 22 I036 + I037 LASTx I038 x<>y I039 R↓ I040 XEQ J010 I041 ⎻7 I042 x<>y I043 7 I044 XEQ J010 I045 XEQ J005 I046 XEQ I002 I047 R↓ I048 ABS I049 R↓ I050 STO I I051 R↓ I052 STO H I053 XEQ I002 I054 R↓ I055 GTO J004 Longitud 178