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. CAPÍTULO 1. ASENTANDO CONCEPTOS: PROGRAMA. SISTEMA CAPÍTULO 2. ARQUITECTURA DE COMPUTADORES Y EL LENGUAJE CAPÍTULO 3. LA IMPORTANCIA DEL BIT. COMPUTADORAS DIGITALES CAPÍTULO 4. LA COMPUTADORA CAPÍTULO 5. REPRESENTACIÓN DE CARACTERES CON PATRONES CAPÍTULO 6. REPRESENTACIÓN NUMÉRICA CAPÍTULO 7. SUMA BINARIA Y REPRESENTACIÓN EN COMPLEMENTO CAPÍTULO 8. PRIMER PROGRAMA MIPS CAPÍTULO 9. MODELO DE PROGRAMACIÓN EN MIPS CAPÍTULO 10. OPERANDOS Y OPERACIONES LÓGICAS CON BITS CAPÍTULO 11. MÁS INSTRUCCIONES LÓGICAS CAPÍTULO 12. INSTRUCCIONES DE ADICIÓN Y SUSTRACCIÓN CAPÍTULO 13. MULTIPLICACIÓN, DIVISIÓN ENTERA E INSTRUCCIONES CAPÍTULO 14. INSTRUCCIONES DE ACCESO A MEMORIA CAPÍTULO 15. MÁS SOBRE EL ACCESO A MEMORIA: PALABRAS Y MEDIAS PALABRAS
INTRODUCCIÓN
ICONOGRAFÍA
MÓDULO 1. INTRODUCCIÓN
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
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
3.1 LAS COMPUTADORAS Y EL SISTEMA BINARIO
3.2 PATRONES DE BITS
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
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
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
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)
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
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
10.1 OPERANDOS INMEDIATOS
10.2 INSTRUCCIÓN INMEDIATA ORI
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.
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
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
14.1 CARGA Y ALMACENAMIENTO
14.2 BIG ENDIAN Y LITTLE ENDIAN
14.3 DIRECCIONES MIPS
14.4 ARRAYS EN ENSAMBLADOR
15.1 CARGA