Bienvenido
Esta es la página inicial de Abre los Ojos al Ensamblador. Hace años inicié mi camino de aprendizaje del lenguaje ensamblador, prácticamente desde el nivel cero. Iba tomando notas y, al cabo de un tiempo, me pregunté si no le interesaría a alguien. Fue así como nació y creció AOE. Espero que te guste.
Important information for English readers:
|
There are many interesting things on assembly programming in this site. From basic concepts and debugging techniques, MS-DOS and Windows programming, up to more difficult tasks such as queues, stacks, trees, recursion, memory management, TSRs, graphic animations, sound, games like tetris or Space Invaders, etc. There are 37 chapters plus 11 appendixes and many many examples. Please, take a look. The original text is in Spanish, but there are already several of them translated to English. In the yellow task bar at the top of each page you can find a Britain flag that will link you to the translated page. Good fun!.
- Chapters translated from Spanish to English:
01
02
03
04
07
08
13
17
19
20
26
27
29
30
31
33
34
35
- Appendixes.
A
B
C
D
E
F
G
H
I
J
K
- Forum. I have made it on my own using Notepad++ and ConTEXT. Here you can find the AOE libraries in its homonymous section. You are invited to participate in it, but AOE has no support and surely I will not answer questions. I hope that you like it.
- 29th of January 2012. I have corrected some things in chapter 01.
- April 2, 2011. I have added direct access link to 7zipped downloable book.
|
A lo largo de todo el libro podrás encontrar comentarios y observaciones importantes sobre mis propias experiencias en la programación en ensamblador, así como ejemplos de depuración que llevé a cabo, bien para entender el funcionamiento de un programa o para depurarlo. De tal modo que creo que pueden resultar interesantes para ti también. Todos los temas de estudio del libro están aderezados con abundantes ejemplos, que son de los que yo me he servido para aprender.
Veamos a continuación una breve descripción de cada capítulo:
- Capítulo 01. Generalidades. Aquí se vierte información genérica, no específica del lenguaje ensamblador. Se habla de los sistemas numéricos, tales como el decimal, binario, octal y hexadecimal, la conversión entre ellos, su representación y operaciones matemáticas. Tipos de datos: byte, word, dword, qword, real, etc. Los registros. La organización de la memoria. La segmentación. Programas de tipo COM y EXE y sus diferencias. Diferencias entre los compiladores NASM, FASM y MASM.
- Capítulo 02. Hola mundo. Aquí comenzamos a programar en ensamblador con un sencillo ejemplo. El clásico "hola mundo", tanto para COM como para EXE y para cada uno de los tres compiladores MASM, NASM y FASM. Discutimos además sobre la segmentación de datos y de código. Todo ello con ejemplos y siguiendo el flujo del programa con el depurador DEBUG para una mejor comprensión.
- Capítulo 03. Datos. Vemos los distintos tipos de datos en ensamblador y cómo se definen: constantes, caracteres, bytes, word, double word, qword, reales, cadenas de caracteres y su representación en pantalla. Y comenzamos a ver los tipos de datos complejos: matrices, estructuras, punteros, punteros a estructuras, punteros a matrices, matrices de punteros, punteros a punteros, estructuras de punteros, estructuras anidadas, uniones, campos de bits, etc.
- Capítulo 04. Saltos. Aquí estudiamos el control de flujo del programa. Hablamos sobre las direcciones cortas, cercanas y lejanas. Qué son y cómo se definen las etiquetas. Los tipos de saltos en función de su longitud. Las banderas. La toma de decisiones. Bucles.
- Capítulo 05. Procedimientos. Se estudia las utilidades de la directiva PROC en MASM, el resguardo de registros en el procedimiento como método de seguridad. Los parámetros y las diferentes formas de pasarlos a la rutina. Cómo definir variables locales mediante el uso de la pila. Etiquetas locales. Llamadas lejanas. El apartado dedicado a las macros aún no se ha terminado, está dentro de la lista de tareas.
- Capítulo 06. Aritmética. Aquí se estudian las operaciones matemáticas tales como la suma, resta, multiplicación, división, INC, DEC, rotaciones y desplazamientos, extensiones de signo. También veremos los datos BCD empaquetado y desempaquetado y números ASCII. Las operaciones matemáticas con números grandes. El coprocesador y ejemplos de uso.
- Capítulo 07. Datos (2). Se estudian ejemplos de instrucciones comunes de manejo de datos tales como LODS, STOS, etc. Posteriormente veremos métodos de ordenación y búsqueda tales como la burbuja y ordenación rápida, por una y múltiples claves, así como de forma indexada. Para una mejor comprensión estudiaremos un ejemplo del trabajo de un programa en una ordenación. Veremos la búsqueda lineal y binaria, también la indexada. Buscaremos datos numéricos, fonemas semejantes, etc. A continuación estudiaremos las colas y pilas tanto simples como dobles y circulares. También veremos árboles y ejemplos de uso tales como la ordenación de datos con un árbol binario, la descomposición en factores primos, etc.
- Capítulo 08. La pantalla. Daremos un rápido repaso a conceptos básicos, tales como los componentes de la tarjeta de vídeo, la paleta gráfica y el color, el retrazo horizontal y vertical, los modos y las páginas de vídeo, y las interrupciones BIOS y DOS ya preparadas para trabajar con la tarjeta gráfica. Miraremos el método de la escritura directa en memoria de vídeo que incrementa la velocidad sobre las interrupciones, aunque es menos estándar. Finalmente veremos algunos ejemplos gráficos en modo texto: copper bar, foco, caleidoscopio, tetris y un ejemplo de depuración.
- Capítulo 09. El teclado. Cuál es la distribución del teclado y su área de datos. El búfer del teclado y los códigos scan, ejemplos. Ejemplos para la interrupción 21h del MS-DOS y para la 16h de la BIOS. Ejemplo de representación del teclado y pulsación de múltiples teclas en pantalla.
- Capítulo 10. Ficheros. Daremos un rápido repaso a definiciones básicas de los ficheros así como su estructura física y operaciones BIOS y DOS ya en desuso para los ficheros. Funciones handle del MS-DOS para el control de ficheros, estructura de la DTA. Funciones de búsqueda de ficheros y funciones avanzadas de MS-DOS para ficheros. Los buffers de archivos. Los diferentes métodos de acceso a ficheros: método secuencial, aleatorio y binario. Creación, apertura, escritura, lectura y cierre de un fichero. Volcar el contenido de un fichero a la pantalla.
- Capítulo 11. Interrupciones. Polling versus interrupciones. Interrupciones internas, de hardware y software. Localización de interrupciones. Proceso de una interrupción. Tabla de interrupciones del sistema. ISRs. Gestión de interrupciones. Interrupciones para la gestión de interrupciones. Métodos para la gestión de interrupciones. Ejemplos: Reloj en tiempo real, muestra el teclado, hora y fecha actuales, nuestra propia ISR, buscar interrupción. Interrupción Multiplex.
- Capítulo 12. Memoria. Gestión de la memoria. Mapa de la memoria del MS-DOS. Tipos de memoria: convencional, área de memoria superior, ROM y RAM, memoria expandida, bloques de memoria superior, ROM Shadowing, área de memoria alta, memoria extendida, memoria caché, memoria CMOS RAM. Bloques de memoria y sus tipos. Liberar el espacio de entorno en programas residentes. Redimensionamiento de un bloque de memoria. Asignar espacio de memoria. Llamada a subprocesos y recubrimientos u overlays. Carga y ejecución de subprogramas. Carga y ejecución de overlays. TSRs. Interrupciones implicadas, clasificación de los TSRs, problemas: el DOS no es reentrante, la BIOS tampoco, acciones críticas en tiempo, tamaño y velocidad, reinstalación y desinstalación, activación retardada, preservar el contexto. Ejemplos de TSRs: reloj, protector de pantalla. Definir una pila en la parte residente, cambio del PSP activo, cambio de la DTA. Problemas con la reentrada al MS-DOS. Los indicadores InDOS y ErrorMode. Gestión de errores críticos. La CMOS. Memoria extendida y superior. DMA.
- Capítulo 13. Recursividad. Ejemplos de definiciones recursivas: los números naturales. Recursividad algorítmica y de datos. Recursividad de cola con y sin parámetros. Recursividad interna con y sin parámetros. Recursividad en datos. Cuando usar y cuando no usar la recursividad. Algoritmos de rastreo inverso: el problema de las ocho reinas.
- Capítulo 14. Impresora. Operaciones básicas de interrupción. Caracteres comunes. Ejemplos.
- Capítulo 15. El ratón. Definiciones básicas del ratón. Operaciones comunes. Métodos de control. Otras funciones interesantes.
- Capítulo 16. El joystick. Breve historia. Estructura del joystick. Conector. Funciones BIOS. Lectura directa del puerto de juegos. Este capítulo falta por desarrollar, sólo tiene las definiciones básicas. Aunque está en la lista de tareas, no es probable que lo acometa.
- Capítulo 17. El tiempo. Métodos para el control de tiempo: usando interrupciones, accediendo al la información de la BIOS, interceptando la interrupción 1Ch/08h, usando el refresco de la pantalla. Multiretardo. Programación del PIT. Cómo programar el canal 0 a una frecuencia diferente. Otra forma de usar el PIT.
- Capítulo 18. El sonido. Problemas con el sonido. Funcionamiento del altavoz del PC: control directo y mediante el temporizador. Notas musicales, melodías de fondo. Música digital por el altavoz. Ficheros de sonido digital. Trackers. La Sound Blaster está en la lista de tareas pendientes.
- Capítulo 19. Interfaces del ensamblador con lenguajes de alto nivel (HLL). Veremos interfaces del ensamblador con el pascal, c y basic. Para ello usaremos los compiladores turbo pascal, turbo c, quick basic, así como Virtual Pascal, Free Pascal, Pelles C, Tiny C, Rapid QBasic, Visual Basic. Haremos multitud de ejemplos para probar el ensamblador embebido en cada uno de los compiladores y el acceso a rutinas externas en ensamblador desde el lenguaje de alto nivel. Probaremos también el uso de rutinas internas del lenguaje de alto nivel dentro del código ensamblador, así como el paso de parámetros entre las rutinas de los diferentes compiladores asm/hll. Ejemplo de juego del ahorcado en cada compilador. Creación de quick libraries en Quick Basic. División de un proyecto de ensamblador en módulos, compilación de una biblioteca en ensamblador y su uso.
- Capítulo 20. Programación Windows. En este capítulo podemos encontrar cómo instalar los paquetes necesarios de FASM, NASM y MASM32. Empezaremos a aprender a programar en ensamblador para Windows desde un nivel básico, incrementándolo, cubriendo aspectos básicos de la programación sobre Windows con ejemplos, tales como programa de consola Windows, Messagebox, ventana básica con y sin fichero de recursos (interno y externo). Escribir texto en la ventana, hiperenlace, pintar en una ventana, usar el temporizador, usar bitmaps, búferes, crear objetos en una ventana: agrupadores, botones, checkboxes, radiobotones, etc. Cómo incluir información en un fichero de recursos. Customizar el cursor al pasar sobre un botón. Botones de doble imagen. Creación de menúes. Creación de toolboxes. Abrir y cerrar ficheros. Crear dlls.
- Capítulo 21. Programación Linux. Está dentro de la lista de tareas.
- Capítulo 22. Programación gráfica. Algunas definiciones: pixel, profundidad de color, búfer de vídeo, paleta de colores, organización de la memoria en modo 13h, modos gráficos, razón de aspecto.
- Capítulo 23. Líneas gráficas. Ecuación de la pendiente, algoritmo de Bresenham, recorte, algoritmo de Sutherland-Cohen. Ejemplos y depuración.
- Capítulo 24. Rectángulos. Rectángulos y razón de aspecto.
- Capítulo 25. Elipses. Elipses, algoritmo del punto medio, círculos y razón de aspecto, algoritmo incremental. Algoritmo para dibujar circunferencias y elipses. Ejemplos.
- Capítulo 26. Regiones. Definición de región. Pixels del interior y del borde. Conectividad. Algoritmo de rellenado de regiones.
- Capítulo 27. La paleta gráfica. Qué es la paleta, leer de la paleta, modificarla. Evitar las interferencias. Ejemplos: colores de la paleta estándar, mezcla de colores RGB, fade in/out, rotación de paleta.
- Capítulo 28. Formatos gráficos. RAW, PCX, BMP. Ejemplos de carga a tamaño completo e inferior a 320x200.
- Capítulo 29. Pantallas virtuales. Definición. Pantalla virtual en 13h. Ejemplos.
- Capítulo 30. Texto en modo gráfico. Fuentes del sistema. Soporte de la BIOS. Caracteres por defecto en la VGA. Generador de caracteres software. Manipulación de pixels. Recorte. Ejemplos: fuentes 8x8 y 8x16 y de usuario.
- Capítulo 31. Seno y coseno. Razones trigonométricas. Metodología. Regla de cálculo. Ejemplo: espiral.
- Capítulo 32. Fractales. Definición de fractal. Dimensión de Hausdorff-Besicovitch. Fractales lineales: polvo de Cantor, Triángulo de Sierpinkski, Curva de Koch, Curvas de Hilbert. Fractales no lineales o complejos: Conjunto de Julia y de Mandelbrot. Caos: diagrama de bifurcación, atractor de Lorentz. L-Systems. Ejemplos: Plasma fractal, fuego fractal, generador de terrenos, nubes.
- Capítulo 33. Animación. Operaciones de pixel bit a bit: xor, not, and, or. El teclado, doble, triple y n-buffering. Teselado de bloques de bits. Animación. Restaurar el fondo.
- Capítulo 34. Ejemplos gráficos. Volcar la pantalla a BMP. Rebote. Bump mapping. Curva de Ceva. FeedBack. Lupa. Nieve: árboles de Navidad, Snowfall demo. Plasma dinámico. Lluvia. Shade bob. Sprite. Suelos.
- Capítulo 35. Space invaders. Diferentes métodos usados en el ejemplo del Space Invaders: recogiendo BIOS-ticks, interceptando Int 1Ch, usando PIT-counter0, leyendo el contador del canal 0 del PIT. Con música de fondo.
- Capítulo 36. Introducción a la 3D. Está en el horno.
- Capítulo 37. Ejemplos en 3D. Está dentro de la lista de tareas.
- Apéndice A. Caracteres ASCII. Tabla de los caracteres ASCII y programa que lo muestra.
- Apéndice B. Tabla de saltos. Nemotécnicos de los saltos.
- Apéndice C. Uso del depurador DEBUG. Pequeño tutorial del programa DEBUG con ejemplos.
- Apéndice D. Área de datos de la BIOS. Pequeña muestra del área de datos de la BIOS.
- Apéndice E. Puertos IN/OUT. Pequeño listado de puertos IN/OUT.
- Apéndice F. Códigos scan del teclado.
- Apéndice G. Optimizaciones. Algunos consejos para optimizar nuestros programas.
- Apéndice H. El MS-DOS. Pequeño tutorial de uso del MS-DOS o de la ventana de comandos de nuestro Windows. Tutorial de uso de los archivos de script batch. Ejemplos.
- Apéndice I. Instrucciones del 8087 por orden alfabético.
- Apéndice J. Grandes proyectos en ensamblador.
- Apéndice K. Decálogo de buenas prácticas. Algunos consejos prácticos para hacernos la vida más sencilla a la hora de programar.
Última modificación: 2010-11-21