AGRADECIMIENTOS INTRODUCCIÓN ICONOGRAFÍA MÓDULO 1. INTRODUCCIÓN CAPÍTULO 1. ASENTANDO CONCEPTOS: PROGRAMA. SISTEMA OPERATIVO. PROCESO. EL PROCESADOR. RENDIMIENTO 1.1 ¿QUÉ UTILIDAD TIENE UN PROGRAMA O FICHERO EJECUTABLE? 1.1.1 La función del sistema operativo 1.1.2 La casa de Gran Hermano (el procesador y su entorno) 1.2 ¿QUÉ ES EL RENDIMIENTO? ¿CÓMO SE MIDE? 1.2.1 El tiempo de ejecución, los M.I.P.S. y los ciclos de reloj. El concepto de rendimiento 1.2.2 Qué es un ciclo. El reloj 1.3 RETOS 1.3.1 Desprotección de ejecutables 1.3.2 El uso de binders o mezcladores CAPÍTULO 2. ARQUITECTURA DE COMPUTADORES Y EL LENGUAJE ENSAMBLADOR 2.1 INTRODUCCIÓN 2.2 DIFERENTES ARQUITECTURAS, DIFERENTES PROCESADORES FUNDAMENTOS 2.4 EL CICLO DE MÁQUINA BÁSICO 2.5 INSTRUCCIONES MÁQUINA 2.6 SENTENCIA DE LENGUAJE ENSAMBLADOR 2.7 TRADUCCIÓN DE PROGRAMAS 2.8 LENGUAJE MÁQUINA 2.9 ALMACENAMIENTO PRIMARIO 2.10 ARQUITECTURA FRENTE A IMPLEMENTACIÓN 2.10.1 Emulación 2.10.2 Traducción separada o por fases 2.10.3 Cargadores CAPÍTULO 3. LA IMPORTANCIA DEL BIT. COMPUTADORAS DIGITALES 3.1 LAS COMPUTADORAS Y EL SISTEMA BINARIO 3.2 PATRONES DE BITS CAPÍTULO 4. LA COMPUTADORA 4.1 COMPONENTES DE UNA COMPUTADORA 4.2 ¿QUÉ ES UN CONTROLADOR DE E/S? 4.3 MEMORIA PRINCIPAL 4.3.1 Memoria virtual 4.3.2 Memoria caché 4.3.3 Contenidos de memoria. La información son bits en un contexto MÓDULO 2. REPRESENTACIÓN INTERNA DE LOS DATOS EN MIPS CAPÍTULO 5. REPRESENTACIÓN DE CARACTERES CON PATRONES DE BITS 5.1 REPRESENTACIÓN DE CARACTERES 5.2 TABLA DE CARACTERES ASCII 5.3 SECUENCIAS ASCII 5.4 ARCHIVOS 5.4.1 Archivos de texto 5.4.2 Ficheros ejecutables 5.4.3 Archivos binarios 5.5 DETECCIÓN Y CORRECCIÓN DE ERRORES CON HAMMING CAPÍTULO 6. REPRESENTACIÓN NUMÉRICA 6.1 QUÉ ES UN NÚMERO 6.2 REPRESENTACIONES 6.3 NOTACIÓN POSICIONAL 6.3.1 Notación decimal 6.3.2 Notación en base cinco 6.3.3 Cambiando la representación 6.4 REPRESENTACIÓN DE NÚMEROS USANDO BASE DOS 6.5 REPRESENTACIÓN BINARIA Y HEXADECIMAL DE ENTEROS 6.5.1 Patrones de bits frecuentes 6.5.2 Representación en base 16 6.5.3 Conversión de representación hexadecimal a decimal 6.5.3.1 Desplazamiento de una posición 6.5.3.2 Desplazamiento de una posición en base 16 6.5.4 Representación en base dieciséis, diez y dos 6.5.5 Conversión de representación hexadecimal a representación binaria 6.6 CONVERSIÓN ENTRE REPRESENTACIONES 6.6.1 Conversión de decimal a base B CAPÍTULO 7. SUMA BINARIA Y REPRESENTACIÓN EN COMPLEMENTO A DOS 7.1 ALGORITMO DE SUMA BINARIO 7.1.1 Sumas con N bits 7.1.2 Detección del overflow/desbordamiento 7.1.3 Sumas en hexadecimal 7.2 ENTEROS NEGATIVOS 7.2.1 Signo y magnitud 7.2.2 Complemento a dos 7.2.2.1 El bit de signo 7.2.2.2 ¿Cómo detectar el overflow en el complemento a dos? MÓDULO 3. EL SIMULADOR MIPS (PCSPIM) CAPÍTULO 8. PRIMER PROGRAMA MIPS 8.1 INICIALIZACIÓN DEL ENTORNO DE TRABAJO EN MIPS 8.2 LA VENTANA DE BIENVENIDA 8.3 UN PROGRAMA MIPS BÁSICO 8.4 CONFIGURACIÓN BÁSICA DEL SIMULADOR MIPS 8.4.1 El contador de programa o PC (program Counter). Configuración 8.4.2 El programa en ejecución 8.4.3 RunTime o tiempo de ejecución CAPÍTULO 9. MODELO DE PROGRAMACIÓN EN MIPS 9.1 MODELO DE MEMORIA 9.1.1 Memoria de datos 9.1.2 Memoria de instrucciones 9.2 ORGANIZACIÓN DE LA MEMORIA 9.3 REGISTROS 9.3.1 Registros y la ALU 9.3.2 Código máquina 9.3.3 Convención en el uso de los registros. 9.4 CICLO MÁQUINA 9.4.1 Control de ejecución CAPÍTULO 10. OPERANDOS Y OPERACIONES LÓGICAS CON BITS 10.1 OPERANDOS INMEDIATOS 10.2 INSTRUCCIÓN INMEDIATA ORI CAPÍTULO 11. MÁS INSTRUCCIONES LÓGICAS 11.1 DESPLAZAMIENTO LÓGICO A LA IZQUIERDA. 11.1.1 No-OP 11.2 DESPLAZAMIENTO LÓGICO A LA DERECHA. 11.3 INSTRUCCIÓN OR 11.4 INSTRUCCIÓN AND 11.5 INSTRUCCIÓN XOR 11.6 INSTRUCCIÓN NOR MÓDULO 4. CÓMO PROCESAR LOS DATOS. CAPÍTULO 12. INSTRUCCIONES DE ADICIÓN Y SUSTRACCIÓN 12.1 LA ARITMÉTICA Y LA MANIPULACIÓN DE BITS 12.2 LA INSTRUCCIÓN ADDU 12.3 PROGRAMA DE EJEMPLO 12.4 NEGACIÓN DE UN ENTERO EN COMPLEMENTO A DOS 12.5 LA INSTRUCCIÓN ADDIU 12.6 LA INSTRUCCIÓN SUBU CAPÍTULO 13. MULTIPLICACIÓN, DIVISIÓN ENTERA E INSTRUCCIONES DE DESPLAZAMIENTO ARITMÉTICO 13.1 EL DOBLE DE ESPACIO 13.2 LA UNIDAD DE MULTIPLICACIÓN DEL PROCESADOR MIPS 13.3 LAS INSTRUCCIONES DIV Y DIVU 13.4 DESPLAZAMIENTO ARITMÉTICO A LA DERECHA CAPÍTULO 14. INSTRUCCIONES DE ACCESO A MEMORIA 14.1 CARGA Y ALMACENAMIENTO 14.2 BIG ENDIAN Y LITTLE ENDIAN 14.3 DIRECCIONES MIPS 14.4 ARRAYS EN ENSAMBLADOR CAPÍTULO 15. MÁS SOBRE EL ACCESO A MEMORIA: PALABRAS Y MEDIAS PALABRAS 15.1 CARGAR EXCLUSIVAMENTE UN BYTE 15.2 ALMACENAR UN BYTE INDIVIDUAL 15.3 REQUISITOS DE ALMACENAMIENTO DE LOS BYTES 15.4 ¿CÓMO ESCRIBIR EN MEMORIA MEDIAS PALABRAS? MÓDULO 5. BIFURCACIONES, INSTRUCCIONES DE DECISIÓN Y BUCLES CAPÍTULO 16. ARQUITECTURA DE COMPUTADORES Y EL LENGUAJE ENSAMBLADOR 16.1 REPASO DEL CONCEPTO DE CICLO MÁQUINA 16.2 ALTERACIÓN DEL CONTADOR DE PROGRAMA 16.3 LA INSTRUCCIÓN DE SALTO JMP 16.4 SALTOS CONDICIONALES CAPÍTULO 17. INSTRUCCIONES CONDICIONALES AVANZADAS 17.1 BRANCH ON LESS THAN ZERO Y BRANCH ON GREATER THAN ZERO 17.2 INSTRUCCIONES SET 17.3 BUCLES CONTROLADOS POR CONTADOR CAPÍTULO 18. PROGRAMACIÓN ESTRUCTURADA 18.1 POTENCIA DE CÓMPUTO 18.2 PROCESADORES CON IDÉNTICA POTENCIA DE CÁLCULO 18.3 CONJUNTO DE INSTRUCCIONES MÍNIMO 18.4 CISC/RISC 18.5 PROGRAMACIÓN ESTRUCTURADA 18.6 POTENCIA COMPUTACIONAL DE LA PROGRAMACIÓN ESTRUCTURADA CAPÍTULO 19. MÁS SOBRE SALTOS 19.1 INSTRUCCIONES DE BIFURCACIÓN 19.2 INSTRUCCIÓN DE SALTO INCONDICIONAL 19.3 TABLA DE INSTRUCCIONES DE SALTO 19.4 ESTRUCTURA IF-ELSE 19.5 CÓMO INSERTAR OPERANDOS INMEDIATOS EN LAS INSTRUCCIONES DE SALTO 19.6 INSTRUCCIÓN SET ON LESS THAN 19.7 DIRECCIONAMIENTO INDEXADO MÓDULO 6. LA PILA (STACK) Y LAS LLAMADAS A PROCEDIMIENTOS Y FUNCIONES CAPÍTULO 20. LA PILA EN TIEMPO DE EJECUCIÓN 20.1 EL STACK (PILA) DE MIPS 20.2 LA PILA EN TIEMPO DE EJECUCIÓN CAPÍTULO 21. LLAMADAS A FUNCIÓN 21.1 RUTINAS INVOCADORAS Y RUTINAS 21.2 PROTOCOLO DE LLAMADAS A LAS FUNCIONES 21.3 EJEMPLO DE UNA INVOCACIÓN A SUBRUTINA SENCILLA CAPÍTULO 22. LLAMADAS COMPLEJAS A FUNCIONES USANDO EL STACK (PILA) 22.1 CÓMO GUARDAR LA DIRECCIÓN DE RETORNO 22.2 CADENA DE LLAMADAS RECURSIVAS 22.3 PROTOCOLO DE LLAMADAS A FUNCIÓN COMPLEJAS CAPÍTULO 23. C Y ENSAMBLADOR. ESTRUCTURAS Y PUNTEROS 23.1 GESTIÓN DE MEMORIA 23.2 REGISTROS: VARIABLES MAS COMPLEJAS APÉNDICES APÉNDICE A. FUNCIONAMIENTO INTERNO DEL PROCESADOR MIPS. MODELO DE MEMORIA, REGISTROS, UNIDADES FUNCIONALES APÉNDICE B. EL PUNTO FLOTANTE. UNA INTRODUCCIÓN AL IEEE-754. FLOATS EN MIPS B.1 NOTACIÓN EN PUNTO B.2 NOTACIÓN EN PUNTO FLOTANTE. NOTACIÓN CIENTÍFICA. IEEE-754 B.3 ARITMÉTICA IEEE-754 ÍNDICE ALFABÉTICO
El objetivo fundamental de este texto es el de proporcionar al lector una base sólida para abordar el estudio de temas relacionados con la arquitectura de computadores y el desarrollo software. Durante todo el libro se pretende revelar la relación existente entre ambas disciplinas (desarrollo software y arquitectura de computadores). Se muestra cómo un lenguaje de alto nivel terminará traduciéndose al lenguaje máquina, característico del procesador sobre el que se trabaja. Y también veremos cómo se puede programar con un lenguaje de más bajo nivel como es el lenguaje ensamblador, que tras un proceso de traducción y otro de enlazado se traducirá a cadenas de bits (instrucciones y datos) -lenguaje máquina- que constituyen el ejecutable. Conocer las técnicas de desarrollo propias del ensamblador puede ayudar mucho en el desarrollo de programas de alto nivel. La arquitectura, del procesador que se ha usado en el libro, goza de un diseño claro y eficaz, características que hacen que este procesador sea fácil y provechoso para el estudio. No es objetivo de este texto convertir al lector en un programador experimentado de lenguaje MIPS sino el de proporcionarle una visión global sobre el funcionamiento de todos los sistemas de computadores. El estudio de las arquitecturas del procesador ha estado desterrado o postergado a un segundo plano, pues estas no han evolucionado agresivamente desde hace más de veinte años. Sin embargo, durante los últimos cuatro años estamos experimentando, con la aparición de las nuevas arquitecturas Multicore, la necesidad de formar profesionales versados en arquitecturas del computador, pues sus desarrollos aprovechan al máximo el potencial ofrecido por el procesador.