La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Universidad Simón Bolívar

Presentaciones similares


Presentación del tema: "Universidad Simón Bolívar"— Transcripción de la presentación:

1 Universidad Simón Bolívar
Departamento de Electrónica y Circuitos EC2721 – Arquitectura del Computador I Prof. Osberth De Castro Clase 03 Arquitectura de Conjunto de Instrucciones (ISA) Integer Java Virtual Machine (IJVM) para Mic-1 Características Básicas de IJVM Modelo de Memoria Modelo de Instrucciones y Programas Modelo de Métodos Edición, ensamblado y enlazado. Basado en A. Tanenbaum, Structured Computer Organization, Fifth Edition

2 IJVM para Mic-1 – Características básicas
Modelo de memoria consistente en: Bloque de programa (ó de Métodos) para un método principal y sub-métodos. Pool de Constantes que contiene: Direcciones de inicio de sub-métodos. Constantes del usuario. Marcos de Variables Locales y paso de parámetros entre métodos por pila. Pila de Operandos, que se usa explícita e implicitamente para hacer cálculos y movimientos de datos. Universidad Simón Bolívar

3 IJVM para Mic-1– Modelo de Memoria
... . . . 0x Variables Locales 0x Pool de Constantes 0x Memoria de Programa Registros físicos apuntadores SP=LV+num var. locales LV= 0x8000 LV= 0x8000 CPP=0x4000 PC= 0x00 Universidad Simón Bolívar

4 IJVM para Mic-1- Modelo de Memoria
Registros de soporte del Modelo: TOS (Top of the Stack): se mantendrá actualizado con el valor del Tope de la pila de operandos (apuntado por SP), ayudando a limitar el número de accesos a la memoria. OPC (Old Program Counter): su utilización principal será de guardar temporalmente valores del registro PC, mientras se realiza un llamado a funciones. En otros casos puede servir de propósito general. MAR, MDR, MBR y H no pueden dar soporte al modelo, porque son registros de propósito especial. Universidad Simón Bolívar

5 IJVM – Modelo de Instrucciones
Instrucción Descripción opcode BIPUSH byte Coloca el valor “byte” en el tope de la pila 0x10 DUP Duplica el dato del tope de la pila, en la pila 0x59 IADD Saca los dos últimos datos la pila, los suma, y mete el resultado en el tope de la pila 0x60 IAND Saca los dos últimos datos la pila, hace AND lógico, y mete el resultado en el tope de la pila 0x7E IOR Saca los dos últimos datos la pila, hace OR lógico, y mete el resultado en el tope de la pila 0x80 ISUB Saca los dos últimos datos la pila, los resta, y mete el resultado en el tope de la pila 0x64 POP Saca palabra del tope de la pila 0x57 SWAP Intercambiar los dos datos del tope de la pila 0x5F ILOAD varnum Carga en la pila el valor de la variable local de índice “varnum” 0x15 ISTORE varnum Saca el tope de la pila y guarda el valor en la variable local de índice “varnum” 0x36 IINC varnum const Incrementa la variable local de índice “varnum”, en la cantidad “const” 0x84 LDC_W index Carga en la pila la constante del Pool de Constantes de índice “index” 0x13 IEFQ offset Saca el tope de la pila. Si es cero, salta “offset” bytes en la memoria de programa 0x99 IFLT offset Saca el tope de la pila. Si es negativo, salta “offset” bytes en la memoria de programa 0x9B IF_ICMPEQ offset Saca 2 datos de la pila. Si son iguales, salta “offset” bytes en la memoria de programa 0x9F GOTO offset Salta “offset” bytes en la memoria de programa 0xA7 NOP No hace nada 0x00 INVOKEVIRTUAL desp Invoca ó “llama” el método que se encuentra en la dirección apuntada por la constante de índice “desp”, en el Pool de Constantes. 0xB6 IRETURN Retornar desde un método f2 a f1, dejando el resultado de f2 en el tope de la pila de f1. 0xAC WIDE Prefijo de instrucción. Cuando se usa antes de otra instrucción, la modifica. 0xC4 Universidad Simón Bolívar

6 IJVM – Formatos de Instrucciones
Instrucción Direccionamiento opcode arg_byte1 arg_byte2 arg_byte3 arg_byte4 BIPUSH byte inmediato 0x10 byte DUP pila 0x59 IADD 0x60 IAND Pila 0x7E IOR 0x80 ISUB 0x64 POP implícito 0x57 SWAP 0x5F ILOAD varnum Indexado relativo a LV 0x15 Varnum ISTORE varnum 0x36 IINC varnum const Indexado relativo a LV(varnum) e inmediato (const) 0x84 varnum Const LDC_W index Indexado relativo a CPP 0x13 16 bit index IEFQ offset Indexado relativo a PC 0x99 16 bit offset IFLT offset 0x9B IF_ICMPEQ offset 0x9F GOTO offset 0xA7 NOP Implícito 0x00 INVOKEVIRTUAL disp 0xB6 16 bit disp IRETURN 0xAC WIDE 0xC4 Universidad Simón Bolívar

7 IJVM – Formato de instrucciones (ejemplo 1)
Ejemplo de un fragmento de Programa IJVM Programa en Java Lenguaje ensamblador codificación Universidad Simón Bolívar

8 IJVM – formato de instrucciones (ejemplo 1)
Universidad Simón Bolívar

9 IJVM – Primer Programa en Memoria
. . . 0x 00 02 0x 06 0x C 0x 0x FF 01 AA 0x FB 12 34 0x 0x 0A 0x 0x 03 0x 07 10 36 0x C A7 0x 64 0x 9F 0D 15 0x 0x C 60 0x 0x 0x 13 Programa en JAVA: #define max 10 #define min 6 int i, j, k; j = min; k = 2; i = j + k; if (i = 3) k = 0; else j = j – 1; Programa en ISA - IJVM (mnemónico): BIPUSH 2 LDC_W min ISTORE j ISTORE k ILOAD j ILOAD k IADD ISTORE i ILOAD i BIPUSH 3 IF_ICMPEQ L1 BIPUSH 1 ISUB GOTO L2 L1: BIPUSH 0 L2: HALT SP min max i j k PC LV CPP NOTA: de la generación de indices de variables y constantes se encargan los compiladores y ensambladores Universidad Simón Bolívar

10 IJVM - Métodos Lenguaje de Lenguaje de Alto Nivel
Nivel de Lenguaje ensamblador Nivel ISA Programa en JAVA: #define max 10 #define min 6 int i, j, k; j = min; k = 2; i = j + k; if (i = 3) k = 0; else j = j – 1; . . . 00 02 0x 06 0x C 0x 0x FF 01 AA 0x FB 12 34 0x 0x 0A 0x 0x 03 0x 07 10 36 0x C A7 0x 64 0x 9F 0D 15 0x 0x C 60 0x 0x 0x 13 Compilador Enlazador (linker) Programa en ISA - IJVM (mnemónico): BIPUSH 2 LDC_W min ISTORE j ISTORE k ILOAD j ILOAD k IADD ISTORE i ILOAD i BIPUSH 3 IF_ICMPEQ L1 BIPUSH 1 ISUB GOTO L2 L1: BIPUSH 0 L2: HALT Ensamblador Enlazador (linker) Universidad Simón Bolívar

11 IJVM – Programación en Lenguaje Ensamblador
// Programa en HLL: #define max 10 #define min 6 void main(void){ int i, j, k; j = min; k = 2; i = j + k; if (i = 3) k = 0; else j = j – 1; } // Programa en Lenguaje Ensamblador .constant max 0x0A min 0x06 .end-constant .main .var i j k .end-var BIPUSH 2 LDC_W min ISTORE j ISTORE k ILOAD j ILOAD k IADD ISTORE i ILOAD i BIPUSH 3 IF_ICMPEQ L1 BIPUSH 1 ISUB GOTO L2 L1: BIPUSH 0 L2: HALT .end-main Universidad Simón Bolívar

12 Universidad Simón Bolívar
IJVM - Métodos Se usa el método (función) como estructura de programación. El método “Main” siempre debe existir, y tiene características especiales. Un método es un fragmento de código que es llamado por otro, se le pueden pasar parámetros y devuelve un resultado. Instrucciones de IJVM para su utilización: INVOKEVIRTUAL desp: invocar al método cuya dirección de inicio (primer byte en memoria de programa) se encuentra en la dirección apuntada por la constante de índice “desp” de 16 bits. La invocación involucra: Salto a la dirección incial del método. Estructuración de la memoria de datos correspondiente (marco de Var. Locales). IRETURN: Retorno desde el método invocado al invocador. Involucra: Salto de retorno a la siguiente instrucción, posterior al INVOKEVIRTUAL. Restauración de la estructura de datos del método invocador. Universidad Simón Bolívar

13 ISA – Invokevirtual e Ireturn (vista simple)
Paso de parámetros por pila ILOAD a3 ILOAD a2 Invocación de f2: INVOKEVIRTUAL f2 Retorno de f2 a f1, resultado por pila: IRETURN a3 a2 a1 LV . . . PC b1=a3 b2=a2 SP b3 b4 Prog.f2 Prog.f1 a3 a2 a1 LV . . . PC SP Prog.f2 Prog.f1 a3 a2 a1 . . . Prog.f2 Prog.f1 LV PC Res.f2 SP a3 a2 a1 LV SP . . . Prog.f2 Prog.f1 PC Universidad Simón Bolívar

14 IJVM – Métodos (Invokevirtual e Ireturn)
Tareas necesarias para implementación INVOKEVIRTUAL desp: Calcular la dirección de inicio de Programa del método (Ya se tiene el apuntador en el Pool de Constantes, con índice “desp”). PCf2 = contenido de dirección [ CPP + desp ] Información para inicializar el Marco de Variables locales de método a invocar, que es colocar los apuntadores que lo definen. En un principio (esto va a cambiar mas adelante): SPf2 LVf2 Guardar la información necesaria para un retorno exitoso: no se puede guardar en registros, porque todos son de propósito especial. Deben guardarse en memoria. Son: PC de retorno LVf1 Dado que su ubicación en memoria tampoco puede mantenerse en registros, esta ubicación es un apuntador también en memoria AE : Apuntador de Enlace Universidad Simón Bolívar

15 IJVM – Métodos – Pila SP LV PC Memoria de Datos Memoria de Programa
Variable Local 3 (f2) Variable Local 2 (f2) Variable Local 1 (f2) LV Apuntador de Enlace (Apuntador de Información de Retorno) SP PC de retorno (a f1) LV de retorno (a f1) Operando en pila (f2) ILOAD … ISTORE … IRETURN PC Variable Local 3 (f1) Variable Local 2 (f1) Variable Local 1 (f1) Apuntador de Enlace (Apuntador de Información de Retorno) PC de retorno (a f0) LV de retorno (a f0) Programa de método f1 INVOKEVIRTUAL f2 ILOAD … IRETURN . . . PC de retorno (a f0) LV de retorno (a f0) ILOAD … INVOKEVIRTUAL f2 IRETURN Programa de método f0 . . . . . . Universidad Simón Bolívar . . .

16 IJVM – Métodos – Invokevirtual
Pila antes de ejecutarse la instrucción INVOKEVIRTUAL Pila justo después de ejecutarse la instrucción INVOKEVIRTUAL LVf2= SPf1- # Parf2 SPf2= AE + 1 Variable Local 1 (f2) Parámetro 2 (f2) Parámetro 1 (f2) AE = SPf1+ # VLf2+ 1 PC de retorno (a f1) LV de retorno (a f1) Parámetro 2 ( para f2) Parámetro 1 ( para f2) OBJREF SPf1 NOTA: fíjese en que además de los parámetros 1 y 2, se debe introducir “algo” que reserve el espacio para el apuntador de enlace. En este caso, se introduce la constante OBJREF, que en JVM es un identificador de objeto, y que es la constante de índice “0” en el Pool de Constantes. Se le considera el “parámetro 0” del método a invocar. SPf1 . . . Variable Local 3 (f1) Variable Local 2 (f1) Variable Local 1 (f1) Apuntador de Enlace (AE) (Apuntador de Información de Retorno) PC de retorno (a f0) LV de retorno (a f0) LVf1 . . . Variable Local 3 (f1) Variable Local 2 (f1) Variable Local 1 (f1) Apuntador de Enlace (Apuntador de Información de Retorno) PC de retorno (a f0) LV de retorno (a f0) Universidad Simón Bolívar

17 IJVM – Métodos – Invokevirtual
Pila antes de ejecutarse la instrucción IRETURN Resultado devuelto (por f2) . . . Variable Local 3 (f1) Variable Local 2 (f1) Variable Local 1 (f1) Apuntador de Enlace (AE) (Apuntador de Información de Retorno) PC de retorno (a f0) LV de retorno (a f0) LVf1= LV de retorno (a f1) SPf1= LVf2 Pila justo después de ejecutarse la instrucción IRETURN SPf2 Resultado a devolver (a f1) LV de retorno (a f1) PC de retorno (a f1) Variable Local 1 (f2) Parámetro 2 (f2) Parámetro 1 (f2) AE = SPf1+ # VLf2+ 1 LVf2 LV de retorno (a f0) PC de retorno (a f0) Variable Local 3 (f1) Variable Local 2 (f1) Variable Local 1 (f1) Apuntador de Enlace (Apuntador de Información de Retorno) . . . Universidad Simón Bolívar

18 IJVM – Métodos - Programación
.constant OBJREF 0 num 4 .end-constant /****************************************************/ /* Método que calcula el producto entre a y b */ .method mul(a, b) .var // aquí van las variables locales, si las hay .end-var BIPUSH 0 loop: ILOAD a IFEQ end // if(a==0) goto end; IINC a -1 // a--; ILOAD b // Suma b en la pila (el resultado acumulativo siempre está en la pila) IADD GOTO loop end: IRETURN // Retorno de mul con el resultado ya en la pila; .end-method /* Método Principal */ .main LDC_W OBJREF // Cargado para reservar espacio de AE (Apuntador de Enlace) LDC_W num // Parámetro 1 BIPUSH 5 // Parámetro 2 INVOKEVIRTUAL mul // Invocación del método “mul” HALT // El PC de retorno debe apuntar a esta instrucción. .end-main Universidad Simón Bolívar

19 IJVM – Métodos – Parámetros y Variables Locales
¿Dónde está la información sobre el Número de Parámetros y Número de Variables locales de del método fn? El programa de cada método no empieza con su primera instrucción, sino con un encabezado ó “descriptor” del método, que contiene esta información. Descriptor de 4 bytes: 2 Bytes de # de Parámetros del método (número de 16 bits). 2 Bytes de # de Variables Locales del método (número de 16 bits) .method mul(a, b) .var .end-var BIPUSH 0 loop: ILOAD a IFEQ end IINC a -1 ILOAD b IADD GOTO loop end: IRETURN .end-method . . . 0x C AC 0x 60 A7 FF F5 0x 01 15 02 0x 99 00 0B 84 0x C 10 0x El compilador ó ensamblador genera el encabezado. INVOKEVIRTUAL lo utiliza para calcular SP, LV y AE Universidad Simón Bolívar

20 IJVM – Implementación – Intérprete (1/4)
Universidad Simón Bolívar

21 IJVM – Implementación – Intérprete (2/4)
Universidad Simón Bolívar

22 IJVM – Implementación – Intérprete (3/4)
Universidad Simón Bolívar

23 IJVM – Implementación – Intérprete (4/4)
Universidad Simón Bolívar


Descargar ppt "Universidad Simón Bolívar"

Presentaciones similares


Anuncios Google