You are on page 1of 291
33012 Bdsico Alberto Rojas Ponce mparz, e & Acerca del autor: Alberto Rojas Ponce es consultor especializado en las éreas de disefio de controladores embedados, programacién de bajo nivel y sistemas operativos © 1993 Alberto Rojas Ponce © 1995 ALFAOMEGA GRUPO EDITOR, S.A. de C.V. Apartado Postal 7-1032, 06700 México, DF. Miembro de la Camara Nacional de la Industria Editorial Registro No. 2317 ISBN 970-15-0098-9 Derechos reservados, é Esta obra es propiedad intelectual de su autor y los derechos de publicacién en lengua espafiola han sido legalmente transferidos al editor. Prohibida su reproduccién parcial o total por cualquier medio, sin permiso por escrito del propietario de los derechos del copyright. NOTA IMPORTANTE La informacién contenida en esta obra tiene un fin exclusivamente di- dactico, y por lo tanto, no esta previsto su aprovechamiento a nivel pro- fesional o industrial. Las indicaciones técnicas y programas incluidos, han sido elaborados con gran cuidado por el autor y reproducidos bajo estrictas normas de control. ALEAOMEGA GRUPO EDITOR, S.A. de C.V. no ser juridicamente responsable por: errores u omisiones; dafios y perjuicios que se pudieran atribuir al uso de la informacién compren- dida en este libro, y en el disquete adjunto, ni por la utilizacién indebida que pudiera dérseles. Impreso en Colombia Agradecimientos Este libro no hubiera nacido sin el impulso y paciencia ofrecida por mi familia y por la editorial. Mi agradeci- miento a dos personas en especial, ambas jugaron un papel importante en la creacién de este libro. En primer lugar a mi mujer, Carmen (sin olvidar a mis gemelos Al- berto y Andrés), cuya paciencia, comprensién y aguante durante muchas noches de desvelo ha sido inspiracio- nal y sin cuyo apoyo jamés habria iniciado y mucho me- nos terminado el libro. A mi editor, el Sr. Gonzalo Ferreyra el cual virtié infinidad de horas y de experien- cia con una paciencia casi inagotable, su apoyo fue de- terminante. Finalmente, a todas las personas que se involucraron en la formacion del libro, gracias. Alberto Rojas Ponce I los nombres comerciales que aparecen en este libro son marcas registradas de sus propietarios y se mencionan tinicamente con fines didécticos, por lo que, Computec Editores, S.A. de C.V. no asume ninguna responsabilidad por el uso que se dé a esta informacién, ya que no infringe ningxin derecho de registro de marca. n de esta obra: Colaboraron en la edi Edici6n Gonzalo Ferreyra Cortés Martha E. Figueroa José Luis Rocha Dominguez Disefio y diagramacion Noreen Luz Delgado Miguel Angel Ferreyra Cortés Producci6n Guillermo Gonzdlez Dorantes Macrodisefio Editorial, S.A. de C.V. Prdlogo 1 lenguaje ensamblador ha sido una herramienta de de- sarrollo altamente criticada pero a la vez alabada. Sus criticos arguyen la complejidad de programacién y su inje- rencia en él tiempo de desarrollo de sistemas, mientras sus seguidores se desbordan en alabanzas de su flexibilidad asi como el sentimiento de poderio y conocimiento que éste ofre- cea aquéllos que se atreven a aventurar mas alla de la super- ficie de un lenguaje de programacién. Con la creacién de lenguajes definidos como “XBASE Compatibles” y otros similares, el desarrollo de sistemas se ha facilitado enormemente. Sin embargo, lenguajes tales co- mo COBOL, PASCAL, C, MODULA, BASIC y FORTRAN (entre otros) son herramientas alternas de desarrollo que de alguna forma dan mayor flexibilidad y control, sobre todo a las personas que se encuentran inmersas en las técnicas de programacién. La mayoria de los programadores de hoy en dia usan uno de estos lenguajes en su trabajo, pero, por mucha flexibilidad que dichos lenguajes ofrezcan es inevitable que en ocasiones tengan severas restricciones para implementar un proceso determinado. Este puede ser un manejador de dispositivos, una rutina cuyo tiempo de ejecuci6n es vital, cuando se desea invocar alguna funcién interna de DOS 0 del BIOS, o necesita accesar alguna localidad especifica de la memoria y dicho lenguaje no tiene los mecanismos que permitan hacerlo. Es en estos momentos cuando los programadores recurren al lenguaje ensamblador. La verdad finalmente, es que si desea eficientar, optimizar, afinar 0 profundizar en el conocimiento interno de su PC, el 7 8 Prélogo lenguaje ensamblador es la eleccién adecuada, al igual que este libro. Ensamblador Basico lo guiard paso a paso dentro del mundo del lenguaje ensamblador, proporcionandole las ba- ses tedricas y la practica para poder seguir adelante con ma- terial mas avanzado. La metodologia de ensefianza usada es descendente; es de- cir, se parte del concepto general y se va explorando cada uno de los sub-conceptos hasta llegar al detalle. Esto se en- cuentra plenamente identificado desde el capitulo 1. Cada uno de los capitulos se ilustra con ejemplos practicos y casos reales. El libro contiene como temas principales : * Una guia rapida sobre lenguaje ensamblador presentada en forma sencilla y practica, que cubre ademas lo esencial sobre el debugger (herramienta de depuracién) para que pueda probar en forma inmediata el cédigo que se presenta. * Una cobertura amplia del hardware de la PC incluyendo diagramas y explicaciones de su funcionamiento en un lenguaje sencillo de asimilar. * Programas claros y objetivos para ilustrar la teoria en cada uno de los capitulos. * Tips sobre el uso del ensamblador, el enlazador, el make y el debugger. * Presentaciones graficas del proceso de cada instruccién para ampliar su panorama de operacién. Este texto sera de gran utilidad a los usuarios de compu- tadoras personales que tengan interés en conocer el funcio- namiento interno de la memoria, los discos y en general de la PC; asi como para todos los estudiantes de carreras relacio- nadas con la computacién o licenciaturas en ramas adminis- trativas o cientificas, que debido a su especializacién deban adentrarse en el mundo de la informatica. El editor Contenido Prélogo 7 Introducci6n W Primera parte Fundamentos de programacién en lenguaje ensamblador i iW Panorama 1.1 El lenguaje ensamblador 19 general de la 1.2 Ventajas del lenguaje ensamblador 19 PCy del 1.3 Bits y bytes 21 lenguaje 1.4 Representacién de los datos en la PC 30 ensamblador 1.5. Modelo de la operacién interna de una PC 33 1.6 Guia répida del lenguaje ensamblador 37 Elhardwarede 2.1 Componentes bisicos. 61 laPc 2.2 La unidad central de procesamiento (CPU) 69 2.3 Los registros de la CPU 75 2.4 Modalidades de direccionamiento 79 25 Lapila 83 E EF Programacién 3.1 Herramientas necesarias para programar formal en en ensamblador 87 ensamblador 3.2 Cémo ejecuta los programas el DOS OL 3.3. Formato del programa fuente 94 3.4 El proceso formal de ensamblaje 103. 3.5 Tipos de instrucciones 106 9 10 Contenido Segunda parte Las nes para programar en ensamblador Instrucciones 4.1 Moviendo datos con respecto a la memoria 115 de operacién 4.2 Moviendo direcciones a los registros 123 sobre datos 43. Administrando la pila 125 4.4 Moviendo bloques de datos 129 45 Trabajando con los puertos 134 a ) ~ Instrucciones 5.1 Instrucciones aritméticas 139 légicas y 5.2 Instrucciones de comparacion, légicas y aritméticas de manipulacién de bits 149 53 Definiendo datos y almacenamiento 159 5.4 Resumiendo las instrucciones en un programa 163 3 VA Las 6.1 Transferencia de control no condicionada 177 instrucciones 6.2 Transferencia de control condicionada 181 para control de Procesos ite} Tercera parte Técnicas progra Macros e 7.1 Las macros, su definicién y sus aplicaciones 197 interrupciones _7.2: Interrupciones 206 Trabajando 8.1 Formas de operacién sobre archivos 243 con archivos Glosario 287 Indice. 293 Introduccion E nsamblador Basico es la puerta al interior de la PC; el principio de lo que se puede realizar con el lenguaje en- samblador. Se encuentra especialmente disefiado para pro- porcionar las bases tedrico-practicas que le permitiran mas adelante programar el hardware (Video, teclado, discos, puertos etc.), reconocer y utilizar la memoria del BIOS, apro- vechar las estructuras internas de DOS, afinar y dominar el uso del debugeador CodeView y mucho mas! Este libro se basa en los productos de Microsoft®: El Macro Ensamblador (el término usado para referirse a este producto sera MASM), el Enlazador (al cual nos referiremos como LIN- KER) y el debugeador 0 DEBUGGER. Para lograr una mejor organizacién que permita el estudio del ensamblador en una secuencia légica de aprendizaje, este libro se ha dividido en tres partes: Primera parte - Fundamentos de programacién en lenguaje ensamblador. Esta primera parte es una guia rapida del lenguaje ensambla- dor y es mds que adecuada para satisfacer las necesidades de cualquier programador principiante. Elcapitulol Un panorama general de la PCy del lengua- je ensamblador inicia con una explicacion de lo que es el len- guaje ensamblador y sus aplicaciones, sigue con el polémico tema de definir la importancia de saber el cudndo, cémo y porqué usar el lenguaje ensamblador, y da el concepto de la VW 12 Introduccion definicién y operacién de bits y bytes, asi como la forma en que se almacenan los digitos y el texto en la computadora. Para poder relacionar en forma mis clara la actividad del lenguaje ensamblador y su injerencia en las operaciones in- ternas de la PC, se presenta un modelo de la operacién de la misma a nivel lenguaje de maquina. Una vez que se encuentre familiarizado con la operacién interna se explora el uso del lenguaje ensamblador codifican- do sus primeros programas. Esto con el propésito de darle un panorama general del lenguaje y la operacin de la PC. En el capitulo 2 El hardware de la PC se detalla como se encuentra configurada la computadora, asi como su funcio- namiento interno. Se inicia estudiando sus componentes ba- sicos y una vez comprendido lo anterior se encontrar listo para adentrarse al cerebro 0 CPU de la computadora, que es el microprocesador 8086 de Intel. Es importante notar que, aunque no se hace referencia a los otros procesadores como el 80286, 80386, 80486 y el Pen- tium u 80586, todo lo tratado en este libro es directamente aplicable a ellos (pudiera ser que existan diferencias para el Ultimo, ya que actualmente esta en etapa inicial de comercia- lizacién). Conociendo en términos generales la operacién de la PC asi como en detalle su cerebro, se vera la organiza- cién de la memoria y cémo se encuentra constituida 16- gicamente. El capitulo 3 Programacién formal en ensamblador pro- porciona las herramientas y por ende las bases para la crea- cin de programas fuente del lenguaje ensamblador. Aunque existen en el mercado diferentes ensambladores, este libro se basa en el mds popular; El Macro Ensamblador de Microsoft, MASM. Se inicia con una introduccién a cada una de las herra- mientas necesarias para la creacién de programas en lengua- je ensamblador y se da un panorama general de como son ejecutados los programas por DOS. Se prosigue con la definicién formal y el esqueleto basico de los programas en ensamblador; es importante tener un pa- norama general de cual es el proceso de ensamblar y cémo se realiza, esto se ve desde el punto de vista de la operacién del MASM. Se explica cuales son los diferentes tipos de direcciona- miento de la memoria y finalmente se distingue entre los di- ferentes tipos de instrucciones existentes. Introduccién 13 Segunda parte - Las instrucciones para programar en ensamblador. Se detalla el conjunto de instrucciones necesarias para pro- gramar en lenguaje ensamblador haciendo énfasis en la apli- Cabilidad de cada instruccién; es decir, cmo, cuando y porqué se usa. Se presentan ejemplos practicos del uso de ca~ da instruccién, asi como de un conjunto de instrucciones pa- ra ver su aplicacién en términos reales a través de programas concretos. Elcapitulo 4 Instrucciones de operacién sobre datos am- plia el panorama de las instrucciones que se encargan de ope- rar sobre el traslado de datos de o hacia la memoria, direcciones, la administracién de la pila y el traslado de o ha- cia la memoria de grandes bloques de datos. Enelcapitulo5 Instrucciones ldgicas y aritméticas se tra- tan las instrucciones necesarias para realizar operaciones de suma, resta, divisién y multiplicacién de variables enteras. También, explica el uso de la aritmética BCD, instrucciones de comparacién (de valores, bits y cadenas), instrucciones 16- gicas que operan sobre bits y finalmente instrucciones de mani- pulacién de bits tales com6 las rotaciones y desplazamientos. El capitulo 6 Las instrucciones para control de procesos ensefia cémo realizar transferencias de control a otras partes del programa, ya sean condicionales o incondicionales. Da la pauta para comprender y eficientar el uso del lenguaje en- samblador a través de igualdades, definiciones de bytes, pa- labras, dobles palabras, quadruples palabras y la asignacion de espacio para diferentes tipos de estructuras. Tercera parte - Técnicas de programacién. Después de haber cubierto las bases del ensamblador en de- talle, se encontrar listo para profundizar en sus aplicacio- nes. En esta parte se realiza a través de las técnicas de programaci6n tales como: la ampliacién sobre el lenguaje a través de la programacién de Macros, el acceso al sistema operativo y el BIOS en forma basica y la manipulacién de ar- chivos. El capitulo 7 Macros e interrupciones le permitiré utili- zar herramientas poderosas para generar cédigo claro y con- ciso usando la tecnologia de macro-substitucién. También 14 Infroduccién comprenderé la columna vertebral de toda computadora, las interrupciones del BIOS y DOS para controlar las diferentes capas de hardware y software de la misma. Enel capitulo 8 Trabajando con archivos se detalla la for- ma en que el DOS opera sobre los archivos, cuales son las téc- nicas de acceso, c6mo se controlan y actualizan. Se verén las diferentes formas de manipulacién de archivos usando FCB’s y Handles. Primera parte Fundamentos de programacion en lenguaje ensambladcor Panorama general de la PC y del lenguaje ensamblador ee Objetivos: v¥ Proporcionar las bases sobre: e La estructura de bits y bytes e Sistemas numéricos decimal, binario y hexadecimal e Representaci6n de informacién en la PC * Funcionamiento interno de una PC e El uso de herramientas como el debugger ¥ \ntroducir de una forma sencilla y practica al aprendizaje de la programaci6én en lenguaje ensamblador Aprendera a: ” Diferenciar entre bits. bytes y nibbles, y cOmo son usados por la PC Y¥ Operar sobre las diferentes bases numéricas mds comunes ¥ Distinguir como es representada la informacién en la PC ¥ Comprender el mecanismo basico que usa la PC para ejecutar programas ¥ Desarrollar programas sencillos en lenguaje ensamblador ¥ Usar un depurador de programas 1.1 Ellenguaje ensamblador 19 E Wietvs de esta primera parte es convencer al lector de que el esfuerzo invertido en estudiar y aprender el len- guaje ensamblador realmente vale la pena. Consideramos esencial que conozca usted los conceptos generales del lenguaje ensamblador antes de profundizar en los detalles. Para ello se incluye una guia rapida (en la sec- cidn 1.6) mediante la cual podra empezar a programar direc- tamente en este lenguaje, usando una herramienta de soporte como el Debugger (nombre del programa depurador). Sin embargo, ante todo veamos qué es el lenguaje ensamblador, cuales son sus ventajas y desventajas, y repasemos o apren- damos algunos aspectos basicos. 1.1 El lenguaje ensamblador El ensamblador es una variante legible para el ser humano— del lenguaje de maquina que usan las computadoras para ejecutar programas. Al mismo tiempo es la mejor manera que tiene usted de comunicarse con la PC (también conocida co- mo microcomputadora) y con el lenguaje de programacién que utilice. Si antes de adentrarnos en el estudio del hardware analizamos lo que es el ensamblador, tendré usted un pano- rama més amplio de como funciona la PC. Este lenguaje le da la facilidad y las herramientas necesarias para que tome us- ted control de todo lo que la PC puede realizar fisicamente. El ensamblador resulta indispensable cuando se desea escri- bir programas que controlen la entrada /salida de la PC, agre- gar nuevas interfaces de entrada/salida, escribir rutinas optimizadas de un procedimiento en especial, escribir ruti- nas que aprovechen y maximicen el uso del hardware, y en ge- neral realizar cualquier tarea que no puedan Ilevar a cabo los demés lenguajes de programacién. 1.2 Ventajas del lenguaje ensamblador Aunque cualquier lenguaje de programacién ofrece facilida- des para realizar determinadas tareas, ninguno proporciona un control absoluto sobre la PC, ni informacién fundamental de lo que sucede mientras el programa se ejecuta. Si nunca ha trabajado con el ensamblador, se preguntar por qué no usar Basic, Pascal, Clipper, Modula o C. Existen varias razones que justifican el uso del ensamblador en lugar de otros lenguajes. La primera es que el ensamblador le brin- da la oportunidad de conocer mas a fondo la operacién de su 20 Panorama general de la PC y del lenguaje ensamblador Tabla 1.1 La cantidad de bytes de los archivos ejecutables siempre es mayor que la de los Programas “fuente”. Observe cémo en el caso del ensamblador No crece demasiado. PC. Esto le permite implementar software o hardware de una manera mas consciente (comprendiendo cémo y por qué lo hace), en vez de seguir una receta fija. La segunda raz6n es que conserva usted el control total de lo que deberd hacer su PC, siempre y cuando ésta sea fisica- mente capaz de hacerlo. La tercera es que los programas en ensamblador son més rdpidos, mas compactos y tienen ma- yor capacidad que los creados en otros lenguajes. La cuarta razon, quiza la mas importante, es que puede us- ted optimizar al maximo sus programas (tanto en tamaiio co- mo en velocidad de ejecucién). En el caso de otros lenguajes ya existe cédigo que se genera de manera predefinida, hacien- do muy dificil su optimizacién. A continuacién se presenta una tabla que indica los tamajios de los archivos (fuente, objeto y finalmente el ejecutable) creados por diferentes compiladores. No se estén comparando las velocidades de ejecucién, aunque si tomamos en cuenta el tamajio del programa ejecutable (cuya extensin es .EXE), es obvio que mientras mas grande sea éste, su ejecuci6n sera mas tardada debido al tiempo necesario para cargarlo. La Tabla 1-1 presenta el tamaiio de los programas muestra que se usaron en tres diferentes lenguajes: BASIC, Clipper y Ensamblador. El programa muestra desplegard la siguiente cadena: “Hola, que tal.” | Tenguaje Fuente Objeto Ejecutable (.EXE) Basic 2 bytes 651 bytes 12814byles Clipper bytes 572 bytes 159 178 bytes Ensamblador | 162bytes 169 bytes 543 byes, Comandos usados para PDS BCIO Prueba =1; LINK Prueba 01, , nul, boom45; Comandos usados para Clipper version 5.2 CLIPPER Prueba 02 -m LINK Prueba02, , nul, Clipper Extend; Comandos usados para MASM 5.1 Masm Prueba03; Link Pruebao3 El programa en lenguaje ensamblador se detalla a conti- nuaci6n:

You might also like