Llamada a un método Llamada a métodos en Mic-1 Instrucciones InvokeVirtual e iReturn 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; } } 1 Llamada a un método .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 ILOAD x ILOAD y IADD ISTORE b ... ILOAD a IRETURN .end-method 2 Paso de parámetros • 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 .method func(x, y, z) .var a b .end-var 4 InvokeVirtual 1 0xB6 desp1 desp2 0x36 PC invokevirtual1 invokevirtual2 invokevirtual3 invokevirtual4 invokevirtual5 invokevirtual6 invokevirtual7 invokevirtual8 invokevirtual9 invokevirtual10 invokevirtual11 invokevirtual12 0xB6 PC = PC + 1; fetch H = MBRU << 8 H = MBRU OR H MAR = CPP + H; rd OPC = PC + 1 PC = MDR; fetch PC = PC + 1; fetch H = MBRU << 8 H = MBRU OR H PC = PC + 1; fetch TOS = SP - H TOS = MAR = TOS + 1 MBR H SP LV InvokeVirtual 2 0xB6 0xB6 desp1 desp2 0x36 PC Param. 3 Param. 2 Param. 1 OBJREF LV anterior PC anterior Var. loc. 2 Var. loc. 1 Param. 2 Param. 1 Link ptr invokevirtual1 invokevirtual2 invokevirtual3 invokevirtual4 invokevirtual5 invokevirtual6 invokevirtual7 invokevirtual8 invokevirtual9 invokevirtual10 invokevirtual11 invokevirtual12 PC = PC + 1; fetch H = MBRU << 8 H = MBRU OR H MAR = CPP + H; rd OPC = PC + 1 PC = MDR; fetch PC = PC + 1; fetch H = MBRU << 8 H = MBRU OR H PC = PC + 1; fetch TOS = SP - H TOS = MAR = TOS + 1 MBR H SP LV desp1 Param. 3 Param. 2 Param. 1 OBJREF LV anterior PC anterior Var. loc. 2 Var. loc. 1 Param. 2 Param. 1 Link ptr 5 6 InvokeVirtual 3 InvokeVirtual 4 desp1 desp2 0x36 PC invokevirtual1 invokevirtual2 invokevirtual3 invokevirtual4 invokevirtual5 invokevirtual6 invokevirtual7 invokevirtual8 invokevirtual9 invokevirtual10 invokevirtual11 invokevirtual12 PC = PC + 1; fetch H = MBRU << 8 H = MBRU OR H MAR = CPP + H; rd OPC = PC + 1 PC = MDR; fetch PC = PC + 1; fetch H = MBRU << 8 H = MBRU OR H PC = PC + 1; fetch TOS = SP - H TOS = MAR = TOS + 1 7 MBR H SP LV desp2 desp1<<8 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 invokevirtual1 invokevirtual2 invokevirtual3 invokevirtual4 invokevirtual5 invokevirtual6 invokevirtual7 invokevirtual8 invokevirtual9 invokevirtual10 invokevirtual11 invokevirtual12 PC = PC + 1; fetch H = MBRU << 8 H = MBRU OR H MAR = CPP + H; rd OPC = PC + 1 PC = MDR; fetch PC = PC + 1; fetch H = MBRU << 8 H = MBRU OR H PC = PC + 1; fetch TOS = SP - H TOS = MAR = TOS + 1 8 MBR H SP LV desp2 indice Param. 3 Param. 2 Param. 1 OBJREF LV anterior PC anterior Var. loc. 2 Var. loc. 1 Param. 2 Param. 1 Link ptr InvokeVirtual 5 0xB6 desp1 desp2 MBR 0x36 InvokeVirtual 6 desp2 0xB6 desp1 desp2 0x36 PC invokevirtual1 invokevirtual2 invokevirtual3 invokevirtual4 invokevirtual5 invokevirtual6 invokevirtual7 invokevirtual8 invokevirtual9 invokevirtual10 invokevirtual11 invokevirtual12 npar1 PC = PC + 1; fetch H = MBRU << 8 H = MBRU OR H MAR = CPP + H; rd OPC = PC + 1 PC = MDR; fetch PC = PC + 1; fetch H = MBRU << 8 H = MBRU OR H PC = PC + 1; fetch TOS = SP - H TOS = MAR = TOS + 1 OPC SP LV Param. 3 Param. 2 Param. 1 OBJREF LV anterior PC anterior Var. loc. 2 Var. loc. 1 Param. 2 Param. 1 Link ptr invokevirtual1 invokevirtual2 invokevirtual3 invokevirtual4 invokevirtual5 invokevirtual6 invokevirtual7 invokevirtual8 invokevirtual9 invokevirtual10 invokevirtual11 invokevirtual12 PC = PC + 1; fetch H = MBRU << 8 H = MBRU OR H MAR = CPP + H; rd OPC = PC + 1 PC = MDR; fetch PC = PC + 1; fetch H = MBRU << 8 H = MBRU OR H PC = PC + 1; fetch TOS = SP - H TOS = MAR = TOS + 1 MBR MDR SP LV desp2 inicio Param. 3 Param. 2 Param. 1 OBJREF LV anterior PC anterior Var. loc. 2 Var. loc. 1 Param. 2 Param. 1 Link ptr 9 10 InvokeVirtual 7 InvokeVirtual 8 npar2 nvar1 nvar2 PC invokevirtual1 invokevirtual2 invokevirtual3 invokevirtual4 invokevirtual5 invokevirtual6 invokevirtual7 invokevirtual8 invokevirtual9 invokevirtual10 invokevirtual11 invokevirtual12 PC = PC + 1; fetch H = MBRU << 8 H = MBRU OR H MAR = CPP + H; rd OPC = PC + 1 PC = MDR; fetch PC = PC + 1; fetch H = MBRU << 8 H = MBRU OR H PC = PC + 1; fetch TOS = SP - H TOS = MAR = TOS + 1 11 MBR PC SP LV desp2 inicio 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 MBR nvar2 npar1 PC invokevirtual1 invokevirtual2 invokevirtual3 invokevirtual4 invokevirtual5 invokevirtual6 invokevirtual7 invokevirtual8 invokevirtual9 invokevirtual10 invokevirtual11 invokevirtual12 PC = PC + 1; fetch H = MBRU << 8 H = MBRU OR H MAR = CPP + H; rd OPC = PC + 1 PC = MDR; fetch PC = PC + 1; fetch H = MBRU << 8 H = MBRU OR H PC = PC + 1; fetch TOS = SP - H TOS = MAR = TOS + 1 12 SP LV Param. 3 Param. 2 Param. 1 OBJREF LV anterior PC anterior Var. loc. 2 Var. loc. 1 Param. 2 Param. 1 Link ptr InvokeVirtual 9 npar1 npar2 nvar1 nvar2 PC invokevirtual1 invokevirtual2 invokevirtual3 invokevirtual4 invokevirtual5 invokevirtual6 invokevirtual7 invokevirtual8 invokevirtual9 invokevirtual10 invokevirtual11 invokevirtual12 npar1 PC = PC + 1; fetch H = MBRU << 8 H = MBRU OR H MAR = CPP + H; rd OPC = PC + 1 PC = MDR; fetch PC = PC + 1; fetch H = MBRU << 8 H = MBRU OR H PC = PC + 1; fetch TOS = SP - H TOS = MAR = TOS + 1 MBR H SP LV InvokeVirtual 10 npar2 npar1<<8 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 invokevirtual1 invokevirtual2 invokevirtual3 invokevirtual4 invokevirtual5 invokevirtual6 invokevirtual7 invokevirtual8 invokevirtual9 invokevirtual10 invokevirtual11 invokevirtual12 PC = PC + 1; fetch H = MBRU << 8 H = MBRU OR H MAR = CPP + H; rd OPC = PC + 1 PC = MDR; fetch PC = PC + 1; fetch H = MBRU << 8 H = MBRU OR H PC = PC + 1; fetch TOS = SP - H TOS = MAR = TOS + 1 MBR H SP LV npar2 num. par. Param. 3 Param. 2 Param. 1 OBJREF LV anterior PC anterior Var. loc. 2 Var. loc. 1 Param. 2 Param. 1 Link ptr 13 14 InvokeVirtual 11 InvokeVirtual 12 npar2 nvar1 nvar2 PC invokevirtual1 invokevirtual2 invokevirtual3 invokevirtual4 invokevirtual5 invokevirtual6 invokevirtual7 invokevirtual8 invokevirtual9 invokevirtual10 invokevirtual11 invokevirtual12 PC = PC + 1; fetch H = MBRU << 8 H = MBRU OR H MAR = CPP + H; rd OPC = PC + 1 PC = MDR; fetch PC = PC + 1; fetch H = MBRU << 8 H = MBRU OR H PC = PC + 1; fetch TOS = SP - H TOS = MAR = TOS + 1 15 MBR H SP LV npar2 num. par. 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 invokevirtual1 invokevirtual2 invokevirtual3 invokevirtual4 invokevirtual5 invokevirtual6 invokevirtual7 invokevirtual8 invokevirtual9 invokevirtual10 invokevirtual11 invokevirtual12 PC = PC + 1; fetch H = MBRU << 8 H = MBRU OR H MAR = CPP + H; rd OPC = PC + 1 PC = MDR; fetch PC = PC + 1; fetch H = MBRU << 8 H = MBRU OR H PC = PC + 1; fetch TOS = SP - H TOS = MAR = TOS + 1 16 MBR H SP TOS LV nvar1 num. par. Param. 3 Param. 2 Param. 1 OBJREF LV anterior PC anterior Var. loc. 2 Var. loc. 1 Param. 2 Param. 1 Link ptr InvokeVirtual 13 npar1 npar2 nvar1 MBR nvar2 nvar1 InvokeVirtual 14 npar1 npar2 nvar1 PC invokevirtual12 invokevirtual13 invokevirtual14 invokevirtual15 invokevirtual16 invokevirtual17 invokevirtual18 invokevirtual19 invokevirtual20 invokevirtual21 invokevirtual22 TOS = MAR = TOS + 1 PC = PC + 1; fetch H = MBRU << 8 H = MBRU OR H MDR = SP + H + 1; wr MAR = SP = MDR; MDR = OPC; wr MAR = SP = SP + 1 MDR = LV; wr PC = PC + 1; fetch LV = TOS; goto Main1 nvar1 PC SP TOS LV npar1 MBR nvar2 Param. 3 Param. 2 Param. 1 OBJREF LV anterior PC anterior Var. loc. 2 Var. loc. 1 Param. 2 Param. 1 Link ptr invokevirtual12 invokevirtual13 invokevirtual14 invokevirtual15 invokevirtual16 invokevirtual17 invokevirtual18 invokevirtual19 invokevirtual20 invokevirtual21 invokevirtual22 TOS = MAR = TOS + 1 PC = PC + 1; fetch H = MBRU << 8 H = MBRU OR H MDR = SP + H + 1; wr MAR = SP = MDR; MDR = OPC; wr MAR = SP = SP + 1 MDR = LV; wr PC = PC + 1; fetch LV = TOS; goto Main1 SP TOS LV Param. 3 Param. 2 Param. 1 OBJREF LV anterior PC anterior Var. loc. 2 Var. loc. 1 Param. 2 Param. 1 Link ptr 17 18 InvokeVirtual 15 InvokeVirtual 16 npar2 nvar1 nvar2 PC invokevirtual12 invokevirtual13 invokevirtual14 invokevirtual15 invokevirtual16 invokevirtual17 invokevirtual18 invokevirtual19 invokevirtual20 invokevirtual21 invokevirtual22 TOS = MAR = TOS + 1 PC = PC + 1; fetch H = MBRU << 8 H = MBRU OR H MDR = SP + H + 1; wr MAR = SP = MDR; MDR = OPC; wr MAR = SP = SP + 1 MDR = LV; wr PC = PC + 1; fetch LV = TOS; goto Main1 MBR H SP TOS LV 19 nvar2 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 npar1 npar2 nvar1 nvar2 PC invokevirtual12 invokevirtual13 invokevirtual14 invokevirtual15 invokevirtual16 invokevirtual17 invokevirtual18 invokevirtual19 invokevirtual20 invokevirtual21 invokevirtual22 TOS = MAR = TOS + 1 PC = PC + 1; fetch H = MBRU << 8 H = MBRU OR H MDR = SP + H + 1; wr MAR = SP = MDR; MDR = OPC; wr MAR = SP = SP + 1 MDR = LV; wr PC = PC + 1; fetch LV = TOS; goto Main1 MBR H SP MAR LV 20 nvar2 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 InvokeVirtual 17 npar1 npar2 nvar1 MBR nvar2 nvar2 InvokeVirtual 18 npar1 npar2 nvar1 nvar2 PC invokevirtual12 invokevirtual13 invokevirtual14 invokevirtual15 invokevirtual16 invokevirtual17 invokevirtual18 invokevirtual19 invokevirtual20 invokevirtual21 invokevirtual22 TOS = MAR = TOS + 1 PC = PC + 1; fetch H = MBRU << 8 H = MBRU OR H MDR = SP + H + 1; wr MAR = SP = MDR; MDR = OPC; wr MAR = SP = SP + 1 MDR = LV; wr PC = PC + 1; fetch LV = TOS; goto Main1 PC MDR SP MAR LV npar1 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 invokevirtual12 invokevirtual13 invokevirtual14 invokevirtual15 invokevirtual16 invokevirtual17 invokevirtual18 invokevirtual19 invokevirtual20 invokevirtual21 invokevirtual22 TOS = MAR = TOS + 1 PC = PC + 1; fetch H = MBRU << 8 H = MBRU OR H MDR = SP + H + 1; wr MAR = SP = MDR; MDR = OPC; wr MAR = SP = SP + 1 MDR = LV; wr PC = PC + 1; fetch LV = TOS; goto Main1 MBR OPC SP TOS LV nvar2 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 21 22 InvokeVirtual 19 InvokeVirtual 20 npar2 nvar1 MBR nvar2 nvar2 npar1 npar2 nvar1 PC invokevirtual12 invokevirtual13 invokevirtual14 invokevirtual15 invokevirtual16 invokevirtual17 invokevirtual18 invokevirtual19 invokevirtual20 invokevirtual21 invokevirtual22 TOS = MAR = TOS + 1 PC = PC + 1; fetch H = MBRU << 8 H = MBRU OR H MDR = SP + H + 1; wr MAR = SP = MDR; MDR = OPC; wr MAR = SP = SP + 1 MDR = LV; wr PC = PC + 1; fetch LV = TOS; goto Main1 nvar2 PC SP TOS LV 23 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 invokevirtual12 invokevirtual13 invokevirtual14 invokevirtual15 invokevirtual16 invokevirtual17 invokevirtual18 invokevirtual19 invokevirtual20 invokevirtual21 invokevirtual22 TOS = MAR = TOS + 1 PC = PC + 1; fetch H = MBRU << 8 H = MBRU OR H MDR = SP + H + 1; wr MAR = SP = MDR; MDR = OPC; wr MAR = SP = SP + 1 MDR = LV; wr PC = PC + 1; fetch LV = TOS; goto Main1 SP TOS LV 24 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 InvokeVirtual 21 npar1 npar2 nvar1 MBR nvar2 nvar2 InvokeVirtual 22 npar1 npar2 nvar1 PC invokevirtual12 invokevirtual13 invokevirtual14 invokevirtual15 invokevirtual16 invokevirtual17 invokevirtual18 invokevirtual19 invokevirtual20 invokevirtual21 invokevirtual22 TOS = MAR = TOS + 1 PC = PC + 1; fetch H = MBRU << 8 H = MBRU OR H MDR = SP + H + 1; wr MAR = SP = MDR; MDR = OPC; wr MAR = SP = SP + 1 MDR = LV; wr PC = PC + 1; fetch LV = TOS; goto Main1 SP TOS 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 invokevirtual12 invokevirtual13 invokevirtual14 invokevirtual15 invokevirtual16 invokevirtual17 invokevirtual18 invokevirtual19 invokevirtual20 invokevirtual21 invokevirtual22 TOS = MAR = TOS + 1 PC = PC + 1; fetch H = MBRU << 8 H = MBRU OR H MDR = SP + H + 1; wr MAR = SP = MDR; MDR = OPC; wr MAR = SP = SP + 1 MDR = LV; wr PC = PC + 1; fetch LV = TOS; goto Main1 SP TOS LV 25 26 InvokeVirtual 23 Retorno npar2 nvar1 MBR nvar2 OpCode TOS = MAR = TOS + 1 SP PC = PC + 1; fetch H = MBRU << 8 H = MBRU OR H MDR = SP + H + 1; wr MAR = SP = MDR; MDR = OPC; wr LV MAR = SP = SP + 1 MDR = LV; wr PC = PC + 1; fetch LV = TOS; goto Main1 PC = PC + 1; fetch; goto (MBR) 27 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 • El método invocado debe guardar en la pila su resultado antes de ejecutar la instrucción IRETURN. PC invokevirtual12 invokevirtual13 invokevirtual14 invokevirtual15 invokevirtual16 invokevirtual17 invokevirtual18 invokevirtual19 invokevirtual20 invokevirtual21 invokevirtual22 Main1 nvar2 PC LV npar1 MBR nvar2 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 • 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. 28 Retorno iReturn 1 MBR 0xAC ireturn1 ireturn2 ireturn3 ireturn4 ireturn5 ireturn6 ireturn7 ireturn8 SP LV 29 30 iReturn 2 iReturn 3 MBR 0xAC ireturn1 ireturn2 ireturn3 ireturn4 ireturn5 ireturn6 ireturn7 ireturn8 MAR = SP = LV; rd nop LV = MAR = MDR; rd MAR = LV + 1 PC = MDR; rd; fetch MAR = SP LV = MDR MDR = TOS; wr; goto Main1 MAR = SP = LV; rd nop LV = MAR = MDR; rd MAR = LV + 1 PC = MDR; rd; fetch MAR = SP LV = MDR MDR = TOS; wr; goto Main1 31 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 MBR MDR 0xAC ireturn1 ireturn2 ireturn3 ireturn4 ireturn5 ireturn6 ireturn7 ireturn8 MAR = SP = LV; rd nop LV = MAR = MDR; rd MAR = LV + 1 PC = MDR; rd; fetch MAR = SP LV = MDR MDR = TOS; wr; goto Main1 32 SP, LV 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 ?? Link ptr. 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 MBR MDR 0xAC ireturn1 ireturn2 ireturn3 ireturn4 ireturn5 ireturn6 ireturn7 ireturn8 0xB6 MAR = SP = LV; rd nop LV = MAR = MDR; rd MAR = LV + 1 PC = MDR; rd; fetch MAR = SP LV = MDR MDR = TOS; wr; goto Main1 desp1 LV SP ?? Link ptr. 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 MBR ?? MDR PC de llam. 0xAC ireturn1 ireturn2 ireturn3 ireturn4 ireturn5 ireturn6 ireturn7 ireturn8 MAR = SP = LV; rd nop LV = MAR = MDR; rd MAR = LV + 1 PC = MDR; rd; fetch MAR = SP LV = MDR MDR = TOS; wr; goto Main1 MAR LV SP 33 34 iReturn 6 iReturn 7 desp2 0x36 PC ireturn1 ireturn2 ireturn3 ireturn4 ireturn5 ireturn6 ireturn7 ireturn8 iReturn 5 MAR = SP = LV; rd nop LV = MAR = MDR; rd MAR = LV + 1 PC = MDR; rd; fetch MAR = SP LV = MDR MDR = TOS; wr; goto Main1 35 MBR ?? MDR PC de llam. LV 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 0xB6 desp1 desp2 0x36 PC ireturn1 ireturn2 ireturn3 ireturn4 ireturn5 ireturn6 ireturn7 ireturn8 MAR = SP = LV; rd nop LV = MAR = MDR; rd MAR = LV + 1 PC = MDR; rd; fetch MAR = SP LV = MDR MDR = TOS; wr; goto Main1 36 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 MBR 0x36 MDR LV de llam. LV 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 iReturn 8 0xB6 desp1 desp2 0x36 PC ireturn1 ireturn2 ireturn3 ireturn4 ireturn5 ireturn6 ireturn7 ireturn8 MAR = SP = LV; rd nop LV = MAR = MDR; rd MAR = LV + 1 PC = MDR; rd; fetch MAR = SP LV = MDR MDR = TOS; wr; goto Main1 MBR 0x36 MDR LV de llam. TOS Resultado MAR, SP LV 37 iReturn 9 LV anterior PC anterior Var. loc. 2 Var. loc. 1 Param. 2 Param. 1 Link ptr 0xB6 desp1 desp2 MBR 0x36 0x36 PC ireturn1 ireturn2 ireturn3 ireturn4 ireturn5 ireturn6 ireturn7 ireturn8 Main1 MAR = SP = LV; rd nop LV = MAR = MDR; rd MAR = LV + 1 PC = MDR; rd; fetch MAR = SP LV = MDR MDR = TOS; wr; goto Main1 PC = PC + 1; fetch; goto (MBR) SP LV 38 Resultado LV anterior PC anterior Var. loc. 2 Var. loc. 1 Param. 2 Param. 1 Link ptr