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.