LÓPEZ TALAVERA, DIEGO / RUS CASAS, CATALINA / CHARTE, FRANCISCO
Agradecimientos
Introducción
Código fuente
1. Introducción a los microprocesadores
1.1. El sistema microcomputador
1.1.1. Información: Bus de datos e instrucciones
1.1.2. Direcciones: Bus de direcciones
1.1.3. Control: Bus de control
1.2. El microprocesador
1.2.1. Registros
1.2.2. Unidad aritmético-lógica
1.2.3. Unidad de control
1.3. Memorias
1.3.1. Memorias RAM
1.3.2. Memorias ROM
1.4. Periféricos
1.5. Breve reseña sobre la evolución histórica de los microprocesadores INTEL
1.6. Resumen
2. Microprocesador de 8 y 16 bits
2.1. Introducción
2.2. Microprocesador de 8 bits: 8085
2.2.1. Arquitectura
2.2.2. Registros
2.2.3. Unidad aritmético lógica
2.2.4. Buses
2.2.5. Esquema de bloques
2.2.6. Estados y ciclos de ejecución
2.2.7. Terminales del 8085
2.2.8. Interrupciones
2.3. Microprocesadores de 16 bits: 8086
2.3.1. Arquitectura
2.3.2. Registros
2.3.3. Ciclo de bus
2.3.4. Terminales del 8086
2.3.5. Interrupciones 8086
2.4. Resumen
3. Programación en ensamblador
3.1. Introducción
3.2. Programación del 8085
3.2.1. Formato de las instrucciones
3.2.2. Modos de direccionamiento
3.2.3. Juego de instrucciones
3.3. Programación del 8086
3.3.1. Formato de las instrucciones
3.3.2. Modos de direccionamiento
3.3.3. Juego de instrucciones
3.4. Resumen
4. Módulos e interfaces de entrada-salida
4.1. Introducción
4.2. Interfaz de entrada-salida: PPI 8255
4.2.1. Selección del 8255 en un sistema microprocesador
4.3. Interfaz 8279
4.3.1. Estructura del 8279 en un sistema microprocesador
4.4. Módulo PIC 8259
4.5. Módulo 8253
4.6. Resumen
5. El sistema uP-2000
5.1. Descripción de los componentes que forman el sistema
5.2. Uso del teclado del uP-2000
5.3. Los servicios software del uP-2000
5.4. Mapa de memoria del uP-2000
5.5. Resumen
6. Herramientas software
6.1. Entorno uP-2000
6.1.1. Estructura de un programa 8085
6.1.2. Comunicación entre PC y uP-2000
6.2. Entorno simulador 8085
6.2.1. Instalación del simulador
6.2.2. Edición y ensamblado
6.2.3. Carga de un programa
6.2.4. Ejecución de un programa
6.2.5. Otras funciones del simulador
6.3. Entorno x86
6.3.1. Estructura de un programa 8086
6.3.2. Ensamblado y enlazado de un programa
6.3.3. Ejecución de un programa
6.4. Resumen
7. Familiarizarse con el entorno
7.1. Acceso a la memoria del uP-2000
7.1.1. Ejercicio 7.1.1
7.1.2. Ejercicio 7.1.2
7.1.3. Ejercicio 7.1.3
7.2. Acceso a los registros del 8085
7.2.1. Ejercicio 7.2.1
7.2.2. Ejercicio 7.2.2
7.2.3. Ejercicio 7.2.3
7.3. Ejecución de programas
7.3.1. Ejercicio 7.3.1
7.3.2. Ejercicio 7.3.2
7.4. Ejercicios propuestos
7.4.1. Ejercicio 7.4.1
7.4.2. Ejercicio 7.4.2
7.4.3. Ejercicio 7.4.3
7.4.4. Ejercicio 7.4.4
7.4.5. Ejercicio 7.4.5
7.4.6. Ejercicio 7.4.6
7.5. Resumen
8. Ejercicios de programación
9. Acceso a memoria
9.1. Lectura de datos de 8 bits
9.1.1. Ejercicio 9.1.1
9.1.2. Ejercicio 9.1.2
9.1.3. Ejercicio 9.1.3 (8086)
9.2. Modificación de datos de 8 bits
9.2.1. Ejercicio 9.2.1
9.2.2. Ejercicio 9.2.2
9.2.3. Ejercicio 9.2.3 (8086)
9.3. Lectura de datos de 16 bits
9.3.1. Ejercicio 9.3.1
9.3.2. Ejercicio 9.3.2
9.4. Modificación de datos de 16 bits
9.4.1. Ejercicio 9.4.1
9.5. Trabajar con datos de más de 16 bits
9.5.1. Ejercicio 9.5.1
9.5.2. Ejercicio 9.5.2 (8086)
9.6. Ejercicios propuestos
9.6.1. Ejercicio 9.6.1
9.6.2. Ejercicio 9.6.2
9.6.3. Ejercicio 9.6.3
9.6.4. Ejercicio 9.6.4
9.6.5. Ejercicio 9.6.5
9.6.6. Ejercicio 9.6.6
9.7. Resumen
10. Implementación de condicionales y bucles
10.1. Saltos condicionales
10.1.1. Ejercicio 10.1.1
10.1.2. Ejercicio 10.1.2
10.1.3. Ejercicio 10.1.3
10.1.4. Ejercicio 10.1.4 (8086)
10.2. Bucles
10.2.1. Ejercicio 10.2.1
10.2.2. Ejercicio 10.2.2
10.2.3. Ejercicio 10.2.3 (8086)
10.3. Copia de bloques de datos
10.3.1. Ejercicio 10.3.1
10.3.2. Ejercicio 10.3.2 (8086)
10.3.3. Ejercicio 10.3.3
10.4. Ejercicios propuestos
10.4.1. Ejercicio 10.4.1
10.4.2. Ejercicio 10.4.2
10.4.3. Ejercicio 10.4.3
10.4.4. Ejercicio 10.4.4
10.5. Resumen
11. Operaciones aritméticas
11.1. Suma con y sin acarreo (8 y 16 bits)
11.1.1. Ejercicio 11.1.1
11.1.2. Ejercicio 11.1.2
11.1.3. Ejercicio 11.1.3
11.1.4. Ejercicio 11.1.4
11.1.5. Ejercicio 11.1.5 (8086)
11.2. Resta con y sin acarreo (8 y 16 bits)
11.2.1. Ejercicio 11.2.1
11.2.2. Ejercicio 11.2.2
11.2.3. Ejercicio 11.2.3
11.3. Técnicas para multiplicar números
11.3.1. Ejercicio 11.3.1
11.3.2. Ejercicio 11.3.2
11.3.3. Ejercicio 11.3.3 (8086)
11.4. Técnicas para dividir números
11.4.1. Ejercicio 11.4.1
11.4.2. Ejercicio 11.4.2
11.4.3. Ejercicio 11.4.3 (8086)
11.5. Operandos y resultados de más de 16 bits
11.5.1. Ejercicio 11.5.1
11.5.2. Ejercicio 11.5.2
11.5.3. Ejercicio 11.5.3
11.6. Ejercicios propuestos
11.6.1. Ejercicio 11.6.1
11.6.2. Ejercicio 11.6.2
11.6.3. Ejercicio 11.6.3
11.6.4. Ejercicio 11.6.4
11.6.5. Ejercicio 11.6.5
11.6.6. Ejercicio 11.6.6
11.6.7. Ejercicio 11.6.7
11.6.8. Ejercicio 11.6.8
11.6.9. Ejercicio 11.6.9
11.6.10. Ejercicio 11.6.10
11.6.11. Ejercicio 11.6.11
11.7. Resumen
12. Trabajo a nivel de bits
12.1. Activar y desactivar bits concretos
12.1.1. Ejercicio 12.1.1
12.1.2. Ejercicio 12.1.2
12.1.3. Ejercicio 12.1.3
12.1.4. Ejercicio 12.1.4 (8086)
12.2. Comprobar el estado de un bit
12.2.1. Ejercicio 12.2.1
12.3. Rotaciones
12.3.1. Ejercicio 12.3.1
12.3.2. Ejercicio 12.3.2
12.3.3. Ejercicio 12.3.3 (8086)
12.4. Extracción y composición de patrones de bits
12.4.1. Ejercicio 12.4.1
12.4.2. Ejercicio 12.4.2
12.5. Ejercicios propuestos
12.5.1. Ejercicio 12.5.1
12.5.2. Ejercicio 12.5.2
12.5.3. Ejercicio 12.5.3
12.5.4. Ejercicio 12.5.4
12.5.5. Ejercicio 12.5.5
12.5.6. Ejercicio 12.5.6
12.6. Resumen
13. Búsqueda de datos
13.1. Cálculo de direcciones en tablas
13.1.1. Ejercicio 13.1.1
13.1.2. Ejercicio 13.1.2
13.1.3. Ejercicio 13.1.3 (8086)
13.2. Recorrer bloques de más de 256 bytes
13.2.1. Ejercicio 13.2.1
13.3. Búsqueda del máximo y mínimo
13.3.1. Ejercicio 13.3.1
13.3.2. Ejercicio 13.3.2
13.4. Búsqueda y conteo
13.4.1. Ejercicio 13.4.1
13.4.2. Ejercicio 13.4.2 (8086)
13.5. Búsqueda y sustitución
13.5.1. Ejercicio 13.5.1
13.5.2. Ejercicio 13.5.2
13.6. Ejercicios propuestos
13.6.1. Ejercicio 13.6.1
13.6.2. Ejercicio 13.6.2
13.6.3. Ejercicio 13.6.3
13.7. Resumen
14. Estructuración del código
14.1. Escritura de subrutinas
14.1.1. Ejercicio 14.1.1
14.1.2. Ejercicio 14.1.2 (8086)
14.2. Uso de indicadores del registro de estado para comunicar resultados
14.2.1. Ejercicio 14.2.1
14.3. Recepción de argumentos y devolución de resultados
14.3.1. Ejercicio 14.3.1
14.3.2. Ejercicio 14.3.2
14.3.3. Ejercicio 14.3.3
14.4. Ejercicios propuestos
14.4.1. Ejercicio 14.4.1
14.4.2. Ejercicio 14.4.2
14.5. Resumen
15. Ordenar datos
15.1. Implementación del algoritmo de la burbuja
15.1.1. Ejercicio 15.1.1
15.2. Resumen
16. Teclado y visualización en el uP-2000
16.1. Visualización en el campo de direcciones
16.1.1. Ejercicio 16.1.1
16.2. Visualización en el campo de datos
16.2.1. Ejercicio 16.2.1
16.2.2. Ejercicio 16.2.2
16.3. Mostrar el código de la tecla pulsada
16.3.1. Ejercicio 16.3.1
16.3.2. Ejercicio 16.3.2
16.4. Sumar números introducidos por teclado
16.4.1. Ejercicio 16.4.1
16.5. Uso del teclado para elegir opciones de ejecución
16.5.1. Ejercicio 16.5.1
16.6. Ejercicios propuestos
16.6.1. Ejercicio 16.6.1
16.6.2. Ejercicio 16.6.2
16.7. Resumen
17. Teclado y visualización en x86
17.1. Salida de caracteres y secuencias de caracteres
17.1.1. Ejercicio 17.1.1
17.1.2. Ejercicio 17.1.2
17.1.3. Ejercicio 17.1.3
17.2. Mostrar el código de la tecla pulsada
17.2.1. Ejercicio 17.2.1
17.3. Ejercicios propuestos
17.3.1. Ejercicio 17.3.1
17.3.2. Ejercicio 17.3.2
17.4. Resumen
18. Introducción de retardos
18.1. Calcular el tiempo de ejecución de las instrucciones
18.1.1. Ejercicio 18.1.1
18.2. Creación de una rutina de retardo
18.2.1. Ejercicio 18.2.1
18.3. Uso de la rutina de retardo del sistema
18.3.1. Ejercicio 18.3.1
18.3.2. Ejercicio 18.3.2 (8086)
18.4. Visualización temporizada de datos
18.4.1. Ejercicio 18.4.1
18.5. Ejercicios propuestos
18.5.1. Ejercicio 18.5.1
18.5.2. Ejercicio 18.5.2
18.6. Resumen
19. Uso del PPI
19.1. Configuración de los puertos del PPI
19.1.1. Ejercicio 19.1.1
19.2. Envío de datos a través del PPI (iluminación de leds)
19.2.1. Ejercicio 19.2.1
19.2.2. Ejercicio 19.2.2
19.3. Lectura de datos del PPI (microinterruptores)
19.3.1. Ejercicio 19.3.1
19.3.2. Ejercicio 19.3.2
19.4. Ejercicios propuestos
19.4.1. Ejercicio 19.4.1
19.4.2. Ejercicio 19.4.2
19.4.3. Ejercicio 19.4.3
19.5. Resumen
20. Interrupciones
20.1. Rutinas de atención a interrupciones
20.1.1. Ejercicio 20.1.1
20.2. Resumen
A. Soluciones a cuestiones y ejercicios
A.1. Respuestas y soluciones para el capítulo 7
A.2. Respuestas y soluciones para el capítulo 9
A.3. Respuestas y soluciones para el capítulo 10
A.4. Respuestas y soluciones para el capítulo 11
A.5. Respuestas y soluciones para el capítulo 12
A.6. Respuestas y soluciones para el capítulo 13
A.7. Respuestas y soluciones para el capítulo 14
A.8. Respuestas y soluciones para el capítulo 15
A.9. Respuestas y soluciones para el capítulo 16
A.10. Respuestas y soluciones para el capítulo 17
A.11. Respuestas y soluciones para el capítulo 18
A.12. Respuestas y soluciones para el capítulo 19
A.13. Respuestas y soluciones para el capítulo 20
Índice alfabético
Una parte fundamental de las asignaturas relacionadas con el estudio de la arquitectura y tecnología de computadores es la relativa a la programación de microprocesadores, para lo cual se utiliza el lenguaje ensamblador, que permite apreciar las diferencias existentes entre los denominados lenguajes de alto nivel, como C o Pascal, y uno simbólico o de bajo nivel como es el lenguaje ensamblador. La Estructura y Tecnología de Computadores es una materia de estudio obligado para cualquier profesional de la informática, actual o futuro. Con este manual conocerá la arquitectura básica de los microprocesadores y aprenderá a utilizar el conjunto de instrucciones de estos micros para implementar todo tipo de ejercicios, desde los más simples hasta programas que ordenan listas de datos o interactúan con circuitos externos.