Llamada a métodos
en Mic-1
Instrucciones
InvokeVirtual
e
iReturn
1
Llamada a un método
public class demo {
public void main() { int p1, p2; ... p2 = 10; p1 = func(5, 3, p2); ... }
public int func(int x, int y, int z) { int a, b; b = x + y; ... return a; } } .constant OBJREF 0x00 .end-constant .main .var p1 p2 .end-var ... BIPUSH 10 ISTORE p2 // p2 = 10 LDC_W OBJREF BIPUSH 5 BIPUSH 3 ILOAD p2 INVOKEVIRTUAL func ISTORE p1 ... end: HALT .end-main .method func(x, y, z) .var a b .end-var ILOAD x ILOAD y IADD ISTORE b ... ILOAD a IRETURN .end-method 2
Llamada a un método
•
La dirección de comienzo del método se guarda en la
reserva de constantes.
•
El código de operación de InvokeVirtual es seguido por un
índice de 2 bytes que apunta a la reserva de constantes.
•
Los cuatro primeros bytes del método contienen dos
números de 2 bytes que indican la cantidad de
parámetros que espera el método y el número de
variables locales que éste emplea.
Inicio: MSB # de param. LSB # de param. MSB # de v. loc. MSB # de v. loc. Op. Code 3
Paso de parámetros
4InvokeVirtual 1
invokevirtual1 PC = PC + 1; fetch invokevirtual2 H = MBRU << 8 invokevirtual3 H = MBRU OR H invokevirtual4 MAR = CPP + H; rd invokevirtual5 OPC = PC + 1 invokevirtual6 PC = MDR; fetch invokevirtual7 PC = PC + 1; fetch invokevirtual8 H = MBRU << 8 invokevirtual9 H = MBRU OR H invokevirtual10 PC = PC + 1; fetch invokevirtual11 TOS = SP - Hinvokevirtual12 TOS = MAR = TOS + 1
Param. 3 Param. 2 Param. 1 OBJREF LV anterior PC anterior Var. loc. 2 Var. loc. 1 Param. 2 Param. 1 Link ptr SP LV MBR 0xB6 H 5 PC 0xB6 desp1 desp2 0x36
InvokeVirtual 2
invokevirtual1 PC = PC + 1; fetch invokevirtual2 H = MBRU << 8 invokevirtual3 H = MBRU OR H invokevirtual4 MAR = CPP + H; rd invokevirtual5 OPC = PC + 1 invokevirtual6 PC = MDR; fetch invokevirtual7 PC = PC + 1; fetch invokevirtual8 H = MBRU << 8 invokevirtual9 H = MBRU OR H invokevirtual10 PC = PC + 1; fetch invokevirtual11 TOS = SP - Hinvokevirtual12 TOS = MAR = TOS + 1
Param. 3 Param. 2 Param. 1 OBJREF LV anterior PC anterior Var. loc. 2 Var. loc. 1 Param. 2 Param. 1 Link ptr SP MBR desp1 H LV 6 PC 0xB6 desp1 desp2 0x36
InvokeVirtual 3
invokevirtual1 PC = PC + 1; fetch invokevirtual2 H = MBRU << 8 invokevirtual3 H = MBRU OR H invokevirtual4 MAR = CPP + H; rd invokevirtual5 OPC = PC + 1 invokevirtual6 PC = MDR; fetch invokevirtual7 PC = PC + 1; fetch invokevirtual8 H = MBRU << 8 invokevirtual9 H = MBRU OR H invokevirtual10 PC = PC + 1; fetch invokevirtual11 TOS = SP - Hinvokevirtual12 TOS = MAR = TOS + 1
SP MBR desp2 H desp1<<8 LV Param. 3 Param. 2 Param. 1 OBJREF LV anterior PC anterior Var. loc. 2 Var. loc. 1 Param. 2 Param. 1 Link ptr 0xB6 desp1 desp2 0x36 PC
InvokeVirtual 4
invokevirtual1 PC = PC + 1; fetch invokevirtual2 H = MBRU << 8 invokevirtual3 H = MBRU OR H invokevirtual4 MAR = CPP + H; rd invokevirtual5 OPC = PC + 1 invokevirtual6 PC = MDR; fetch invokevirtual7 PC = PC + 1; fetch invokevirtual8 H = MBRU << 8 invokevirtual9 H = MBRU OR H invokevirtual10 PC = PC + 1; fetch invokevirtual11 TOS = SP - Hinvokevirtual12 TOS = MAR = TOS + 1
SP MBR desp2 H indice LV Param. 3 Param. 2 Param. 1 OBJREF LV anterior PC anterior Var. loc. 2 Var. loc. 1 Param. 2 Param. 1 Link ptr 0xB6 desp1 desp2 0x36 PC
InvokeVirtual 5
invokevirtual1 PC = PC + 1; fetch invokevirtual2 H = MBRU << 8 invokevirtual3 H = MBRU OR H invokevirtual4 MAR = CPP + H; rd invokevirtual5 OPC = PC + 1 invokevirtual6 PC = MDR; fetch invokevirtual7 PC = PC + 1; fetch invokevirtual8 H = MBRU << 8 invokevirtual9 H = MBRU OR H invokevirtual10 PC = PC + 1; fetch invokevirtual11 TOS = SP - Hinvokevirtual12 TOS = MAR = TOS + 1
SP MBR desp2 LV Param. 3 Param. 2 Param. 1 OBJREF LV anterior PC anterior Var. loc. 2 Var. loc. 1 Param. 2 Param. 1 Link ptr 9 0xB6 desp1 desp2 0x36 PC
InvokeVirtual 6
invokevirtual1 PC = PC + 1; fetch invokevirtual2 H = MBRU << 8 invokevirtual3 H = MBRU OR H invokevirtual4 MAR = CPP + H; rd invokevirtual5 OPC = PC + 1 invokevirtual6 PC = MDR; fetch invokevirtual7 PC = PC + 1; fetch invokevirtual8 H = MBRU << 8 invokevirtual9 H = MBRU OR H invokevirtual10 PC = PC + 1; fetch invokevirtual11 TOS = SP - Hinvokevirtual12 TOS = MAR = TOS + 1
SP MBR desp2 MDR inicio LV Param. 3 Param. 2 Param. 1 OBJREF LV anterior PC anterior Var. loc. 2 Var. loc. 1 Param. 2 Param. 1 Link ptr 10 OPC 0xB6 desp1 desp2 0x36
InvokeVirtual 7
invokevirtual1 PC = PC + 1; fetch invokevirtual2 H = MBRU << 8 invokevirtual3 H = MBRU OR H invokevirtual4 MAR = CPP + H; rd invokevirtual5 OPC = PC + 1 invokevirtual6 PC = MDR; fetch invokevirtual7 PC = PC + 1; fetch invokevirtual8 H = MBRU << 8 invokevirtual9 H = MBRU OR H invokevirtual10 PC = PC + 1; fetch invokevirtual11 TOS = SP - Hinvokevirtual12 TOS = MAR = TOS + 1
SP MBR desp2 PC inicio LV Param. 3 Param. 2 Param. 1 OBJREF LV anterior PC anterior Var. loc. 2 Var. loc. 1 Param. 2 Param. 1 Link ptr 11
npar1 npar2 nvar1 nvar2
PC
InvokeVirtual 8
invokevirtual1 PC = PC + 1; fetch invokevirtual2 H = MBRU << 8 invokevirtual3 H = MBRU OR H invokevirtual4 MAR = CPP + H; rd invokevirtual5 OPC = PC + 1 invokevirtual6 PC = MDR; fetch invokevirtual7 PC = PC + 1; fetch invokevirtual8 H = MBRU << 8 invokevirtual9 H = MBRU OR H invokevirtual10 PC = PC + 1; fetch invokevirtual11 TOS = SP - Hinvokevirtual12 TOS = MAR = TOS + 1
SP MBR npar1 LV Param. 3 Param. 2 Param. 1 OBJREF LV anterior PC anterior Var. loc. 2 Var. loc. 1 Param. 2 Param. 1 Link ptr 12
npar1 npar2 nvar1 nvar2
InvokeVirtual 9
invokevirtual1 PC = PC + 1; fetch invokevirtual2 H = MBRU << 8 invokevirtual3 H = MBRU OR H invokevirtual4 MAR = CPP + H; rd invokevirtual5 OPC = PC + 1 invokevirtual6 PC = MDR; fetch invokevirtual7 PC = PC + 1; fetch invokevirtual8 H = MBRU << 8 invokevirtual9 H = MBRU OR H invokevirtual10 PC = PC + 1; fetch invokevirtual11 TOS = SP - Hinvokevirtual12 TOS = MAR = TOS + 1
SP MBR npar2 H npar1<<8 LV Param. 3 Param. 2 Param. 1 OBJREF LV anterior PC anterior Var. loc. 2 Var. loc. 1 Param. 2 Param. 1 Link ptr 13
npar1 npar2 nvar1 nvar2
PC
InvokeVirtual 10
invokevirtual1 PC = PC + 1; fetch invokevirtual2 H = MBRU << 8 invokevirtual3 H = MBRU OR H invokevirtual4 MAR = CPP + H; rd invokevirtual5 OPC = PC + 1 invokevirtual6 PC = MDR; fetch invokevirtual7 PC = PC + 1; fetch invokevirtual8 H = MBRU << 8 invokevirtual9 H = MBRU OR H invokevirtual10 PC = PC + 1; fetch invokevirtual11 TOS = SP - Hinvokevirtual12 TOS = MAR = TOS + 1
SP MBR npar2 H num. par. LV Param. 3 Param. 2 Param. 1 OBJREF LV anterior PC anterior Var. loc. 2 Var. loc. 1 Param. 2 Param. 1 Link ptr 14
npar1 npar2 nvar1 nvar2
PC
InvokeVirtual 11
invokevirtual1 PC = PC + 1; fetch invokevirtual2 H = MBRU << 8 invokevirtual3 H = MBRU OR H invokevirtual4 MAR = CPP + H; rd invokevirtual5 OPC = PC + 1 invokevirtual6 PC = MDR; fetch invokevirtual7 PC = PC + 1; fetch invokevirtual8 H = MBRU << 8 invokevirtual9 H = MBRU OR H invokevirtual10 PC = PC + 1; fetch invokevirtual11 TOS = SP - Hinvokevirtual12 TOS = MAR = TOS + 1
SP MBR npar2 H num. par. LV Param. 3 Param. 2 Param. 1 OBJREF LV anterior PC anterior Var. loc. 2 Var. loc. 1 Param. 2 Param. 1 Link ptr
npar1 npar2 nvar1 nvar2
PC
InvokeVirtual 12
invokevirtual1 PC = PC + 1; fetch invokevirtual2 H = MBRU << 8 invokevirtual3 H = MBRU OR H invokevirtual4 MAR = CPP + H; rd invokevirtual5 OPC = PC + 1 invokevirtual6 PC = MDR; fetch invokevirtual7 PC = PC + 1; fetch invokevirtual8 H = MBRU << 8 invokevirtual9 H = MBRU OR H invokevirtual10 PC = PC + 1; fetch invokevirtual11 TOS = SP - Hinvokevirtual12 TOS = MAR = TOS + 1
SP MBR nvar1 H num. par. LV Param. 3 Param. 2 Param. 1 OBJREF LV anterior PC anterior Var. loc. 2 Var. loc. 1 Param. 2 Param. 1 Link ptr
npar1 npar2 nvar1 nvar2
PC
InvokeVirtual 13
invokevirtual12 TOS = MAR = TOS + 1 invokevirtual13 PC = PC + 1; fetch invokevirtual14 H = MBRU << 8 invokevirtual15 H = MBRU OR H invokevirtual16 MDR = SP + H + 1; wr invokevirtual17 MAR = SP = MDR; invokevirtual18 MDR = OPC; wr invokevirtual19 MAR = SP = SP + 1 invokevirtual20 MDR = LV; wr invokevirtual21 PC = PC + 1; fetch invokevirtual22 LV = TOS; goto Main1
SP LV MBR nvar1 Param. 3 Param. 2 Param. 1 OBJREF LV anterior PC anterior Var. loc. 2 Var. loc. 1 Param. 2 Param. 1 Link ptr 17
npar1 npar2 nvar1 nvar2
PC
TOS
InvokeVirtual 14
invokevirtual12 TOS = MAR = TOS + 1 invokevirtual13 PC = PC + 1; fetch invokevirtual14 H = MBRU << 8 invokevirtual15 H = MBRU OR H invokevirtual16 MDR = SP + H + 1; wr invokevirtual17 MAR = SP = MDR; invokevirtual18 MDR = OPC; wr invokevirtual19 MAR = SP = SP + 1 invokevirtual20 MDR = LV; wr invokevirtual21 PC = PC + 1; fetch invokevirtual22 LV = TOS; goto Main1
SP MBR nvar1 Param. 3 Param. 2 Param. 1 OBJREF LV anterior PC anterior Var. loc. 2 Var. loc. 1 Param. 2 Param. 1 Link ptr 18
npar1 npar2 nvar1 nvar2
PC
TOS
LV
InvokeVirtual 15
invokevirtual12 TOS = MAR = TOS + 1 invokevirtual13 PC = PC + 1; fetch invokevirtual14 H = MBRU << 8 invokevirtual15 H = MBRU OR H invokevirtual16 MDR = SP + H + 1; wr invokevirtual17 MAR = SP = MDR; invokevirtual18 MDR = OPC; wr invokevirtual19 MAR = SP = SP + 1 invokevirtual20 MDR = LV; wr invokevirtual21 PC = PC + 1; fetch invokevirtual22 LV = TOS; goto Main1
SP MBR nvar2 H nvar1<<8 Param. 3 Param. 2 Param. 1 OBJREF LV anterior PC anterior Var. loc. 2 Var. loc. 1 Param. 2 Param. 1 Link ptr 19
npar1 npar2 nvar1 nvar2
PC
TOS
LV
InvokeVirtual 16
invokevirtual12 TOS = MAR = TOS + 1 invokevirtual13 PC = PC + 1; fetch invokevirtual14 H = MBRU << 8 invokevirtual15 H = MBRU OR H invokevirtual16 MDR = SP + H + 1; wr invokevirtual17 MAR = SP = MDR; invokevirtual18 MDR = OPC; wr invokevirtual19 MAR = SP = SP + 1 invokevirtual20 MDR = LV; wr invokevirtual21 PC = PC + 1; fetch invokevirtual22 LV = TOS; goto Main1
SP MBR nvar2 H num. var. Param. 3 Param. 2 Param. 1 OBJREF LV anterior PC anterior Var. loc. 2 Var. loc. 1 Param. 2 Param. 1 Link ptr 20
npar1 npar2 nvar1 nvar2
PC
MAR
InvokeVirtual 17
invokevirtual12 TOS = MAR = TOS + 1 invokevirtual13 PC = PC + 1; fetch invokevirtual14 H = MBRU << 8 invokevirtual15 H = MBRU OR H invokevirtual16 MDR = SP + H + 1; wr invokevirtual17 MAR = SP = MDR; invokevirtual18 MDR = OPC; wr invokevirtual19 MAR = SP = SP + 1 invokevirtual20 MDR = LV; wr invokevirtual21 PC = PC + 1; fetch invokevirtual22 LV = TOS; goto Main1
SP MBR nvar2 Var. loc. 2 Var. loc. 1 Param. 3 Param. 2 Param. 1 OBJREF LV anterior PC anterior Var. loc. 2 Var. loc. 1 Param. 2 Param. 1 Link ptr 21
npar1 npar2 nvar1 nvar2
PC MDR
MAR
LV
InvokeVirtual 18
invokevirtual12 TOS = MAR = TOS + 1 invokevirtual13 PC = PC + 1; fetch invokevirtual14 H = MBRU << 8 invokevirtual15 H = MBRU OR H invokevirtual16 MDR = SP + H + 1; wr invokevirtual17 MAR = SP = MDR; invokevirtual18 MDR = OPC; wr invokevirtual19 MAR = SP = SP + 1 invokevirtual20 MDR = LV; wr invokevirtual21 PC = PC + 1; fetch invokevirtual22 LV = TOS; goto Main1
SP MBR nvar2 OPC viejo PC Var. loc. 2 Var. loc. 1 Param. 3 Param. 2 Param. 1 Link ptr LV anterior PC anterior Var. loc. 2 Var. loc. 1 Param. 2 Param. 1 Link ptr 22
npar1 npar2 nvar1 nvar2
PC
LV TOS
InvokeVirtual 19
invokevirtual12 TOS = MAR = TOS + 1 invokevirtual13 PC = PC + 1; fetch invokevirtual14 H = MBRU << 8 invokevirtual15 H = MBRU OR H invokevirtual16 MDR = SP + H + 1; wr invokevirtual17 MAR = SP = MDR; invokevirtual18 MDR = OPC; wr invokevirtual19 MAR = SP = SP + 1 invokevirtual20 MDR = LV; wr invokevirtual21 PC = PC + 1; fetch invokevirtual22 LV = TOS; goto Main1
SP MBR nvar2 Var. loc. 2 Var. loc. 1 Param. 3 Param. 2 Param. 1 Link ptr LV anterior PC anterior Var. loc. 2 Var. loc. 1 Param. 2 Param. 1 Link ptr
npar1 npar2 nvar1 nvar2
PC
LV TOS
InvokeVirtual 20
invokevirtual12 TOS = MAR = TOS + 1 invokevirtual13 PC = PC + 1; fetch invokevirtual14 H = MBRU << 8 invokevirtual15 H = MBRU OR H invokevirtual16 MDR = SP + H + 1; wr invokevirtual17 MAR = SP = MDR; invokevirtual18 MDR = OPC; wr invokevirtual19 MAR = SP = SP + 1 invokevirtual20 MDR = LV; wr invokevirtual21 PC = PC + 1; fetch invokevirtual22 LV = TOS; goto Main1
SP MBR nvar2 PC de llam. Var. loc. 2 Var. loc. 1 Param. 3 Param. 2 Param. 1 Link ptr LV anterior PC anterior Var. loc. 2 Var. loc. 1 Param. 2 Param. 1 Link ptr
npar1 npar2 nvar1 nvar2
PC
LV TOS
InvokeVirtual 21
invokevirtual12 TOS = MAR = TOS + 1 invokevirtual13 PC = PC + 1; fetch invokevirtual14 H = MBRU << 8 invokevirtual15 H = MBRU OR H invokevirtual16 MDR = SP + H + 1; wr invokevirtual17 MAR = SP = MDR; invokevirtual18 MDR = OPC; wr invokevirtual19 MAR = SP = SP + 1 invokevirtual20 MDR = LV; wr invokevirtual21 PC = PC + 1; fetch invokevirtual22 LV = TOS; goto Main1
SP MBR nvar2 PC de llam. Var. loc. 2 Var. loc. 1 Param. 3 Param. 2 Param. 1 Link ptr LV anterior PC anterior Var. loc. 2 Var. loc. 1 Param. 2 Param. 1 Link ptr 25
npar1 npar2 nvar1 nvar2
PC
LV TOS
InvokeVirtual 22
invokevirtual12 TOS = MAR = TOS + 1 invokevirtual13 PC = PC + 1; fetch invokevirtual14 H = MBRU << 8 invokevirtual15 H = MBRU OR H invokevirtual16 MDR = SP + H + 1; wr invokevirtual17 MAR = SP = MDR; invokevirtual18 MDR = OPC; wr invokevirtual19 MAR = SP = SP + 1 invokevirtual20 MDR = LV; wr invokevirtual21 PC = PC + 1; fetch invokevirtual22 LV = TOS; goto Main1
LV de llam. PC de llam. Var. loc. 2 Var. loc. 1 Param. 3 Param. 2 Param. 1 Link ptr LV anterior PC anterior Var. loc. 2 Var. loc. 1 Param. 2 Param. 1 Link ptr SP MBR nvar2 26
npar1 npar2 nvar1 nvar2
PC
LV TOS
InvokeVirtual 23
invokevirtual12 TOS = MAR = TOS + 1 invokevirtual13 PC = PC + 1; fetch invokevirtual14 H = MBRU << 8 invokevirtual15 H = MBRU OR H invokevirtual16 MDR = SP + H + 1; wr invokevirtual17 MAR = SP = MDR; invokevirtual18 MDR = OPC; wr invokevirtual19 MAR = SP = SP + 1 invokevirtual20 MDR = LV; wr invokevirtual21 PC = PC + 1; fetch invokevirtual22 LV = TOS; goto Main1
Main1 PC = PC + 1; fetch; goto (MBR)
LV de llam. PC de llam. Var. loc. 2 Var. loc. 1 Param. 3 Param. 2 Param. 1 Link ptr LV anterior PC anterior Var. loc. 2 Var. loc. 1 Param. 2 Param. 1 Link ptr SP LV MBR OpCode 27
npar1 npar2 nvar1 nvar2
PC
Retorno
•
El método invocado debe guardar en la pila su resultado
antes de ejecutar la instrucción IRETURN.
•
Un método declarado como
void
debe colocar también un
valor en la pila; es responsabilidad del método invocador
desechar ese valor con una instrucción
POP
.
•
La ejecución del programa continúa con la instrucción
que sigue a INVOKEVIRTUAL en el método invocador.
Retorno
29iReturn 1
ireturn1 MAR = SP = LV; rd ireturn2 nop ireturn3 LV = MAR = MDR; rd ireturn4 MAR = LV + 1 ireturn5 PC = MDR; rd; fetch ireturn6 MAR = SP ireturn7 LV = MDRireturn8 MDR = TOS; wr; goto Main1
0xAC MBR 0xAC Resultado LV de llam. PC de llam. Var. loc. 2 Var. loc. 1 Param. 3 Param. 2 Param. 1 Link ptr LV anterior PC anterior Var. loc. 2 Var. loc. 1 Param. 2 Param. 1 Link ptr SP LV 30
iReturn 2
ireturn1 MAR = SP = LV; rd ireturn2 nop ireturn3 LV = MAR = MDR; rd ireturn4 MAR = LV + 1 ireturn5 PC = MDR; rd; fetch ireturn6 MAR = SP ireturn7 LV = MDRireturn8 MDR = TOS; wr; goto Main1
0xAC MBR ?? SP, LV Resultado LV de llam. PC de llam. Var. loc. 2 Var. loc. 1 Param. 3 Param. 2 Param. 1 Link ptr LV anterior PC anterior Var. loc. 2 Var. loc. 1 Param. 2 Param. 1 Link ptr
iReturn 3
ireturn1 MAR = SP = LV; rd ireturn2 nop ireturn3 LV = MAR = MDR; rd ireturn4 MAR = LV + 1 ireturn5 PC = MDR; rd; fetch ireturn6 MAR = SP ireturn7 LV = MDRireturn8 MDR = TOS; wr; goto Main1
0xAC MBR ?? MDR Link ptr. SP, LV Resultado LV de llam. PC de llam. Var. loc. 2 Var. loc. 1 Param. 3 Param. 2 Param. 1 Link ptr LV anterior PC anterior Var. loc. 2 Var. loc. 1 Param. 2 Param. 1 Link ptr
iReturn 4
ireturn1 MAR = SP = LV; rd ireturn2 nop ireturn3 LV = MAR = MDR; rd ireturn4 MAR = LV + 1 ireturn5 PC = MDR; rd; fetch ireturn6 MAR = SP ireturn7 LV = MDRireturn8 MDR = TOS; wr; goto Main1
0xAC MBR ?? MDR Link ptr. SP LV Resultado LV de llam. PC de llam. Var. loc. 2 Var. loc. 1 Param. 3 Param. 2 Param. 1 Link ptr LV anterior PC anterior Var. loc. 2 Var. loc. 1 Param. 2 Param. 1 Link ptr 33
iReturn 5
ireturn1 MAR = SP = LV; rd ireturn2 nop ireturn3 LV = MAR = MDR; rd ireturn4 MAR = LV + 1 ireturn5 PC = MDR; rd; fetch ireturn6 MAR = SP ireturn7 LV = MDRireturn8 MDR = TOS; wr; goto Main1
0xAC MBR ??
MDR PC de llam.
SP LV
MAR LV de llam.Resultado PC de llam. Var. loc. 2 Var. loc. 1 Param. 3 Param. 2 Param. 1 Link ptr LV anterior PC anterior Var. loc. 2 Var. loc. 1 Param. 2 Param. 1 Link ptr 34
iReturn 6
ireturn1 MAR = SP = LV; rd ireturn2 nop ireturn3 LV = MAR = MDR; rd ireturn4 MAR = LV + 1 ireturn5 PC = MDR; rd; fetch ireturn6 MAR = SP ireturn7 LV = MDRireturn8 MDR = TOS; wr; goto Main1
MBR ?? MDR PC de llam. SP LV Resultado LV de llam. PC de llam. Var. loc. 2 Var. loc. 1 Param. 3 Param. 2 Param. 1 Link ptr LV anterior PC anterior Var. loc. 2 Var. loc. 1 Param. 2 Param. 1 Link ptr 35 0xB6 desp1 desp2 0x36 PC
iReturn 7
ireturn1 MAR = SP = LV; rd ireturn2 nop ireturn3 LV = MAR = MDR; rd ireturn4 MAR = LV + 1 ireturn5 PC = MDR; rd; fetch ireturn6 MAR = SP ireturn7 LV = MDRireturn8 MDR = TOS; wr; goto Main1
LV MBR 0x36 MDR LV de llam. MAR, SP Resultado LV de llam. PC de llam. Var. loc. 2 Var. loc. 1 Param. 3 Param. 2 Param. 1 Link ptr LV anterior PC anterior Var. loc. 2 Var. loc. 1 Param. 2 Param. 1 Link ptr 36 0xB6 desp1 desp2 0x36 PC
iReturn 8
ireturn1 MAR = SP = LV; rd ireturn2 nop ireturn3 LV = MAR = MDR; rd ireturn4 MAR = LV + 1 ireturn5 PC = MDR; rd; fetch ireturn6 MAR = SP ireturn7 LV = MDRireturn8 MDR = TOS; wr; goto Main1
LV anterior PC anterior Var. loc. 2 Var. loc. 1 Param. 2 Param. 1 Link ptr LV 37 0xB6 desp1 desp2 0x36 PC MBR 0x36 MDR LV de llam. TOS Resultado MAR, SP
iReturn 9
ireturn1 MAR = SP = LV; rd ireturn2 nop ireturn3 LV = MAR = MDR; rd ireturn4 MAR = LV + 1 ireturn5 PC = MDR; rd; fetch ireturn6 MAR = SP ireturn7 LV = MDRireturn8 MDR = TOS; wr; goto Main1 Main1 PC = PC + 1; fetch; goto (MBR)
Resultado LV anterior PC anterior Var. loc. 2 Var. loc. 1 Param. 2 Param. 1 Link ptr SP LV 38 0xB6 desp1 desp2 0x36 PC MBR 0x36