Que es un Conjunto de Instrucciones? El nivel ISA (II)! Conjunto de Instrucciones EC-2721 Arquitectura del Computador I! • Colección completa de instrucciones comprendida por un procesador! • Lenguaje de máquina ! • Usualmente es representado en lenguaje ensamblador! • Binario Organización de Computadoras: Un enfoque estructurado, Andrew Tanenbaum, Pearson Education. Capítulo 4! Universidad Simón Bolívar! Departamento de Electrónica y Circuitos! Prof. Juan. C. Regidor Qué es una instrucción? Elementos de una Instrucción ! • Código de operación (Op code)! Es una orden al procesador:! ! • Referencia a operandos fuente! ! Haz esta operación a estos datos y dejas los resultados aquí.! ! ! ! Luego, sigue haciendo esto otro.! …! ! —Hacer esto…! —A esto…! • Referencia a operando resultado! —Pon la respuesta aquí…! • Referencia a la siguiente instrucción! —Cuando lo termines, sigues con esto otro... Diagrama de estados del Ciclo de Instrucción Representación de Instrucciones • En código de máquina cada instrucción tiene una representación binaria única! Búsqueda de operandos Buscar instrucción Almacenar Resultado Múltiples ! Operandos Múltiples! Resultados ! • Para consumo humano (programadores) usa una representación simbólica! ! Calcular! Dirección! Instrucción Decodificación de instrucción Cálculo Dirección Operandos Operación sobre datos Cálculo dirección operandos Instrucción Completa,! Buscar próxima instrucción Formatos de Instrucción —ej. ADD, SUB, LOAD! ! • Los operandos se representan asi:! ! -ADD A,B Formatos de Instrucción Sencillos Cod. Op. Ref. Operando 1 Ref. Operando 2 Ref. Operando 3 3 Direcciones Cod. Op. Ref. Operando 1 Ref. Operando 2 2 Direcciones Cod. Op. 1 Dirección Cod. Op. Formato del código binario que representa una instrucción 0 Direcciones Ref. Operando 1 Tipos de Instrucciones Clasificación por" Número de direcciones (a) Clasificación por operación a realizar:! ! • Procesamiento de datos! ! • Almacenamiento de datos (Memoria principal)! ! • Movimiento de datos (I/O)! ! • Control de flujo de Programa Clasificación por " Número de direcciones(b) • 3 direcciones! —Operando 1, Operando 2, Resultado! —a = b + c;! —Puede haber una cuarta direccion– prox. instrucción (usualmente implícita)! —No es común:! Necesita palabras muy largas para contener toda la información Clasificación por" Número de direcciones (c) • 2 direcciones! —Una dirección actúa como operando y resultado! ! ! a = a + b! —Reduce la longitud de la instrución! —Requiere algún trabajo adicional! – Es necesario almacenar temporalmente algunos resultados • 1 dirección! —Segunda dirección implicita! —Usualmente es un registro (acumulador)! —Comúnmente usado en máquinas antiguas Clasificación por" Número de direcciones (d) Decisiones de Diseño" Cuantas direcciones? • Mas direcciones! • 0 (cero) direcciones! —Todas las direcciones son implicitas! —Usa una pila! —ej. load a! — load b! — add! — store c! ! —c = a + b Decisiones de diseño (1) • Repertorio! —Cuantas?! —Que pueden hacer?! —Cuán complejas serán?! • Tipos de datos! • Formatos de instrucción! —Longitud del opcode! —Numero de direcciones —Instrucciones mas complejas (¿poderosas?) Menos instrucciones por programa! — Si hay muchos registros! – Operaciones entre registros son mas rápidas! – Si los operandos estan en memoria son mas lentas! • Menos direcciones! —Instrucciones menos complejas (¿poderosas?) Mas instrucciones por programa! —Búsqueda/ejecución de instrucciones mas rápida Decisiones de diseño (2) • Registros! —Número de registros disponibles en el CPU! —Que operaciones pueden ser efectuadas por los registros?! • Modos de direccionamiento (después…)! ! • RISC v CISC Tipos de Operando Tipos de Datos Específicos • • • • • • General – contenido binario arbitrario! Entero – valor binario ! Ordinal – Entero sin signo! Unpacked BCD - Un dígito por byte! Packed BCD - 2 dígitos BCD por byte! Near Pointer - 32 bit de offset en segmento! • Bit field! • Byte String! • Punto Flotante • Direcciones! • Números! —Entero/Punto flotante ! —Caracteres! —ASCII etc.! • Datos Lógicos! —Bits o Banderas Tipos de Operación • • • • • • • Transferencia de datos: ! Aritmeticas: !! ! ! Lógicas:! ! ! ! Conversión! ! ! ! Entrada / Salida! ! ! Control del Sistema! ! Transferencia de Control! Modos de Dirección Mov! Add! And! Num! In, Read! Trap! ! Jump, Call • • • • • • • Inmediato! Directo! Indirecto! Registro! Registro Indirecto! Desplazamiento (Indizado) ! Pila Dirección Inmediata Dirección Directa Opcode Operando ! • El operando es parte de la instrucción! • El operando ocupa el campo de dirección! • ej. ADD #5! — Suma 5 al contenido del acumulador! — 5 es operando! • El campo de dirección contiene la dirección del operando! • Dirección efectiva (EA) = Campo de dirección (A)! • e.g. ADD 32! —Suma el contenido de la celda 32 con el acumulador! —Busca el operando en la posicion 32! • No hay referencia a memoria para buscar el dato! • Rápido! • Rango limitado • Referencia única a memoria! • No requiere calculos adicionales para determinar la dirección! • Espacio de dirección limitado Dirección Directa Dirección Indirecta (1) Instrucción Opcode Dirección A Memoria Operando • El operando se encuentra en una celda de de memoria apuntada por el contenido de la posición apuntada por el campo de dirección! • EA = (A)! —Buscar en A, Encontrar la dirección (A) y buscar el operando! • e.g. ADD (A)! —Add el contenido de la celda de memoria apuntada por el contenido de A con el acumulador Dirección Indirecta (2) • Mayor espacio de dirección ! • 2n donde n = ancho de la palabra! • Puede ser anidada, multinivel, en cascada! Dirección Indirecta Instruction Opcode Address A —ej. EA = (((A)))! Pointer to operand • Multiples accesos a memoria para encontrar el operando! • >>>Lento Operand Dirección por Registro (1) Dirección por Registro(2) • Es en terminos generales, directo! • El operando esta en un registro referenciado en el campo de dirección! • EA = R! • Número de registros limitado! • Se necesitan campos de dirección mas pequeños ! • • • • —Instrucciones mas cortas! —Búsquedas de direcciones mas rápidas Memory No necesita acceder a memoria! Ejecución mas rápida! Espacio de direcciones muy limitado! Multiples registros mejoran el rendimiento Dirección por Registro Dirección Indirecta por Registro Instruction Opcode Register Address R Registers Operand Dirección Indirecta por Registro Dirección por desplazamiento • EA = A + (R)! • El campo de dirección contiene dos valores:! Instruction Opcode Register Address R Memory Registers Pointer to Operand • Dirección Indirecta! • EA = (R)! • El operando está en la posición de memoria apuntada por el contenido del registro R! • Amplio espacio de direcciones (2n)! • Requiere un solo acceso a memoria para leer el operando Operand —A = valor base! —R = registro que contiene el desplazamiento! —o vice versa Dirección por desplazamiento" Dirección Indizada Instruction Opcode Register R Address A Memory A = base! R = desplazamiento (autoincrementado)! EA = A + R! Eficiente direccionando arreglos! —EA = A + R! —R++ Registers Pointer to Operand • • • • + Operand Dirección de pila Formatos de Instrución • El operando está (implicitamente) en el tope de la pila! Ej: ! • Distribución de los bits en una instrucción! • Incluye el opcode! • Incluye (implicita o explicitamente) los operandos! • Generalmente hay mas de un formato de instrucción en un conjunto de instrucciones —ADD:! Saca dos elementos del tope de la pila y coloca su suma Longitud de Instrucción Asignación de Bits • Afectada por y afecta a:! Factores:! • # de Modos de direccionamiento! • Numero de operandos! • # de Registos! • # de conjuntos de registros! • Rango de direcciones! • Granularidad de las direcciones (palabras vs bytes) —Tamaño de la Memoria! —Organización de la memoria! —Estructura del Bus! —Complejidad del CPU ! —Velocidad del CPU! • Compromiso entre disponer de un repertorio de instrucciones poderoso y ahorrar espacio