Download Nivel ISA-IJVM e implementación de micro-código en

Document related concepts
no text concepts found
Transcript
Compilando Java a IJVM
El nivel ISA
Primera Parte
EC-2721
Arquitectura del Computador I!
Organización de Computadoras: Un enfoque estructurado,
Andrew Tanenbaum, Pearson Education. Capítulo 4
a)
b)
c)
Universidad Simón Bolívar
Departamento de Electrónica y Circuitos
Prof. Juan. C. Regidor
Un fragmento de código en Java.
El correspondiente lenguaje ensamblador Java.
El programa en IJVM en código hexadecimal.
Pilas (1)
Elementos de una Instrucción
• Código de operación (Op code)
SP
—Hacer esto…
C2
• Referencia a operandos fuente
C1
D4
120
D3
11C
B2
B2
D2
118
B1
B1
D1
114
LV
B0
B0
D0
110
A3
10C
A3
A3
A3
A2
108
A2
A2
A2
A1
104
A1
A1
A1
A0
100
A0
A0
A0
SP
• Referencia a operando resultado
• Referencia a la siguiente instrucción
—Cuando lo termines, sigues con esto otro...
SP
LV
SP
C0
LV
—A esto…
—Pon la respuesta aquí…
C3
LV
Uso de la pila para almacenar variables locales.
a) Mientras A está activo.
b) Después que A llama a B.
c) Después que B llama a C.
d) Después que C y B retornan y A llama a D.
Pilas (2)
El Modelo de Memoria de IJVM
Uso de una pila de operandos para realizar un cálculo aritmético
A
é
a) Se mete la variable a2 en la pila
b) Se mete la variable a3 en la pila
c) Suma
d) Se guarda el tope de la pila en la variable a1
Diagrama de estados del Ciclo de Instrucción
Búsqueda
de
operandos
Buscar
instrucción
Almacenar
Resultado
Múltiples
Operandos
Calcular
Dirección
Instrucción
Decodificación
de instrucción
Instrucción Completa,
Buscar próxima instrucción
Cálculo
Dirección
Operandos
Conjunto de Instrucciones de IJVM (1)
Múltiples
Resultados
Operación
sobre
datos
Cálculo
dirección
operandos
Conjunto de instrucciones de IJVM
Los operandos byte, const, y numvar son de 1 byte.
Los operandos despl, indice y offset son de 2 bytes.
Compilando Java a IJVM (1)
Compilando Java a IJVM (2)
ILOAD j
ILOAD j BIPUSH 1
a)
b)
c)
Un fragmento de código en Java.
El correspondiente lenguaje ensamblador Java.
El programa en IJVM en código hexadecimal.
Implementación de IJVM usando Mic-1 (1)
El microprograma para Mic-1
ILOAD k
ISUB
IADD
ISTORE i
ILOAD i
ISTORE j GOTO L2 BIPUSH 0
BIPUSH 3 IF_ICMPEQ L1
ISTORE k
Tope de la pila después de cada instrucción de la lámina anterior.
Implementación de IJVM usando Mic-1(2)
El microprograma para Mic-1
Implementación de IJVM usando Mic-1(3)
Implementación de IJVM usando Mic-1(4)
El microprograma para Mic-1
El microprograma para Mic-1
Implementación de IJVM usando Mic-1(5)
Implementación de IJVM usando Mic-1(6)
Formato de instrucción BIPUSH
a)
b)
El microprograma para Mic-1
ILOAD con un índice de 1-byte.
WIDE ILOAD con un índice de 2 bytes.
Implementación de IJVM usando Mic-1(7)
Implementación de IJVM usando Mic-1(8)
La secuencia inicial para
ILOAD y WIDE ILOAD.
Las direcciones son ejemplos.
La instrucción IINC tiene dos campos de operandos distintos.
Implementación de IJVM usando Mic-1(9)
La situación al inicio de diversas microinstrucciones:
a) Main1. b) goto1. c) goto2. d) goto3. e) goto4.
Efecto de INVOKEVIRTUAL
a)
b)
Memoria antes de ejecutar INVOKEVIRTUAL.
Después de ejecutarlo.
Efecto de IRETURN
a)
b)
Memoria antes de ejecutar IRETURN.
Después de ejecutarlo.