You are on page 1of 398
TERCERA EDICION LENGUAJE ENSAMBLADOR Y PROGRAMACION PARA PC IBM® y CoMPATIBLES anon) F eile al aca aA LENGUAJE ENSAMBLADOR Y PROGRAMACION PARA IBM® PC Y COMPATIBLES Tercera edicién Peter Abel British Columbia Institute of Technology TRADUCCION: Lic, Victor Hugo Ibarra Mercado Lic. en Fisica y Matematicas Coordinador Matematicas Aplicadas Escuela de Actuaria - Universidad Andhuac REVISION TECNICA; Prof. Raymundo Hugo Rangel Gutiérrez UNAM México:* Argentina * Brasil + Colombia * Costs Ria * Chile « Ecuador Espata * Guateruala* Panama + Peri * Puerto Rico * Uruguay *Venezucla PRE-PRESS/MANUFACTURING BUYER; BILL SCAZZERO ACQUISITIONS EDITOR: MARCIA HORTON ‘SUPERVISION AND INTERIOR DESIGN: RICHARD DeLORENZO Cory EDITOR: BRIAN BAKER EDITORIAL ASSISTANT: DOLORES MARS: SUPLEMENT EDITOR: ALICE DWORKIN ‘ABEL: LENGUAJE ENSAMBLADOR Y PROGRAMA CION PARA IBM PC ¥ COMPATIBLE (3a. ed.) ‘Traducido del inglés de: la obra: IBM®-PC ASSEMBLY LANGUAGE AND PROGRAMMING. All Rights Reserved. Authorized translation from English language edition published by Prentice Hall Ine, A Simon & Shuster Company. ‘Todos los derechos reservados. Traduccién autorizada de la edicién en inglés publicada por Prentice Hall Inc. ‘All Rights Reserved. No part of this book may be reproduced or transmitted in any form or by any means, electronic oF mechanical, including photocopying, recording or by any information storage and retrieval system, ‘without permission in writing from the publisher. Prohibida la reproduccidn total o parcial de esta obra, por cualquier medio o método, ‘sin la autorizacidn escrita del editor. Derechos reservados © 1996 respecto ala primera edicién en espafol publicada por PRENTICE-HALL HISPANOAMERICANA, S.A ‘Atlacomuleo Niim. 5005* Piso ‘Col. Industrial Atoto ‘52519, Naucalpan de Juirez, Edo. de México ISBN 968-880-708-7 ‘Miembro de Ia Camara Nacional de la Industria Editorial, Reg. Nim, 1524 Original English Language Edition Published by Prentice Hall Inc, Copyrigth © MCMXCV_ Contenido PREFACIO Parte A Fundamentos de hardware y software de Ia PC I INTRODUCCION AL HARDWARE DE LA PC Introduccién 1 Bits y bytes 2 Niimeros binarios 3 Representacién hexadecimal 6 Cédigo ASCH 7 El pracesador 7 Memoria interna 9 Segmentos y direccionamiento 10 Registros 13 Puntos clave 17 Preguntas 18 2 REQUERIMIENTOS DE SOFTWARE DE LA PC Introduccion 19 Caracterfsticas det sistema operativo 19 El proceso de arranque 20 Interfaz DOS-BIOS 21 Programa cargador del sistema 21 La pila (stack) 22 Direccionamiento de programas 24 Referencias a memoria y a registros 26 Pumios clave 26 Preguntas 27 3 EJECUCION DE INSTRUCCIONES Introduccién 28 El programa DEBUG 29 Visualizacién de las localidades de memoria 30 Ejemplo | de lenguaje de maquina: Datos inmediatos 32 Ejemplo II de lenguaje de miquina: Datos definidos 37 ‘Cémo introducir un programa simbélico en ensamblador 40 Uso de la instruceién INT 41 Cémo guardar un programa desde DEBUG 43 Ejemplo de lenguaje ensamblador: El operador PTR 44 Puntos clave 45 Preguntas 45 Parte B Fundamentos de lenguaje ensamblador 4 REQUERIMIENTOS DE LENGUAJE ENSAMBLADOR Introduccion 48 Ensambladores y compiladores 49 ‘Comentarios en lenguaje ensamblador 49 Palabras reservadas $0 Idemtificadores 50 Instrucciones 51 Directivas 52 (Cémo inicializar un programa para su ejecucién $5 (Cémo terminar la ejecucién de un programa $7 Ejemplo de un programa fuente 58 ‘Cémo inicializar el modo protegido 59 Directivas simplificadas de segmentos. 59 Definicién de datos 61 Directivas para ta definicién de datos 63 Ladirectiva EQU 68 Puntos clave 69 Preguntas 70 5 COMO ENSAMBLAR, ENLAZAR Y EJECUTAR UN PROGRAMA Introduccién 72 ‘Cémo preparar un programa para su ejecucién 73 (Cémmo ensamblar un programa fuente 73 ee Listado del ensamblador de las definiciones convencionales de segmentos 75 Listado del ensamblador de las directivas simplificadas de segmentos 79 Ensamblador de dos pasadas 79 Cémo enlazar un programa objeto 81 Como ejecutar un programa 83 Listado de referencias cruzadas 84 Diagnéstico de errores 85 Puntos clave 86 Preguntas 86 INSTRUCCIONES ¥ DIRECCIONAMIENTO DEL PROCESADOR 88 Introduccion 88 El conjumto de instrucciones de! procesador 88 Operandos 92 La instruccién MOV 95 Instrucciones para mover y Henar 96 ‘Operandos inmediatos 97 La instruccin XCHG 98 La instruccién LEA 99 Las instrucciones INC y DEC 99 Instrucciones de movimiento extendido 99 ‘La instruccién INT 101 AlineaciOn de direcciones 101. Direcciones cercana y lejana 102 Prefijo que invalida el segmento 102 Puntos clave 103 Preguntas 104 ESCRITURA DE PROGRAMAS .COM 106 Introduceién 106 Diferencias entre programas .COM y .EXE 106 Conversién a formato COM 107 Ejemplo de un programa COM 108 La pilade COM 109 Sugerencias para la depuracién 110 Puritos clave 110 Preguntas 111 LOGICA ¥ CONTROL DE PROGRAMAS u2 Introduccién 112 Direcciones corta, cercana y lejana 113 Etiquetas de instrucciones 113, La instruccién IMP 114 Lainstruccién LOOP 116 El registro de banderas 117 La instruceién CMP 118 Instrucciones de salto condicional 118 Llamada a procedimientos 121 Efectos en la pila de la ejecuciéin de programas 123 Operaciones booleanas 125 ‘Cambio de minisculas a mayiisculas 126 Corrimiento de bits 127 Rotaciin de bits (desplazamiento circular) 129 Tablas de bifurcacim 131 Organizacién de un programa 132 Puntos clave 134 Preguntas 135 Parte C — Operaciones para ta pantalla y el teclado 136 9 INTRODUCCION AL PROCESAMIENTO EN PANTALLA ¥ DEL TECLADO 136 Introduccién 136 La pantalla 137 Colocacién del cursor 138 Limpiar la pantalla 138 Funcién 09H del DOS para despliegue en pantalla 139 Funcién OAH del DOS para entrada del teclado 141 Como aceptar y desplegar nombres 142 Uso de caracteres de control para desplegar 146 Funcién 02H del DOS para despliegue en pantalla 147 Manejadores de archivos 148 Manejadores de archivo para despliegue en pantalla 148 Manejadores de archivo para entrada desde el teclado 149. Puntos clave 151 Preguntas 152 10 PROCESAMIENTO AVANZADO DE LA PANTALLA 133 Introduccion 153 ‘Adaptadores de video 154 Especificaciones del modo de video 155 Modo de texto 155 Paginas de pantalla 158 Interrupeién 10H del BIOS para modo de texto 159 Uso del BIOS para desplegar el conjunto de caracteres ASCH 165 Caracteres ASCII extendidos 166 Intermitencia, video inverso-y recorrido de la pantalla 169 Despliegue directo en video 171 Modo grifico 173 Interrapcién 10H del BIOS para grificos 175 ‘Como especificar y desplegar e! modo grifico 178 Determinacién del tipo de adaptador de video 178 Parte D Manipulacién de datos it Puntos clave 180 Preguntas 180 PROCESAMIENTO AVANZADO DEL TECLADO 182 Introducciin 182 Elteclado 183 Estado del shift del teclado 184 Biifer del teclado 185 Interrupcién 21H del DOS para entrada desde el teclado 185 16H del BIOS para entrada desde el teclado 187 Teclas de funcién extendidas y cédigos de rastreo 189 Seleccién de un meni 191 Interrupci6n O9H y el bifer del teclado 195 Cémo ingresar e1 conjunto completo de caracteres ASCII 197 Puntos clave 198 Preguntas 198 a8 OPERACIONES CON CADENAS DE CARACTERES Introduccién 200 Caracteristicas de las operaciones con cadenas de caracteres 201 REP: Prefijo de repeticion de cadena 201 MOVS: Mover una cadena de caracteres 202 LODS: Carga una cadena de caracteres 204 STOS: Almacenar una cadena de caracteres 205 Como transferir datos con LODS y STOS 206 MPS: Comparar cadenas 206 SCAS: Busqueda en cadenas 209 Buscar y reemplazar 210 Codificacién alterna para instrucciones de cadena de caracteres 211 Cémo duplicar un patron 211 (Cémo alinear a la derecha en la pantalla 212 Puntos clave 215 Preguntas 215 ARITMETICA: I-PROCESAMIENTO DE DATOS BINARIOS 217 Introduccion 217 ‘Suma y resta 218 Aritmética con palabras miltiples 220 Datos con signo y sin signo 223 Multiplicacin 224 Multiplicacién de palabras miltiples 226 Instrucciones especiales de multiplicacién 230 Maltiplicacién por corrimiento 231 x ‘Contenido Divisién 232 Division por medio de corrimientos 236 Cambio (inversiGn) de! signo 237 14 ARITMETICA: ~PROCESAMIENTO DE DATOS ASCII Y¥ BCD aM Introduccién 241 Datos en formato decimal 242 Procesamiento de datos ASCII 243 Procesamiento de datos BCD desempaquetados 245 Procesamiento de datos BCD empaquetados 248 Conversién de formato ASCII a binario 250 Conversién de formato binario a ASCIT 250 Corrimiento y redondeo 251 Programa para convertir datos ASCII 253 Puntos clave 258 Preguntas 259 1S PROCESAMIENTO DE TABLAS 260 Introduceion 260 Definicion de tablas 260 Direccionamiento directo en tablas 262 Biisqueda en una tabla 266 La instruccién XLAT (Traducir) 271 Despliegue de earacteres hexadecimales y ASCII 272 Ordenamiento de entradas de una tabla 274 Listas ligadas (enlazadas) 275 Tipo, longitud y tamafio de los operadores 279 Puntos.clave 279 Preguntas. 280 Parte E Entrada/salida avanzada 282 16 ORGANIZACION DEL ALMACENAMIENTO EN DISCO 282 Introduccién 282 ‘Caracteristicas de los discos 282 Area de sistemas y area de datos en disco 285 Registro de arranque 286 Directorio 287 Tabla de asignacién de archivos 288 Ejercicio que implica et uso de la FAT 292 Procesamiento de archivos en disco 294 Puntos clave 294 Preguatas. 295 a ee Contenido 17 PROCESAMIENTO EN DISCO: I-ESCRITURA Y LECTURA DE ARCHIVOS Introduccién 296 Cadenas ASCIIZ 297 Manejadores de archivos 297 Cédigos de error de regreso 298 Apuntadores de archivo 298 Uso de manejadores de archivo para crear archivas en disco 208 Uso de manejadores de archivo para leer archivos en disco 303 Procesamiento de archivos ASCII 307 Uso de manejadores de archivo para procesamiento directo 310 Servicios de disco que usan bloques de control de archivo 312 ‘Uso de FCB para crear archivos en disco 316 Uso de FCB para lectura secuencial de archivos en disco 318 Uso de FCB para procesamiento directo 319 Procesamiento directo de bloques 320 E/S absoluta de disco 321 Puntos clave 322 Preguntas 323 18 PROCESAMIENTO EN DISCO; II-OPERACIONES DEL DOS PARA SOPORTE DE DISCOS Y ARCHIVOS 325 Introduccién 325 Operaciones para manejo de unidades de disco 326 Programa: Lectura de informacion desde los sectares 336 Operaciones para manejar el directorio y la FAT. 338 Programa: Despliegue del directorio 340 Operaciones para manejar archivos en disco 340. Programa: Borrar archivos de manera selectiva 347 Puntos clave 350 Preguntas 350 19 PROCESAMIENTO EN DISCO: III-OPERACIONES DEL BIOS PARA DISCO 352 Introduccion 352 Byte de estado del BIOS 353 ‘Operaciones bisicas del BIOS para diseo 354 ‘Uso de! BIOS para leer sectores 356 tras operaciones del BIOS para disco 356 20 IMPRESION 364 Introduccién 364 comunes de control para impresora 365 DOS 21H, funcion 40H: Imprimir caracteres 365 Impresién con encabezados de pigina 366 Impresién de archivos ASCII y manejo de tabuladores 369 DOS 21H, funcién OSH: Imprimir un cardcter 373 Caracteres especiales de control para la impresora 373 Punciones de la INT 17H del BIOS para impresion 374 Puntos clave 376 Preguntas 376 21 OTRAS FACILIDADES DE ENTRADA/SALIDA 377 Introduccion 377 Caracteristicas del raion 377 Funciones del ratén 378 Operaciones comunes del rain 379 Programa paracl ratén 385 Puertos 388 Generacién de sonidos 390 Puntos clave 391 Preguntas 392 Parte F — Programacién avanzada 393 22 ESCRITURA DE MACROS 393 Introduccién 393 Una definicién sencilla de una macro 394 ‘Uso de parimetros en macros 394 Comentarios 396 Uso de una macro dentro de una definicién de una macro 398 Ladirectiva LOCAL 399 Incluir (include) desde una biblioteca de macros 401 Concatenacién 402 Directivas de repeticién 403 Directivas condicionales 404 Puntos clave 408 Pregunias 410 23 ENLACE A SUBPROGRAMAS: 4 Introduccién 411 Segmentos 412 Liamadas intrasegmento 413 Llamadas intersegmento 414 Atributos EXTRN y PUBLIC 415 Atributos EXTERN y PUBLIC para una etiqueta 417 ‘Uso de PUBLIC en el segmento de cédigo 419 Directivas simplificadas de segmento 421 Datos comunes en subprogramas 423 Sr ——— Definicién de datos en ambos programas 423 Paso de parimetros 425 Enlace de programas en Pascal y en lenguaje ensamblador 429 Enlazando programas C y lenguaje ensamblador 431 Puntos clave 434 Preguntas 435 24 ADMINISTRACION DE LA MEMORIA DEL DOS 37 Introduccion 437 Programas principales del DOS 438 Area de memoria alta 439 COMMAND.COM 439 Prefijo de segmento de programa (PSP) 440 Bloques de memoria 444 Estrategia de asignacién de memoria 447 Cargador de programa 448 Asignacién y liberacién de memoria 453 Carga y ejecucién de una funcién de programa 454 Traslape de programas 458 Programas residentes 462 Puntos clave 467 Preguntas 468 Parte G Capitulos de referencia 469 25 AREAS DE DATOS E INTERRUPCIONES DEL BIOS 469 Introduccién 469 El proceso de arranque 470 El frea de datos del BIOS 470 Servicios de interrupcién 474 Interrupciones del BIOS 475 Puntos clave 478 Preguntas 479 26 INTERRUPCIONES DEL DOS 430 Introduccion 480 Interrupciones del DOS 481 Servicio de la INT 21H del DOS 481 Puntos clave 486 Preguntas 486 27 OPERADORES Y DIRECTIVAS 87 Introduccion 487 Especificadores de tipo 487 Operadores 488 Directivas 494 28 EL CONJUNTO DE INSTRUCCIONES DE LA PC Introduccién 514 Notacién de registros 515 Byte del modo de direccionamiento. 515 Instrucciones de dos bytes. 517 Instrucciones de tres bytes 517 Instrucciones de cuatro bytes S17 Conjunto de instrucciones $18 APENDICES Conversi6n entre hexadecimal y decimal 542 Cédigos de caracteres ASCH 545 Palabras reservadas 547 Opciones de ensamblado y de enlace 549 El programa DEBUG del DOS 557 amooe> RESPUESTAS A PREGUNTAS SELECCIONADAS: INDICE Cédigos de rastrea del teclado y cédigos ASCH 564 sts S581 Prefacio El corazén de la computadora es ¢l microprocesador, éste maneja las necesidades aritméticas, de légica y de control de la computadora. El microprocesador tiene su origen en la década de los sesenta, cuando se disefié el circuito imegrado (IC por sus siglas en inglés) al combinar varios componentes electrénicos en un. solo componente sobre un “chip" de silicio. Los fabricantes colocaron este diminuto chip en un dispositivo parecido a un ciempiés y lo conectaron a un sistema en funcionamiento. A principios de los afios setenta Intel introdujo el chip 8008 el cual, instalado em una computadora terminal, acompafié a la primera generaciGn de microprocesadores. En 1974 el 8008 evolucion6 en el 8080, un popular microprocesador de la segunda genera- cin para propésitos generales. En 1978 Intel produjo la tercera generacién de procesadores 8086, para proporcionar alguna compatibilidad con ¢l 8080 y que representan un avance significative de disefio, Después, Intel desarrollé una variacién del 8086 para ofrecer un disefo ligeramente mas sencillo y compatibilidad con los dispositivos de entrada/salida de ese momento, Este nuevo procesador, el 8088, fue seleccionado por IBM para su computadora personal en 198]. Una versién mejorada del 8088 es el 80188, y versiones mejoradas del 8086 son los 80186, 80286, 80386, 80486 y el Pentium (también conocido como PS), cada uno de ellos permite operaciones adicionales y més procesamiento. La variedad de microcomputadoras también ocasioné un renovado interés en el Jenguaje ensamblador, cuyo uso conlleva diferentes ventajas: + Un programa escrito en lenguaje ensamblador requiere considerablemente menos memoria Y tiempo de ejecucién que un programa escrito en los conocidos como lenguajes de alto nivel, como Pascal y C. + El lenguaje ensamblador da a un programador la capacidad de realizar tareas muy técnicas que serian dificiles, si no es que imposibles de realizar en un lenguaje de alto nivel. xvi Pretacio * El conocimieno de! lenguaje ensamblador permite una comprensidn de la arguitectura de la ‘méquina que ningdn lenguaje de alto nivel puede ofrecer. * Aunque la mayoria de los especialistas en software desarrolla aplicaciones en lenguajes de alto nivel, que son més féciles de escribir y de dar mantenimiento, luna préctica comiin es revodificar en lenguaje ensamblador aquellas rutinas que han caussdo cuellos de botella en el procesamiento, * Los programas residentes y Tutinas de servicio de interrupcién casi siempre son desarrollados ¢n lenguaje ensamblador. Los lenguajes de alto nivel fueron disefiados para eliminar tas particularidades de una com- putadora especifica, mientras que un lenguaje ensamblador esié disefiado para una computadora specifica, 0, de manera mis correcta, para una familia especifica de microprocesadores, A conti, nuacién se listan los requisitos para aprender e1 lenguaje ensamblador de la PC: * Tener acceso a una computadora personal de 18M (cualquier modelo) o una compatible. * Una copia de! sistema operative MS-DOS 0 PC-D0S (de preferencia, una version reciente) y estar familiarizado con su uso. + Una copia de un programa ensamblador (otra ‘vez, de preferencia, una version reciente), Las versiones de Microsoft son conocidas como MASM y QuickAssembler: TASM es de Borland y OPTASM es de System. Para el aprendizaje de lenguaje ensamblador no €5 necesario lo siguiente: * Conocimiento previo de un lenguaje de programacién, aunque el tenerlo puede ayudarle a comprender algunos conceptos de programacién mis ripido. + Conocimiento previo de clectronica o circuiteria. Este libro Proporciona toda la informacion acerca de la arquitectura de la PC que Usted necesita para programar en lenguaje ensamblador. SISTEMAS OPERATIVOS ‘Los propdsitos principales de un sistema operative son (1) permitir a los usuarios instruir a una ‘computadora con respecto a las acciones que debe tomar (como ejecutar un Programa en particu- tar) y (2) facilitar los medios de almacenamiento de la informacién en disco (“catalogar™) y de fener acceso a la misma. El sistema operativo mis comiin para la PC y sus compatibles es el Ms-Dos de Microsoft, Gonocido como PC-DOS en la IBM PC. Cada una de las versiones del DOS ha proporcionado Caracteristicas adicionales que han extendido las capacidades de la PC. Un estudio de sistemas Operatives avanzados, como 0S/2 y UNIX, se encuentra fuera del los alcances de este libro. OBJETIVO DEL LIBRO El proposito principal de este libro es ayudar a los leciores en el aprendizaje de la Programacién n lenguaje ensamblador. Para este fin, el libro cubre los aspectos mas sencllos del hardware y del Ienguaje y después conforme se require introduce las instrucciones necesarias. El texto tam bién subraya la claridad de los programas de ejemplo. Asi, los ejemplos utilizan aquellas instruc- Clones y enfoques que som més ficiles de entender aunque un programador profesional resolveria Problemas similares con un eédigo mis sofisticado, pero menos claro.

You might also like