Llamada a métodos en Mic-1 Llamada a un método

Anuncio
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
Descargar