Universidad Simón Bolívar

Slides:



Advertisements
Presentaciones similares
Arquitectura de Conjunto de Instrucciones (ISA)
Advertisements

Composición Interna de un Procesador
ISA (Instruction Set Architecture)
ARQUITECTURA DE LOS MICROPROCESADORES DE 8 BITS
MIPS Intermedio.
Unidad 2: Organización del CPU
Semana 5 Subprogramas..
Unidad III Elementos del lenguaje C++
ARQUITECTURA DE COMPUTADORES Semestre A-2009 Clase 13.
Microcomputadores Prof: Tatiana Marín R.. Lenguaje máquina = lenguaje binario InstrucciónLenguaje máquina (binario)OP ( hex)Nemónico Restar F0SUB.
Capítulo 4 CPU y la memoria.
ARQUITECTURA DE COMPUTADORES Semestre A-2009 Clase 10.
Maquinas Digitales UNIDADES DE CONTROL.
Unidad Central de Proceso
MIPS Intermedio.
Lenguaje ensamblador Conceptos introductorios. Formatos de Instrucción. Modos de Direccionamiento. Conjunto de instrucciones básico. Introducción al Lenguaje.
Arquitectura de Computadores Clase 13 Subrutinas y Manejo de Stack IIC 2342 Semestre Rubén Mitnik Pontificia Universidad Católica de Chile Escuela.
GENERALIDADES DEL NIVEL ISA DE LA MAQUINA VIRTUAL JAVA (JVM) Generalidades del nivel ISA.
AYUDANTÍA 2 Lenguaje Imperativo y Java. Punteros Dirección a memoria (puede apuntar a NULL). Permite trabajar con memoria (variables dinámicas de heap).
Una estrategia para evitar la sucesiones repetidas de instrucciones convertir la secuencia en un procedimiento e invocarlo cada vez que se necesite.
Programación II Sesión 3. TABLA DE CONTENIDO  Tipos de Datos en C  Delimitadores  Tipo Char  Tipo Int  Tipo Float  Tipo Double  Constantes  Operadores.
INTRODUCCION A LOS SISTEMAS DE COMPUTO ARQUITECTURA VON NEUMAN Ing. David Gonzalez.
PROGRAMACIÓN ORIENTADA A OBJETOS SEGUNDA UNIDAD: “CLASES, OBJETOS Y MÉTODOS” IRVING YAIR SALAS CHÁVEZ ING. EN SISTEMAS COMPUTACIONALES - ITSLP.
Funciones en lenguaje C 2 Funciones Definición: – Las funciones son los bloques de construcción básicos de C. Dentro de ellas se da toda la actividad.
Tipos de Datos: Punto Flotante
Organización de computadoras
Pipelining Peligros de control.
Capítulo 4: Capa Red - II ELO322: Redes de Computadores
FUNCIONES EN C.
El procesador Diseño del control.
Pipelining Datapath y control.
Datapath para las instrucciones de brinco
Lenguaje C en pocas palabras
Métodos en Java.
ARQUITECTURA DE HARD WARE COMPONENTES EN BLOQUES DEL PROCESADOR
Clase 7 Assembly - Simulador MSX88.
Cada maquina tiene un lenguaje ensamblador distinto
Arquitectura 2013 Explicación 5 Parte II.
Pipelining Introducción.
Unidad 3. Introducción a la programación
Tema 7. Introducción a lenguaje de programación Visual Basic (clase 1)
Arquitectura 2014 Explicación 1.
LENGUAJE DE PROGRAMACION “PILAS”
JAVIER ANDRES MARTÀ MARTINEZ CODIGO 37772
Estas dos líneas de código permiten al Asm iniciar en Code Segment
Lenguaje Ensamblador. Repertorio de instrucciones Microprocesador Z80.
Programación.
Diego Hernández R Pascal Variables Diego Hernández R
Introducción a las ciencias de la computación Antonio López Jaimes
P P AGINACION FACULTAD DE INGENIERIA INDUSTRIAL Y DE SISTEMAS FACULTAD DE INGENIERÍA INDUSTRIAL Y DE SISTEMAS.
Introducción práctica la uso de la tarjeta Arduino.
Tema 9. Estructuras de repetición. Clase 2
Tema 9. Estructuras de repetición. Clase 3
Arquitectura de Conjunto de Instrucciones (ISA)
Microarquitectura Modelo de estudio: Mic-1
FUNDAMENTOS DE PROGRAMACIÓN. INTRODUCCIÓN  Conceptos: Informática, Ordenador, Programa, Dato, Bit, Byte, Hardware, Software, Lenguaje de Programación,
Sesión 2: Modos de direccionamiento Indirecto, bucles y saltos condicionales Fulgencio Montilla Meoro Universidad Politécnica de Valencia.
Última revisión: 2 de agosto de 2014
Algunas Características de C++ no presentes en C
Tema 7. Introducción a lenguaje de programación Visual Basic (clase 1)
Programación Modular Programación de Computadoras - Hugo Vega Grupo2: Reina Rodríguez Miriam Salluca.
Lenguaje de Programación II
El procesador Datapath y control.
Guía teórica de manejo de estructuras de datos
UNIVERSIDAD JUÁREZ AUTÓNOMA DE TABASCO Nombres: Isaac Sánchez García Teofilo Martinez Garcia Ricardo Del Carmen Paz López Vanesa Anahí Pérez Lizárraga.
Compiladores: Generación de Código
Tema 9. Estructuras de repetición. Clase 2
Hilos de Procesamiento. Hilos Concepto Beneficios Hilos a nivel kérnel y a nivel usuario Modelos multihilos Hilos de Solaris 2 Hilos de Java.
ARQUITECTURA DE UN MICROPROCESADOR. ESTRUCTURA BÁSICA DE UN SISTEMA MICROPROGRAMABLE A. Hardware CPU (chip microprocesador): es un circuito integrado.
Transcripción de la presentación:

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

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

IJVM para Mic-1– Modelo de Memoria ... . . . 0x00008000 Variables Locales 0x00004000 Pool de Constantes 0x00000000 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

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

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

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

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

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

IJVM – Primer Programa en Memoria . . . 0x00008014 00 02 0x00008010 06 0x0000800C 0x00008008 0x00008004 FF 01 AA 0x00008000 FB 12 34 0x00004008 0x00004004 0A 0x00004000 0x00000024 03 0x00000020 07 10 36 0x0000001C A7 0x00000018 64 0x00000014 9F 0D 15 0x00000010 0x0000000C 60 0x00000008 0x00000004 0x00000000 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

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 0x00008010 06 0x0000800C 0x00008008 0x00008004 FF 01 AA 0x00008000 FB 12 34 0x00004008 0x00004004 0A 0x00004000 0x00000024 03 … 0x00000020 07 10 36 0x0000001C A7 0x00000018 64 0x00000014 9F 0D 15 0x00000010 0x0000000C 60 0x00000008 0x00000004 0x00000000 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

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

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

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

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

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 . . .

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

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

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

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 . . . 0x0000002C AC … 0x00000028 60 A7 FF F5 0x00000024 01 15 02 0x00000020 99 00 0B 84 0x0000001C 10 0x00000018 El compilador ó ensamblador genera el encabezado. INVOKEVIRTUAL lo utiliza para calcular SP, LV y AE Universidad Simón Bolívar

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

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

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

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