1. **Repertorio de instrucciones**
1.1. Influye
1.1.1. Número de instrucciones necesarias
1.1.2. El diseño del compilador
1.1.3. Diseño ruta de D/UC
1.2. CISC
1.2.1. Gran variedad de tipos de datos
1.2.2. Permite implementar instruccciones de alto nivel.
1.2.3. Hardware más complejo
1.3. RISC
1.3.1. Pocos tipos de datos
1.3.2. Técnicas de optimización más sencillas de implementar
1.3.3. Necesitan más instrucciones para una tarea
2. **Aspectos más importantes a tener en cuenta**
2.1. Tipo de almacenamiento de los operandos
2.1.1. Pila
2.1.1.1. Los operadores son implicitos
2.1.1.2. No es necesario indicar dónde están los operandos
2.1.2. Acumulador
2.1.2.1. Uno de los operandos es implícito
2.1.2.2. Los demás se deben especificar explicitamente
2.1.3. GPR
2.1.3.1. Los operadores se especifican explicitamente
2.1.3.2. Pueden ser más de dos operadores
2.1.3.3. Algunos o todos los operadores pueden estar en memoria
2.1.3.4. TIPOS
2.1.3.4.1. Registro-Registro
2.1.3.4.2. Registro-Memoria
2.1.3.4.3. Memoria-Memoria
2.2. Modos de direccionamiento soportados
2.2.1. Little Endian
2.2.1.1. Comienza por el extremo derecho
2.2.1.2. Byte menos significativo en la posición más significativa
2.2.1.3. La dirección es la del byte menos significativo
2.2.2. Big Endian
2.2.2.1. Comienza por el extremo grande
2.2.2.2. Byte menos significativo en la posición menos significativa
2.2.2.3. La dirección es la del byte más significativo
2.2.3. Middle Endian
2.2.3.1. Trabaja con ambas ordenaciones.
3. **Modos de direccionamiento básico**
3.1. Inmediato
3.1.1. Operador codificado en la instrucción
3.2. Registro
3.2.1. Se incluye el identificador que almacena el operando
3.3. Directo
3.3.1. Se incluyen las direcciones de memoria
3.4. Indirecto
3.4.1. Se indica el registro que almacena la dirección de memoria
3.5. Indirecto con desplazamiento
3.5.1. Se suma un operando inmediato al contenido del registro
4. Tratamiento de instrucciones de control de flujo
4.1. Saltos condicionales
4.1.1. Realiza comparaciones para una condición
4.2. Saltos incondicionales
4.2.1. No se evalua condiciones, salta directamente
4.3. Direccionamiento relativo al PC
4.3.1. Se conoce el destino de salto
4.3.2. Código reubicable
4.4. Direccionamiento indirecto con registro
4.4.1. No se conoce la dirección de salto
4.4.2. Se indica el identificador que contiene la dirección
5. Campos de una instrucción MIPS
5.1. Formato de instrucción
5.1.1. Forma de representación de una instrucción en números binarios
5.2. Lenguaje de máquina
5.2.1. Representación númerica binaria de las instrucciones
5.3. Representación hexadecimal
5.3.1. Se pueden convertir los números binarios a hexadecimales
6. **El lenguaje del computador**
6.1. **Instrucciones**
6.1.1. Entiende el ordenador
6.2. **Juego de Instrucciones**
6.2.1. Entiende una arquitectura
7. **Operaciones aritméticas**
7.1. **ALU** (Arithmetic Logical Unit)
7.1.1. Requisito fundamental para computadoras
7.1.2. Conformadas por:
7.1.2.1. Multiplicación
7.1.2.2. Adición
7.1.2.3. Sustracción
7.1.2.4. División
7.1.3. Circuitos donde se encuentra:
7.1.3.1. Microprocesadores.
7.1.3.2. Unidades procesamiento gráfico
7.1.3.3. FPU (Unidad de punto flotante)
7.1.3.4. Lectores CD
7.1.3.5. Televisiones alta definición
7.1.4. Unidad aritmético-lógico.
7.1.4.1. Operar sobre instrucciones
7.1.4.1.1. Tipos:
7.1.4.2. Simple sumador-restador
7.1.4.3. Descomponer en pasos elementales
7.1.4.4. Ejecuta rapidamente los pasos
8. Realización del operador
8.1. Operador combinacional
8.1.1. Realiza una o varias operaciones
8.1.2. No tiene memoria
8.2. Operador secuencial
8.2.1. Funciona por fases
8.2.2. Necesita de memoria
8.2.3. Aplica algoritmos de cálculo propios.
9. **Tipos de Operaciones**
9.1. Sumador-Restador paralelo en Ca2.
9.1.1. Suma o resta dependiendo de la señal de control de S/R
9.1.2. Ca2 es el *complemento a 2 *
9.1.3. **A-B** cambia el signo de B y los suma
9.1.4. Ca2 de B es igual a Ca1 de **B+1**
9.2. Operación de multiplicación.
9.2.1. Multiplicación binaria sin signo
9.2.1.1. Algoritmo de suma-desplazamiento
9.2.1.2. Algoritmo de sumas y restas
9.2.2. Multiplicación binaria con signo
9.2.2.1. Algoritmo de Booth
9.2.3. Multiplicadores combinacionales.
9.2.3.1. Más rápidos pero más complicados
9.2.3.2. Sólo en máquinas para cálculo matemático intensivo
9.3. Operación de división.
9.3.1. Más compleja que la multiplicación.
9.3.2. Operdor sumador-restador +algoritmo
9.3.3. Es raro que un computador tenga un divisor combinacional
10. **Principios de diseño del hardware**
10.1. **La simplicidad favorece la regularidad**
10.1.1. Una sentencia en alto nivel son varias en ensamblador (MIPS)
10.1.2. Los operadores aritméticos son limitados.
10.1.3. Los registros son visibles
10.1.4. Los registros tienen un número limitado.
10.2. **Más pequeña es más rápido.**
10.2.1. A mayor número de registros mayores son los ciclos por reloj.
10.2.2. Estructuras de datos tienen más elementos que los de un registro.
10.2.3. Las estructuras de datos se almacenan en memoria
10.2.4. A menor instrucciones mayor el rendimiento.
10.3. El caso más común sea rápido
10.3.1. Optimización de las operaciones más comunes
10.3.2. Optimizar las operaciones frecuentes maximiza el rendimiento
10.3.3. La carga y almacenamiento de datos ocupa pocos ciclos de reloj
10.3.4. La constante cero simplifica el juego de instrucciones.
10.4. Un buen diseño demanda buenos compromisos
10.4.1. Equilibrio entre rendimiento-costo.
10.4.2. El diseño depende de varios factores.
10.4.3. Longitud Variable:
10.4.3.1. Se añaden tantos campos como sean necesarios
10.4.3.2. Etiquetas que indican el modo
10.4.3.3. Soporta cualquier número de operandos
10.4.4. **Longitud fija**
10.4.4.1. El código de operación especifica el direccionamiento.
10.4.4.2. Se permiten algunas combinaciones de operaciones+modos
10.4.4.3. Los campos de instrucción son los mismos
10.4.5. **Híbrida**
10.4.5.1. Solo se permiten determinados formatos de instrucción.
11. Tipos de Instrucciones
11.1. Instrucciones tipo I (Inmediato)
11.1.1. Load/Store
11.1.1.1. RS: registro base acceso a memoria
11.1.1.2. RT: registro para los datos
11.1.1.3. Inmediato: Con direccionamiento inmediato
11.1.2. Aritmético-Lógico
11.1.2.1. RS: operando 1
11.1.2.2. RT: Registro destino
11.1.2.3. Inmediato: operando 2
11.1.3. Saltos condicionales/incondicionales
11.1.3.1. RS: contiene la dirección destino
11.1.3.2. RT: No se utiliza
11.1.3.3. Inmediato: desplazamiento respecto del PC/0
11.2. Instrucciones tipo R (Registro)
11.2.1. Aritmético - Lógico
11.2.1.1. RS: Operando 1
11.2.1.2. RT: Operando 2
11.2.1.3. RD: Registro destino
11.2.1.4. sa: Indica el desplazamiento
11.2.1.5. function: Indica el tipo de operación a realizar
11.3. Instrucciones tipo J (Salto)
11.3.1. Salto incondicional y retorno de procedimiento
11.3.1.1. opCode: Codigo de operación
11.3.1.2. Instr_index: offset relativo al PC