Universidad Autónoma de San Luis Potosí Facultad de Ciencias Departamento de Electrónica Unidad 3 Instrucciones: Lenguaje de la Computadora Dra. Ruth M. Aguilar Ponce Primavera Unidad 3 Operaciones del Hardware de la computadora Números con signo y sin signo Representando instrucciones en la computadora Operaciones Lógicas Instrucciones de toma de decisiones Suportando procedimientos en el hardware Modos de direccionamiento Introducción Instrucciones son los comandos al hardware de la computadora El conjunto de instrucciones es el vocabulario de comandos entendidos en una arquitectura El conjunto de instrucciones explota el concepto de programa-almacenado creado por Von Neumann La idea central es que tanto instrucciones como datos sean almacenados en memoria 3 Introducción El conjunto de instrucciones es uno de los aspectos de diseño mas importante de la computadora Su importancia radica en que afecta directamente el desempeño de la maquina debido a que afecta tanto al número de instrucciones por programa y a la cantidad de ciclos por instrucción ISA es el medio por el cual el programador controla la computadora 4 Fundamentos de diseño Fundamentos de diseño Repertorio de Operaciones: Cuantas y cuales operaciones serán proporcionadas, y que tan complejas las operaciones pueden ser Tipos de Datos: Los diferentes tipos de datos sobre los cuales se realizarán las operaciones Formato de las instrucciones: Longitud (en bits), número de direcciones, tamaño de los diversos campos, etc. Registros: Numero de registros de CPU que pueden ser referenciados por instrucciones y su uso Direccionamiento El modo o modos por los cuales las direcciones de un operando son especificadas 5 6
Repertorio de Operaciones Fundamentos de diseño Tipos de Datos Números de Punto fijo Formato de las instrucciones Variable Registros Tamaño (wordlength) Direccionamiento Directo Complex Instruction Set Computer La estrategia de diseño detrás del conjunto de instrucciones se basa en: Simplificar compiladores Usando instrucciones casi equivalentes a las instrucciones de alto nivel Mejorar el desempeño por medio de decrementar el número de instrucciones RISC Números de Punto Flotante Fijo Numero de registros Indirecto 7 La estrategia de diseño es proveer una plataforma para el buen funcionamiento de los lenguajes de alto nivel 8 Teniendo instrucciones complejas reduce el tamaño del programa Programas pequeños toman menos memoria por lo tanto ahorran este recurso. Si los programas son pequeños entonces deberían mejorar el desempeño Programas pequeños implican menos instrucciones que leer Menos instrucciones reducirá el tiempo de ejecución del programa 9 En muchos casos el programa, expresado en lenguaje de maquina simbólico es mas corto, sin embargo, el numero de bits de memoria no es notablemente mas pequeño. C Programs C Programs 5 C Programs RISC... VAX-/78.8.67 M68.9.9 Z8.. PDP-/7.9.7 Las razones por la cual el ahorro es insignificante son las siguientes: El conjunto de instrucciones es muy grande, por lo cual la forma de identificar cada instrucción (opcode) contiene un número mayor de bits Los compiladores favorecen el uso de instrucciones sencillas, por lo cual las instrucciones complejas son muy raramente usadas favorece el direccionamiento a memoria, lo cual requiere mas bits que el direccionamiento a registros El tiempo de ejecución tampoco se ve reducido por medio de un programa mas pequeño debido a que: Para soportar instrucciones complejas, la unidad de control requiere de una complejidad mayor. Esta complejidad afecta el tiempo de ejecución por instrucción Debido a que las instrucciones simples son favorecidas sobre las complejas, tenemos muchas instrucciones que tienen un tiempo de ejecución mayor debido a factores ajenos a ellas.
Reduced Instruction Set Computer Las características generales de las arquitecturas RISC son: Operaciones registro-a-registro La mayor parte de las instrucciones realizan las operaciones entre registros. Solo un par de instrucciones hacen acceso a memoria Modos de direccionamiento simple El conjunto de instrucciones realiza direccionamiento simple entre registros y algunos muy limitados a memoria. Direccionamiento mas complejos pueden ser construidos en base a estos 3 Características de RISC Formato de instrucciones simples Generalmente, pocos formatos de instrucciones son usados La longitud de las instrucciones es fija y alineada al los limites de la longitud de palabra Locación de campos es fija, especialmente el campo que identifica las instrucciones CPI bajos Instrucciones simples con formatos simples hacen que sea fácil realizar mas instrucciones en menos ciclos de reloj 4 Ventajas de RISC vs RISC El diseño efectivos de compiladores mas optimizados puede realizarse en base a instrucciones simples La mayoría de las instrucciones generadas por el compilador son simples, por lo tanto una unidad de control específicamente optimizada para instrucciones simples será mas rápida y la ejecución de tales instrucciones será mas rápida. Técnicas avanzadas tales como pipeling puede ser mas eficientemente empleada en este tipo de arquitectura. Esta arquitectura responde mejor a las interrupciones debido a su bajo CPI 5 Énfasis en Hardware Incluye instrucciones complejas multi-ciclo Las instrucciones incluyen almacenamiento y obtención de operandos desde la memoria Tamaño de código pequeño Unidad de control compleja RISC Énfasis en Software Instrucciones reducidas a un solo ciclo Las operaciones de almacenamiento y obtención de datos desde la memoria son independientes Tamaño de código relativamente mas grande Unidad de control optimizada para instrucciones simples 6 Principios de diseño Operaciones del Hardware de la Computadora Simplicidad favorece regularidad Lo pequeño es mas rápido Operaciones mas comunes rápidas Buen diseño demanda buenos compromisos El tipo de instrucciones se dividen en las siguientes clases: Aritmética Lógicas Transferencia de Datos Toma de decisiones Saltos incondicionales 7 8 3
Dirección 5// Operaciones del Hardware de la Computadora La primera clase de operaciones que se deben incluir en un conjunto de instrucciones son las operaciones aritméticas Primer principio de diseño Simplicidad favorece regularidad Operandos del Hardware de la Computadora Los operandos deben ser seleccionados de un pequeño conjunto de locaciones especiales llamadas registros El tamaño de los registros es de 3-bits para la arquitectura MIPS Todas la operaciones aritméticas requieren de tres operandos. 9 Palabra es la unidad natural de acceso en la computadora. Para la arquitectura MIPS la palabra es de 3-bits Operandos Operandos en Memoria Los operandos, generalmente tres para las operaciones aritméticas deben ser seleccionados del conjunto de registros. Los lenguajes de programación de alto nivel cuentan con estructuras de datos tales como arreglos. Segundo Principio de Diseño: Pequeño es mas rápido Los registros solo pueden mantener hasta 3 datos representados en 3 bits En el caso de la arquitectura MIPS, el número de registros con el que cuenta es 3. Por lo tanto, estructuras mas complejas deben ser guardadas en memoria. Instrucciones de Transferencia de datos Memoria Las operaciones aritméticas solo pueden realizar operaciones entre registros Por lo cual, el conjunto de instrucciones debe contar con instrucciones de transferencia de datos Para acceder a una palabra en la memoria, la instrucción debe contener la dirección Memoria es un gran arreglo unidimensional, donde la dirección actúa como el índice del arreglo. La instrucción de transferencia de datos que copia datos de la memoria hacia los registros es llamada LOAD Procesador 3 Memoria Datos 3 4 4
Transferencia de Datos (LOAD) El formato de esta instrucción es el nombre de la operación, seguido por el registro donde se guardara la información y la constante y el registro usado para accesar la memoria. LW $t, 8($s3) Transferencia de datos (STORE) La instrucción de transferencia de datos que transfiere un dato de un registro hacia una locación de memoria es llamada STORE STORE es la instrucción complementaria a LOAD y comparten el mismo formato LW Load Word SW $t, 3($s3) 5 6 Operandos Constantes o Inmediatos Muchas operaciones requieren de constantes Si el conjunto de instrucciones no ofrece la posibilidad de operar constantes, estas tendrían que ser almacenadas en memoria y posteriormente transferidas a algún registro. Por lo cual, el conjunto de instrucciones ofrece versiones de las instrucciones donde algún operando es constante. 7 Operandos inmediatos Tercer Principio de Diseño Realiza el caso común rápido Introduce operaciones aritméticas que permitan constante, estas son llamadas operaciones inmediatas. Ejemplo add immediate addi $s3, $s3, 4 8 Operandos Inmediatos Operandos constantes son muy comunes, incluyéndolos en el conjunto de instrucciones logramos instrucciones mas rápidas y que usan menos energía que si las constantes estuvieran en memoria y se transferirán a un registro. La constante cero tiene un rol importante, nos permite mover datos de registro a registro por medio de sumar con la constante cero. Representación de Números en Base Los números son representados en base Cada digito de un número binario es llamado bit El valor de cada bit es o Los números sin signo son representados de la siguiente manera: Y 3 3 3 3 9 3 5
Número sin Signo Números sin signo Ejemplo: El número binario es la representación de: 3 8 4 8 3 3 9 8 7 6 5 4 3 9 8 7 6 5 4 3 9 8 7 6 5 4 3 MSB Bit Mas Significativo LSB Bit Menos Significativo Palabras de 3-bits pueden representar 3 diferentes patrones, por lo cual estas combinaciones representan los números de a 3 - = = = 49496794 3 = 49496795 3 Números con Signo La mayor parte de las aplicaciones requieren de números tanto positivos como negativos La solución mas obvia es adicionar una representación separada para el signo. Esta representación es conocida como signo y magnitud Sin embargo esta representación no es apropiada para su implementación en hardware 33 Números con Signo La representación que es fácilmente implementada en hardware es el Complemento a s El complemento a s se obtiene de x x x x x 3 3 3 3 34 Número con Signo Número con signo Ejemplo: obtener la representación de - La representación en complemento a s se realiza invirtiendo todos los bits y sumando uno 35 Extensión de Signo En ocasiones se requiere operar con números de diferentes longitudes Por ejemplo: se desea sumar un número de 6 bits con un número de 8 bits. Para operarlos se requiere realizar la extensión de signo del operando mas pequeño Ejemplo: 36 6
Ejercicio Cual es el valor decimal de los siguientes número en complemento a s Cual es el valor decimal de los mismos números en la representación sin signo? 655 4 37 Representando instrucciones en la Computadora Las instrucciones están compuestas por diferentes campos. Cada campo es representado con un número binario Al poner juntos todos los campos obtenemos la representación final de la instrucción en binario. Los registros son referidos por casi todas las instrucciones, por lo cual debemos encontrar una manera de representar los registros por números binarios 38 Representación de Registros Representando Instrucciones Nombre Número Uso $zero El valor constante cero $at Ensamblador temporal $v - $v 3 Valores regresados por funciones $a - $a3 4 7 Argumentos $t - $t7 8 5 Temporales $s - $s7 6 3 Temporales Salvados $t8 - $t9 4 5 Temporales $k - $k 6 7 Reservado para el sistema operativo $gp 8 Apuntador Global $sp 9 Apuntador al Stack $fp 3 Apuntador al Cuadro $ra 3 Dirección de Regreso 39 El conformación de la instrucción es llamado Formato de Instrucción. En la arquitectura MIPS tanto los números como las instrucciones son representadas por patrones binarios de 3-bits Cada instrucción en formato binario conforma el lenguaje de máquina y la secuencia de instrucciones binarias es conocida como Código de Maquina 4 Representando instrucciones Instrucciones en formato R Cuarto Principio de Diseño: Buen diseño demanda buenos compromisos El compromiso es mantener todas las instrucciones del mismo largo. Por lo tanto requerimos diferentes formatos para acomodar los diferentes operandos de las instrucciones. Formato R (Register-type) Formato I (Immediate-type) Formato J (Jump-type) 4 OPCODE RS RT RD SHAMT FUNCTION 6 bits 5 bits 5 bits 5 bits 5 bits 6 bits Selecciona la operación especifica a realizar. Cantidad de Corrimiento Indica el registro destino, donde el resultado será almacenado Indica el segundo operando fuente Indica el primer operando fuente de la instrucción Este campo denota la operación y formato de la instrucción 4 7
Representado instrucciones Instrucciones Aritméticas (R-type) Para evitar cometer errores en el manejo de las instrucciones en binario, usaremos su representación en hexadecimal Ejemplo: ECA8 64 43 add Reg Reg reg 3 sub reg reg Reg 34 A = b + c + d + e; t t t3 t4 t5 6-bits 5-bits 5-bits 5-bits 5-bits 6-bits add $t,$t,$t3 add $t,$t,$t4 add $t,$t,$t5 add $t,$t,$t3 add $t,$t,$t4 add $t,$t,$t5 44 Representando Instrucciones Ejercicio add $t,$t,$t3 add $t,$t,$t4 add $t,$t,$t5 add $t,$t,$t3 A B 9 add $t,$t,$t4 9 C 9 add $t,$t,$t5 9 D 9 Que instrucción de MIPS es representada por el siguiente patrón en base OPCODE RS RT RD SHAMT FUNCT 9 34 add $t,$t,$t3 9 3 add $t,$t,$t4 9 9 3 add $t,$t,$t5 9 3 9 3 45 46 Operaciones Lógicas Corrimiento Operación Lógica Operador en C Operador en Java Instrucción MIPS Shift Izquierdo << << SLL Shift Derecho >> >>> SRL AND & & AND, ANDI OR I I OR, ORI NOT ~ ~ NOR Las operaciones de corrimiento (shift) mueven bits hacia la izquierda o derecha, rellenando los espacios vacios con cero. Ejemplo: Corrimiento izquierdo de 4 bits 9 = = 44 Corrimiento derecho de 4 bits 44 = = 9 47 48 8
AND, OR NOT Las funciones AND y OR se aplican bit a bit Ejemplo: AND A B AND OR A B OR 49 La operación NOT requiere de un solo operando Si el operando es regresa un, o viceversa Sin embargo, para continuar con la regularidad de las instrucciones con 3 operandos, esta operación no fue incluida, en su lugar implementaron la instrucción NOR Si uno de los operandos es, entonces: A B A A 5 Operaciones Lógicas Ejercicio SLL $t,$t,const t t Const SRL $t,$t,cons t t const AND $t,$t,$t3 t t3 t 36 OR $t,$t,$t3 t t3 t 37 NOR $t,$t,$t3 t t3 t 39 6-bits 5-bits 5-bits 5-bits 5-bits 6-bits Que instrucción de MIPS son representada por los siguiente patrones en base OPCODE RS RT RD SHAMT FUNCT 9 5 8 9 37 5 5 Formato I Instrucciones en formato I El formato I (Inmediato) se usa para todas las instrucciones que usan una constante. Por ejemplo: La arquitectura MIPS incluye una versión de la suma con una constante: ADDI RegistroDestino, Registro, Constante RegistroDestino = Registro + Constante Estas instrucciones requieren un formato diferente al formato R. 53 OPCODE RS RT Dirección/Numero Inmediato 6 bits 5 bits 5 bits 6 bits Indica la dirección para algunas instrucciones, en otros casos indica la constante con la que se operara Indica el registro destino Indica el operando fuente de la instrucción Este campo denota la operación y formato de la instrucción 54 9
Instrucciones aritmética y lógicas en formato I Instrucción OPCODE RS RT Dirección/Inmediato ADDI $t,$t,const 8 t t constante ADDIU $t,$t,const 9 t t constante ANDI $t,$t,const t t constante ORI $t,$t,const 3 t t constante LW $t,dir($t) 35 t t dirección SW $t,dir($t) 43 t t dirección 6-bits 5-bits 5-bits 6-bits Instrucciones de Toma de Decisión Branch if equal BEQ registro, registro, L Esta instrucciones significa salta al código etiquetado como L si el valor de registro = registro Branch if not equal BNE registro, registro, L La instrucción indica salta al código etiquetado por L si el valor de registro registro 55 56 Instrucciones IF-THEN-ELSE Estructuras IF-THEN-ELSE Las estructuras IF-THEN- ELSE son implementadas usando las instrucciones anteriores Ejemplo i j i == j? i = j f = g + h; f = g - h; IF (i == j) f = g + h; ELSE f = g h; i j i == j? i = j f = g + h; f = g - h; IF (i == j) f = g + h; ELSE f = g h; BNE $S3, $S4, ELSE ADD $S, $S, $S J EXIT ELSE: SUB $S, $S, $S BEQ $S3, $S4, IF SUB $S, $S, $S J EXIT IF: ADD $S, $S, $S 57 58 Instrucciones de Comparación Ciclo FOR Set on Less Than SLT RegistroDestino,Registro,Registro Registro Destino Registro Registro Deotra manera Set on Less Than Immediate SLTI RegistroDestino, Registo, Constante Registro Destino Registro Constante Deotra manera 59 Las estructuras de ciclos se realizan usando las instrucciones BEQ, BNE SLT, SLTI Ejemplo FOR(i = ; i < NUM; i++) j = j + ; Inicializar contador i = ; i < NUM? Ejecuta las instrucciones internas del ciclo j = j+; Incrementa el contador i = i+; 6
Ciclo FOR Ejercicio Inicializar contador i = ; i < NUM? Ejecuta las instrucciones internas del ciclo j = j+; Incrementa el contador i = i+; ADD $t, $zero, $zero FOR: SLT $t, $t, $s $t i $t j $s NUM BEQ $t,$zero,exit ADDI $t,$t, ADDI $t,$t, J FOR Implemente el ciclo FOR usando BNE Inicializar contador i = ; i < NUM? Ejecuta las instrucciones internas del ciclo j = j+; Incrementa el contador i = i+; $t i $t j $s NUM ADD $t, $zero, $zero FOR: SLT $t, $t, $s BEQ $t,$zero,exit ADDI $t,$t, ADDI $t,$t, J FOR 6 6 Ciclos WHILE Ejercicio Ejemplo: While ( A < NUM) A ++; $t A $s NUM Implemente el siguiente ciclo while While ( A < ) { A < NUM? Ejecuta las instrucciones internas del ciclo A = A+; WHILE: SLT $t, $t, $s BEQ $t,$zero,exit ADDI $t,$t, J WHILE B = B +A; A = A +; } 63 64 Solución Formato de las Instrucciones de toma de decisión Implemente el siguiente ciclo while A $t While ( A < ) { B = B +A; A = A +; } B $t WHILE: SLT $t, $t, $zero BEQ ADD $t,$zero,exit $t,$t,$t ADDI $t,$t, J WHILE Instrucción OPCODE RS RT Dirección/Inmediato BEQ $t,$t,l 4 t t Dirección de L BNE $t,$t,l 5 t t Dirección de L SLTI $t,$t,const t t constante SLTIU $t,$t,const t t constante 6-bits 5-bits 5-bits 6-bits SLT $t,$t,$t3 t t3 t 4 SLTU $t,$t,$t3 t t3 t 43 ADDU $t,$t,$t3 t t3 t 33 SUBU $t,$t,$t3 t t3 t 35 6-bits 5-bits 5-bits 5-bits 5-bits 6-bits 65 66