Vous êtes sur la page 1sur 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. Pretacio xvil Los programas también omiten instrucciones de macros (éstas se explican en el capitulo 22), ‘A pesar de que los programadores profesionales utilizan macros constantemente, su aparicién en un libro de esta naturaleza interferiria con el aprendizaje de los principios del lenguaje- Una vez, {que estos principios se han aprendido, un programador puede adoptar las técnicas inteligentes del profesional. (COMO EMPLEAR EL LIBRO Esta obra puede emplearse tanto como libro de texto que como de referencia permanente. Para hacer més eficaz su inversion en una microcomputadora y software, trabaje con cuidado en cada uno de los capitulos y relea cualquier material que no sea claro de inmediato. Teclee los progra- mas de ejemplo en su computadora, conviértalos en “médulos” ejecutables y prepdrelos para ejecutarlos (0 “correrlos"). También, resuelva los del final de cada capitulo, ‘Los primeros nueve capitulos tratan el material fundamental para el libro y para el lenguaje ensamblador. Después de estudiarlos puede continuar con los capitulos 12, 13, 15, 16, 20, 210 22. ‘Los capitulos 25, 26, 27 y 28 tienen la intencién de ser referencias. Los capitulos interrelacionados son: + 9a 11 (sobre operaciones con la pantalla y el teclado). * 13 y 14 (sobre operaciones aritméticas). + 16 2 19 (sobre procesamiento en disco). + 23 y 24 (sobre subprogramas y administracién de la memoria), Al terminar este libro, usted sera capaz de: = Entender el hardware de la computadora personal. + Entender cddigo en lenguaje de maquina y en formato hexadecimal. ‘+ Entender los pasos al ensamblar, enlazar y ejecutar un programa. * Escribir programas en lenguaje ensamblador para manejar el teclado y la pantalla, realizar aritmética, hacer conversiones entre los formatos ASCII y binario, formar tablas de busqueda y ordenamiento y manejar entradas y salidas de disco. +» Rastrear Ia ejecucién de la maquina como ayuda en la depuracién de programas. + Escribir sus macroinstrucciones para facilitar la codificacién. * Enlazar programas ensamblados aparte en un programa ejecutable. Aprender lenguaje ensamblador y conseguir que sus programas funcionen es una experien- cia excitante y desafiante. Por el tiempo y esfuerzo invertidos, las recompensas de seguro son grandes, NOTAS SOBRE LA TERCERA EDICION Esta tercera edicién lleva una considerable cantidad de mejoras sobre la edicion anterior. Algunas. de ellas son: * Inclusién y mayor énfasis en las funciones adicionales en versiones més recientes de! DOS. * Programacién para operaciones con el ratén. xviii Pretacio + Caracteristicas de los procesadores 80486 y Pentium de Intel. « Inclusién de material acerca del area de memoria superior y el drea de memoria alta, ‘« Inclusi6n de material sobre las més recientes versiones de ensamblados. + Mayor cobertura de funciones de procesamiento en disco para DOS, Ja tabla de asignacion de archivos y procesamiento directo. + Detalles completos de los cédigos de rastreo y de las combinaciones de teclas del teclado extendido. ¥ Reorganizacion y revision considerables de las explicaciones en todas las partes del texto. RECONOCIMIENTOS autor estd agradecido por ta ayuda y cooperacién de todos aquellos que contribuyeron con sugerencias para la revisién y correccin de ediciones anteriores. Para esta tercera eici6n, vaya tn agradecimiento especial a Brian R. Anderson del British Columbia Institute of Technology por la informacién sobre el ratén y la programacién C. PARTE A — Fundamentos del hardware y software de la PC CAPITULO 1 Introducci6n al hardware de la PC OBJETIVO Explicar las caracteristicas basicas del hardware de la micro- computadora y la organizacién de programas. INTRODUCCION Eseribir un programa en lenguaje ensamblador requiere de conocimientos acerca del hardware (arquitectura) de 1a computadora, su conjunto de instrucciones y sus reglas de uso. En este capi- tulo Se ofrece una explicacién del hardware basico: bits, bytes, registros, el procesador y el bus de datos, El conjunto de instrucciones y su uso son desarrollados a lo largo del libro. Los bloques fundamentales de informacién de una computadora son los bits y los bytes. Estos proporcionan los medios por los cuales la computadora puede representar datos ¢ instruccio- nes en la memoria. Los elementos principales de hardware intemo de la computadora son un microprocesador, la memoria y los registros; los elementos de hardware externo son los dispositivos de entrada/ salida, como el teclado, el monitor y el disco. El software consta de diversos programas y archi- vos de datos (incluyendo al sistema operativo) almacenados en el disco. Para ejecutar (0 correr) un programa, el sistema lo copia det disco a 1a memoria interna. (La memoria interna es lo que la gente entiende cuando pide que su computadora tenga, por ejemplo, 8 megabytes de memoria.) El microprocesador ejecuta las instrucciones del programa, y los registros manejan la aritmética, movimiento de datos y ¢l direccionamiento. 2 Introduccién al hardware dela PC Capitulo 1 Un programa en lenguaje ensamblador consste en uno o més segmentos para definir datos y almacenarinstructiones de miquina y un segmento lamado stack (0 pila) que contiene direccic, ‘nes almacenadas. ‘é BITS Y BYTES La.unidad més pequeia de informacién en la computadora es el bir, Un bit puede estar no magne- ‘izad, 0 apagado, de modo que su valor es cero, o bien, magnetizado, o encendido, de modo que su valor ¢s uno, Un solo bit no proporciona mucha informacién, pero es sorprendente lo que un conjunto de ellos pucde hacer. ‘A.un grupo de nueve bits se le lama byie, el cual representa localidades de almacenamiento, tanto {en memoria interna como en discos externos. En memoria, cada byte tiene una direccién tinica, ‘qu inicia con cero para el primer byte. Cada byt tiene ocho bits para datos y un bit de paridad: Lo ToTeTofo]fo oto]: ‘its de datos | paridag | ‘Les ocho bits de datos proporcionan la base para la aritmética binaria y para representar caracte- ‘es como la letra A o-cl simbolo de asterisco (*). Ocho bits permiten 256 combinaciones diferentes ‘de condiciones de apagado-encendido (off-on), desde todos los bits apagados (00000000) hasta ‘odos los bits encendides (11111111). Por ejemplo, una representacién de los bits para la letra A 65.01000001 y para el asterisco es 00101010, aunque no tenemos que memorizarlas. {La paridad requicre que ef mimero de bits encendidos en cada byie siempre sea impar. Puesto que la letra A contiene dos bits encendidos, para forzar la paridad impar el procesador establece de forma automética su bit de paridad en encendido (01000001-1). De forma similar, Pucsto que el asterisco tiene tres bits encendidos, para mantener la paridad impar el procesador ¢stablece el bit de paridad en apagado (00101010-0), (Cuando una instruccién hace referencia a un byte cn memoria interna, el procesador verfica su paridad. Si su paridad es par, el sistema supone {que un bit estd “perdido” y exhibe un mensaje 0 de error. Un error de paridad puede ser resultado de una falla en el hardware o un trastorno eléctrico; de cualquier forma, ¢s un acontecimiento aro, Puede preguntarse cémo es que la computadora “sabe” que el valor de los bits 01000001 fepresenta la letra A. Cuando usted oprime la A en el teclado, el sistema envia una sefial desde esa tecla a la memoria y establece un byte (en una posicién de entrada) al valor 01000001 Usted puede mover cl contenido de este byte de un lugar a otro de la memoria y aun imprimirio 0 ‘mostrario en la pantalla como la letra A. Para propésitos de referencia, los bits en el byte se mumeran del 0 al 7 de derecha a izquier- a, como se muestra aqui para la letra A (ya n0 nos preocuparemos por el bit de paridad): Nuimero de bit: 7645 43210 Comenide en bitsparstaA: [oO 1 0 0 Numetos binarios 3 Bytes relacionados dian A eitt tar3un grupo de bytes como una unidd de nformaién, como tiempo o Sone ctf ero de uno o mis bycs que definen un valor paricular ace conse: eee Somme campo. La computadora también emplea ciertos tamafios que le son naturales, * Palabra. jin.campo de 2 bytes (16 bits). Los bits en una palabra son mumerados desde 0 hasta 1S, de derecha a iaquierda, como se muesia a continuaién pars las ae on ‘Neimero de bit 24 oe uw w-9 glee 5 ae Comcnidoscatincrc: | 6 1 6 1 0 6 06 6 * Palabra dobte, Un campo de 4 bytes (32 bits). + Palabra cuddruple. Un campo de 8 bytes (64 bits). * Parrafo. Un campo de 16 bytes (128 bits). * Kilobyte (KB). El nimero 2" es igual a 1024. el eual pasa a ser el valor de K, por kilobytes, Por tanto, una computadora con una memoria de 640K tiene 640 * 1024, 0 655,360 bytes. * Megabyte (MB). El mimero 2” es igual a 1,048,576, o un megabyte, NUMEROS BINARIOS Puesto que la computadora sélo puede distinguir entre bits 0 y 1, trabaja con un sistema de numeracién de base 2 conocido como binario, De hecho, la palabra “bit” es una contraccién de las Palabras inglesas “binary digit” (digito binario), Una coleccién de bits puede epresentar cualquier valor numérico. El valor de un mimero dermaye ae de las poicions relatives de cero uno de losis. Al gual coe ee ae We 10) Ee sions de derecaainguirda representa potencies aseemlones pg de 10), En el siguiente nimero de ocho bits, todos los bits se toman como uno (encendido): Posicién: 7 6 5 4 3 2 : 0 Valor del bit: 1 1 1 1 1 I 1 1 Valor de la posicién: 128 64 32 16 8 4 2 1 El primer bit dela derecha toma el valor 1 (2) el que sigue ala iequicrda toma el valor 2 (2'); ef Siguiente cl valor 4 (22), Y asi sucesivamente. En este caso el valor de} niimero binario es | + 2 + 4+... + 128 = 255 (9 2 ~ 1), forma similar, valor del nme binario 01000001 se calcula como | mds 6, 0 65: Valor del bit: 0 1 0 0 0 0 0 I Valor de la posicién: 128 a R 16 8 4 2 1 Pero, :n0 es 01000001 la letra A? En realidad, si, Los bits 01000001 pueden representar ya sea el niimero 65 0 bien la letra A, como a continuacién se indica: Introduccién al hardware de laPC Capitulo 1 “Si ‘un programa define los datos para propésitos aritméticos, entonces 01000001 esunnimero binario equivalente al nimero decimal 65. * Si un programa define los datos con propésitos descriptivos, como encabezados, entonces 91000001 representa un caricter alfabético, Cuando inicic la programacién, verd Con mals claridad esta distincién, Puesto que define y utiliza cada elemento de informacién Para un propdsito especifico, En la Practica, rara vez los dos usos son fuente de confusion, Un numero binario no esta limitado a 8 bits. Un procesador que utiliza una arquitectura de 16 bits (o de 32 bits) maneja de manera automitica niimeros de 16 bits (o de 32 bits). Para 16 bits, 2-1, da valores hasta 65,535, y para 32 bits, 2 - 1, Proporciona valores hasta 4,294,967,295. Aritmética binaria {La microcomputadora realiza aritmética s6lo en formato binario. En consecuencia, el programa- dor de lenguaje ensamblador tiene que estar familiarizado con el formate binario y la suma binaria. ‘Los siguientes ejemplos ilustran la suma binaria: 0 é pies + + Note en los dos iiltimos ciemplos un | de acarreo, Ahora, sumemos 01000001 a 00101010, Estamos sumando la letra A con el asterisco? No, son las cifras decimales 65 y 42: Decimal Binario 65 01000001 +42 +00101010 107 1101011 Verifique que la suma binaria 01101011 realmente es 107. Otro ejemplo: sume los valores deci- males 60 y 53: Decimal Binario 60 001 11100 +53 +001 10101 13 O1L10001 Nameros negativos Numero binarios 5 Nimero +65: 01000001 Invertir los bits: 1OLNIL10 ‘Sumar |: 1 Nimero -65: JOU Un mimero binario es negativo si su ultimo bit a la izquierda es 1, pero si suma los valores de los bits que tienen 1, para convertir el mimero 10111111 a decimal, no obtendré 65. Para de- terminar el valor absoluto de un mimero negativo binario, simplemente repita la opéracién ante- rior, esto es, invierta los bits y sume 1: 1oLnN A 01000000 aed 01000001 La suma de +65 y -65 debe ser cero, Pruébelo: +65 01000001 65 + 10111111 00 (@)00000000 En la suma, el valor de los 8 bits es cero, y el acarreo de un | a la izquierda se pierde. Pero como existe un acarreo hacia el bit de signo y un acarreo hacia afuera del bit de signo, el resultado es correcto, La resta binaria es simple: convierta el nimero que seri restado a su complemento a dos y ‘sume los mimeros. Restar 42 de 65. La representacién binaria de 42 ¢ 00101010 y su comple- mento a dos es 11010110: 65 01000001 +(-42) —_+11010110 23 (100010111 El resultado, 23, es correcto, Una vez més, existe un acarreo vilido hacia el bit de signo y un acarreo hacia fucra, Si la justificacién para la notacién de complemento a dos no es inmediatamente clara, considere la siguiente pregunta: Qué valor tiene que ser sumado al nimero binario 00000001 para hacer que la suma sca igual a 00000000? En términos de nimeros decimales, la respuesta Seria ~1. El complement a dos del 1 es 11111111. Asi sumamos +1 y =1 como sigue: 1 00000001 +(-1) MU Resultado: (100000000 Ignorando el acarreo de 1, puede ver que el mimero binario 11111111 es equivalente al decimal - 1. También puede ver un patrén en la forma en que los niimeros binarios decrecen en valor +3 00000011 +2 00000010 +1 00000001 0 00000000, = nui -2 HNO -3 V111101 6 Introduccion al hardware de laPC Capitulo 1 De hecho, en un mimero negativo los bits con cero indican su valor (absoluto): trate el valor Posicional de cada uno de los bits con cero como si fueran 1, sume los valores y agregue |. Este material sobre aritmética binaria y niimeros negativos lo encontraré provechoso cuando ‘vea los capitulos 12 y 13, sobre aritmética. REPRESENTACION HEXADECIMAL Imagine que quiere ver los contenidos de cuatro bytes adyacentes, que representan un valor bina- rio, en memoria (una palabra doble). Aunque un byte puede tener cualquiera de las 256 combina ciones de bits, no hay manera de mostrar 0 imprimir muchos de ellos como caracteres ASCII comunes. (Ejemplos de tales caracteres son las configuraciones de bits para Tab, Enter, Form Feed y Escape [tabulador, Intro, Avance de pagina y Escape.) En consecuencia, los diseftadores de computadoras desarrollaron un método abreviado para representar informacién binaria. El método divide todo byte en mitades y expresa el valor para cada medio byte. Como ejemplo, considere Los siguientes cuatro bytes: oor oir] 1011 1001 33 u Puesto que los niimeros 11, 12 y 14 necesitan 2 digitos, se extiende el sistema de numera- cidn de manera que 10 = A, 11 = B, 12 = C, 13 = D, 14 = Ey 1S = F, Aquiesté el nimero en forma abreviada que representa el contenido de los bytes dados: 39 35° «BSCE Por tanto, el sistema de numeracidn incluye los “digitos” 0 a F, y ya que existen 16 de tales digitos, ¢l sistema ¢s conocido como representacién hetadecimal (0 hex). La figura 1-1 muestra Jos mimeros decimales de 0 a 15 junto con sus valores equivalentes en binario y en hexadecimal Binario: Decimal: 40 Decimal Hexadecimal | Binario Decimal Hexadecimal Figura 1-1 Representacién binaria, decimal y hexadecimal lenguaje ensamblador hace uso considerable del formato hexadecimal. Un listado de un programa ensamblador muestra, en hexadecimal, todas las direcciones, instrucciones de cédigo de maquina y el contenido de las constantes de datos. Para depurar sus programas, puede usar el programa DEBUG del DOS, el cual también muestra las direcciones y los contenidos de los bytes en formato hexadecimal. Muy pronto estar trabajando en formato hexadecimal. Tenga en mente que el nimero hexadecimal que sigue inmediatamente a F es el 10 hexadecimal, que es el valor decimal 16, Veamos a continuacién algunos ejemplos sencillos de aritmética hexadecimal: Elprocesador 7 6 3 F F 10 FF +4 +8 +1 +F 430 A D 10 OIE 40100 Note también que ¢l 40 hexadecimal es igual al 64 decimal, el 100 hexadecimal es el 256 decimal y el 1,000 hexadecimal es el 4,096 decimal. En un programa para indicar un nimero hexadecimal, se escribe una “H” inmediatamente después del nimero; asi 25H = 37 decimal. Por convencién, un ntimero hexadecimal siempre ‘empieza con un digito 0 a 9, asi que debe codificar B8H, como OB8H. En este libro indicamos un valor hexadecimal con la palabra “hex” o una “H” después del nimero (como en 4C hex 04CH); un valor binario con la palabra “binario” una “B” a continuacién de! niimera (como 01001100 binarlo © 010011008), y un valor decimal simplemente por un nimero (como 76), Se exceptian los casos en que la base es obvia por el contexto. Enel apéndice A se explica cémo convertir ndmeros hexadecimales a decimal, y viceversa. CODIGO ASCH Para uniformar la representacién de caracteres, los fabricantes de microcomputadoras han adop- tado el cédigo ASCII (American Standard Code for Information Interchange). Un eédigo unifor- me facilita la transferencia de informacién entre los diferentes dispositivos de la computadora. El cédigo ASCII extendido de 8 bits que uiliza la PC proporciona 256 caracteres, incluyendo simbo- 40s para alfabetos extranjeros. Por ejemplo, 1a combinacién de bits 01000001 (41 hex) indica la letra A. El apéndice B tiene una lista de los 256 caracteres ASCII y el capitulo 8 ensefia cémo mostrarlos en la pantalla, EL PROCESADOR. Un elemento importante de! hardware de la PC es la unidad del sistema, que contiene una tarjeta de sistema, fuente de poder y ranuras de expansiGn para tarjetas opcionales. Los elementos de la tarjeta de sistema son un microprocesador Intel (6 equivalente), memoria de sdlo lectura (ROM) y memoria de acceso aleatorio (RAM). El cerebro de la PC y compatibles es un microprocesador basado en la familia 8086 de Intel, ‘que realiza todo el procesamiento de datos ¢ instrucciones, Los procesadores varian en velocidad Y capacidad de memoria, registros y bus de datos. Un bus de datos transfiere datos entre cl rocesador, la memoria y los dispositivos externos. En realidad, ditige el trafico (trénsito) de datos. En seguida se anota una breve descripcién de varios procesadores de Intel: 8088/80188, Estos procesadores tienen registros de: 16 bits y un bus de datos de & bits, y pueden direecionar hasta un millén de bytes en memoria interna. Los registros pueden procesar os bytes al mismo tiempo, mientras que el bus de datos sélo puede transferir un byte a la ver. El 80188 es un 8088 con mayor potencia por la adicién de unas cuantas instrucciones, Ambos procesadores corren en lo que se conoce como modo real, esto ¢s, un programa a la vez. 8086/80186. Estos procesadores son similares a los 8088/80188, pero tienen un bus de datos de 16 bits y corren mas répido. El 80186 es un 8086 mis potente con unas cuantas instruc. cones adicionales. Introduccién al hardware de la PC Capitulo 1 80286. Este procesador puede correr més répido que los anteriores y direccionar hasta 16 millones de bytes. Puede correr en modo real 6 en modo protegido para multitareas, $0386. Este procesador tiene registros de 32 bits y un bus de datos de 32 bits, y puede direccionar hasta cuatro mil millones de bytes en memoria, Puede correr en modo real o en modo protegido para multitareas, 80486. Este procesador también tiene registros de 32 bits y un bus de datos de 32 bits (aunque algunos clones tienen un bus de datos de 16 bits) y esta disefiado para mejorar el desem- Peflo. Puede correr en modo real o en modo protegido para multitareas, Pentium (o PS). Este procesador tiene registros de 32 bits, un bus de datos de 64 bits y puede ejecutar mas de una instruccién por ciclo de Teloj. (Intel adopts el nombre “Pentium” Porque, a diferencia de los nimeros, los nombres pueden tener derechos reservados.) Unidad de ejecucidn y unidad de interfaz del bus EL procesador se divide en dos unidades 1dgicas: una unidad de ejecucidn (EU) y una unidad de interfaz del bus (BIU), como se ilustra en la figura 1-2. El papel de la EU es ejecutar instruccio nes, micntras que la BIU envia instrucciones y datos ala EU, La EU contiene una unidad arité- tico-Wégica (ALU), una unidad de control (CU) y varios registros. Estos elementos ejecuan ins. trucciones y operaciones aritméticas y logicas. {a funcién més importante de la BIU es manejar la unidad de control del bus, Jos registro ‘de segmentios y Ia cola de instrucciones, La BIU controla los buses que transfieren los dates a ln EU, a la memoria y los dispositivos de entrada/salida extemos, mientras que los registro de Figura 1-2 Unidad de ejecucidn y unidad de interfaz del bus Memoria interna: 9 tra funcidn de la BIU es permitir el acceso a instrucciones. Ya que las instrucciones de un programa en ejecucién se encuentran en la memoria, la BIU debe accesar instrucciones desde la ‘memoria y colocarlas en la cola de instrucciones. Puesto que el tamafio de esta cola es de 4 a 32 bytes, dependiendo del procesidor, 1a BIU es capaz de adelantarse y buscar con anticipacién instrucciones de manera que siempre haya una cola de instrucciones listas para ser ejecutadas. La EU y la BIU trabajan en paralelo, si bien la BIU se mantiene un paso adelame. La EU notifica a la BIU cudndo necesita acceso a Jos datos en memoria o a un dispositive de E/S. También, la EU solicita instrucciones de méquina de la cola de instrucciones de ta BIU. La instruceién que se encuentra adelante de la cola es la actualmente ejecutable, y mientras la EU esti ‘ocupada ejecutando una instruccién, la BIU busca otra en la memoria. Esta bisqueda se traslapa con la ejecucién y aumenta la velocidad de procesamiento. Los procesadores hasta el 80486 tienen fo que se conoce como tuberia sencilla la cual los resttinge a completar tna instruceién antes de iniciar la siguiente. El Pentium y procesadores posteriores tienen una luberia doble (o dual) que les permite correr varias operaciones en paralelo MEMORIA INTERNA La microcomputadora posee dos tipos de memoria interna: memoria de acceso aleatorio (RAM) y memoria de sdlo lectura (ROM), Los bytes en memoria se numeran en forma consecutiva, ini- ciando con 00, de modo que cada localidad tiene un niimero de direccién tinico. La figura 1-3 muestra un mapa fisico de memoria de una PC tipo 8086. Del primer megabyte de memoria, los primeros 640K Jos ocupa la RAM, la mayor parte de la cual esté disponible para su uso, ROM, La ROM es un chip especial de memoria que (como su nombre to indica) s6lo puede ser lefda, Ya que las instrucciones y los datos estén “grabados” permanentemente en un chip de ROM, no pueden ser alterados. EL Sistema Basico de Entrada/Salida (BIOS) de ROM inicia en la direeci6n 768K y maneja los dispositivos de entrada/salida, como un controlador de disco duro, La ROM que inicia ¢n 960K. controla las funciones basicas de la computadora, como Ja autoprucba al encender, patrones de puntos para los graficos y el autocargador de disco. Cuan- do se enciende la computadora, la ROM realiza ciertas verificaciones y carga, desde el disco, los datos especiales del sistema que envia a la RAM. Inicio Direceién veo Dec Hex 960K F000 {92K drea de expansio: _ de memoria (ROM) 128 K dea de despliegue deo (RAN) 768K cooo0 memoria superior 40K A000 memoria 640 K memoria (RAM) convencional cero 90000 Figura 1-3 Mapa de memoria fisica 10 Introduccion al hardware dela PC — Capitulo 1 RAM. Un programador esta preocupado principalmente con la RAM, que seria mejor Ila- mada “memoria de lectura-escritura”. La RAM se dispone como una “hoja de trabajo" para almacenamiento temporal y ejecucién de programas, Ya que el contenido de la RAM se pierde cuando se apaga la computadora, debe reservar almacenamiento extero para guardar programas y datos, Si cuando enciende la computadora tiene insertado un disco flexible con DOS 0 un disco duro instalado, el procedimiento de en ROM carga el programa COMMAND.COM en RAM. Después se le pide a COMMAND.COM ‘realizar acciones, como cargar un programa de un disco ala RAM. Puesto que el COMMAND.COM ‘ocupa una pequefia parte de RAM, también existe espacio para otros programas. Su programa se sejecuta en RAM y por lo comtin produce salida a la pantalla, a la impresorao a un disco, Cuando termina, usted puede pedir al COMMAND.COM cargar otro programa en RAM, una accibn que se escribe sobre ¢l programa anterior. En todo ¢l estudio posterior de la RAM se usard el término ‘general “memoria”. Direccionamiento de localidades de memoria Dependiendo del modelo, el procesador puede accesar uno 0 mis bytes de memoria a la vez. Considere el nimero decimal 1,025. La Tepresentacién hexadecimal de esta cifra, 0401H. requie- re de dos bytes (0 una palabra) de memoria. Consta de un byte de orden alto (més significativo), 04, y un byte de orden bajo (menos significativo), 01. El sisterna almacena ‘en memoria estos bytes en secuencia inversa de bytes: el byte de orden bajo en la direccién baja de memoria y el byte de orden alto en la direccién alta de memoria. Por ejemplo, el procesador transferiria 0401. de un registro a las localidades de memoria 3612 y 5613 como: registro o | o memoria OL 4 ] localidad $612, localidad 5613. byte menos significative byte mis significative El procesador espera que los datos numéricos en la memoria estén en secuencia inversa de bytes y los procesa de acuerdo con esto. Cuando el procesador recupera la palabra de la memoria, tra vez invierte los bytes, restableciéndolos de manera correcta en el registro como 04 01 hex. ‘Aunque esta caracteristica es enteramente automitica, usted tiene que estar alerta cuando progra- me y depure programas en lenguaje ensamblador. Un programador de lenguaje ensamblador tiene que distinguir claramente entre ta direccién y los confenidos de una Localidad de memoria. En el ejemplo anterior, el contenido de la lacalidad 5612 es 01 y el contenido de la localidad 5613 es 04. SEGMENTOS Y DIRECCIONAMIENTO. ‘Un segmento es un area especial en un programa que inicia en un limite de un parrafo, esto es, en una localidad regularmente divisible entre 16, 0 10 hex. Aunque un segmento puede estar ubicado casi cn cualquier lugar de la memoria y, en modo real, puede ser hasta de 64K, sdlo necesita tanto espacio como ¢] programa requiera para su ejecucién. ‘Segmentos y direccionamiento n Un segmento en modo real puede ser de hasta 64K. Se puede tener cualquier mimero de seg- ‘mentos; para direccionar un segmento en particular basta cambiar la direccién en el registro del ‘segmento apropiado, Los tres segmentos principales son los segmentos de cédigo, de datos y de la pila. Segmento de cédigo 8 El segmento de cédigo (CS) contiene las instrucciones de méquina que son ejecutadas. Por lo comin, la primera instruccién ejecutable esté en el inicio del segmento, y el sistema operativo enlaza a esa localidad para iniciar la ejecucidn del programa, Como su nombre indica, el registro del CS direcciona el segmento de c6digo. Si su area de cédigo requiere mis de 64K, su programa puede necesitar definir més de un segmento de cédigo. Segmento de datos El segmento de datos (DS) contiene datos, constantes y areas de trabajo definidos por el progra- ma. El registro del DS direcciona el segmento de datos, Si su rea de datos requiere de mis de 64K, su programa puede necesitar definir mas de un segmento de datos. Segmento de la pila En términos sencillos, la pila contiene los datos y direcciones que usted necesita guardar tempo- ralmente o para uso de sus “Iamadas” subrutinas. El Tegistro del segmento de la pila (SS) direeciona el segmento de la pila. Limites de los segmentos Los registros de segmentos contienen la direccién inicial de cada Segmento. La figura 1-4 presenta lun esquema de los registros CS, DS y SS; los registros y segmentos no necesariamente estin en el orden mostrado. Otros registros de segmentos son el ES (segmento extra) y, en los procesadores 80386 y posteriores, los registros FS y GS, que tienen usos especializados. Como ya dijimos, un segmento inicia en un limite de parrafo, que ¢s una direccién por lo comiin divisible entre ¢l 16 decimal, 0 10 hex. Suponga que un segmento de datos inicia en la Jocalidad de memoria 045FOH. ‘Ya que en este y todos los demas casos el ultimo digito hexadecimal de la derecha es cero, los disefiadores de computadora decidieron que seria innecesario almacenar el digito cero en el registro del segmento, Asi, 045FOH se almacena como 045F. con el cero de la extrema derecha sobrentendido, En donde sea apropiado, el texto indica al cero de la derecha con corchetes, como en 045F[0]. Figura 14 Segmentos y registros 12 Introduccién al hardware delaPC — Capitulo 1 Desplaxamientos de segmentos En un programa, todas las localidades de memoria estén referidas a una direccidn inicial de segmento. La distancia en bytes desde la direccién del segmento se define como el desplazamiento (offset), Un desplazamiento de dos bytes (16 bits) puede estar en el rango de OOOOH hasta FFFFH, © bien, desde cero hasta 65,935. Asi, el primer byte del segmento de cédigo tiene un desplaza- micnto 00, el segundo byte tiene un desplazamicnio O1, etc., hasta el desplazamiento 65,535. Para referir cualquier direccién de memoria en un segmento, ¢] procesador combina la direccion del segmento en un registro de segmento con un valor de desplazamiento. En el ejemplo siguiente, ¢l registro DS contiene la direccién de segmento del segmento de datos en O4SF{0] hexadecimal y una instruccién hace referencia ‘a una localidad con un desplaza- miento de 0032H bytes dentro del segmento de datos. | | ‘ineccidin de segmento O4SFOH esplazamiento 32H Por tanto, 1a localidad real de memoria del byte referido por la instruccién es 04622H: Direceién del segmento DS: 04SFOH Desplazamiento: +0032 Direccién real: (4622H Note que un programa tiene uno o mis segmentos, los cuales pueden iniciar casi en cual- quier lugar de memoria, variar en tamafo y estar en cualquier orden, Capacidad de direccionamiento La serie de PC ha usado varios procesadores Intel que proporcionan diferentes capacidades de direccionamiento, Direccionamiento de 8086/8088. Los registros de los procesadores 8086/8088 proporcio- nan 16 bits. Ya que una direcciGn de segmento esta en el limite de un pirrafo, los 4 bits de la extrema derecha de su direccién son cero. Como ya vimos, una direccién es almacenada en un registro de segmento, y la computadora asume los cuatro ultimos bits de la derecha como ceros (un digito hexadecimal), como nnnn{0] hex. Ahora, FFFF[O}H permite direccionar hasta 1,048,560 bytes. Si tiene duda, decodifique cada F hex como el 1111 binario, considere los cuatro dltimos bits de La derecha como ccros y sume los valores de los bits a | Direccionamiento 80286. En modo real, el procesador 80286 maneja el direccionamiento de la misma manera que lo hace ¢} 8086. En modo protegido, e! procesador utiliza 24 bits para direccionamiento, de manera que FFFFF[O] permite direccionar hasta 16 millones de bytes. Los registros de segmento actian como seleccionadores para acoesar una direcciGn de segmento de 24 bits de la memoria y sumar este valor a un desplazamiento de direccidn de 16 bits: Regivro de sogmerwo: 16 bits (0000), Direceioa det segmento: 2a bine Registros 13 Direccionamiento 80386/486/586. En modo real, estos procesadores manejan el direc- cionamiento de forma muy parecida a como lo hace un 8086. En modo protegido, los procesadores utilizan 48 bits para el direccionamiento, lo que permite direcciones de segmento de hasta cuatro mil millones de bytes. Los registros de segmemto de 16 bits actiian como seleccionadores para el acceso a direcciones de segmento de 32 bits de la memoria y para agregar este valor a un despla- zamiento de direccién de 32 bits: REGISTROS Los registros del procesador se emplean para controlar instrucciones en ejecucién, manejar direccionamiento de memoria y proporcionar capacidad aritmética. Los registros son direccionables por medio de un nombre, Los bits, por convencién, se numeran de derecha a izquierda, como en: 5413121 09876543210 Registros de segmento Un registro de segmento tiene 16 bits de longitud y facilita un dea de memoria para direccionamiento conocida como el segmento actual, Como hemos dicho, un segmento se alinea en un limite de pirrafo y su direcei6n en un registro de segmento supone cuatro bits 0 a su derecha, Registro CS. EI DOS almacena la direccién inicial del segmento de cédigo de un progra- ma en el registro CS. Esta direceién de segmento, més un valor de desplazamiento en el registro de apuntador de instruccién (IP), indica la direcciOn de una instruccién que es buscada para su ejecucién. Para propésitos de programacién normal, no se necesita referenciar el registro CS. Registro DS. La direcciGn inicial de un segmento de datos de programa es almacenada en el registro DS. En términos sencillos, esta direccién, mis un valor de desplazamiento en una instruccién, genera una referencia a la localidad de un byte especifico en el segmento de datos. Registro SS. _El registro SS permite la colocacién en memoria de una pila, para almacena- miento temporal de direcciones y datos, El DOS almacena la direccién de inicio del segmento de pila de un programa en cl registro SS. Esta direccién de segmento, mas un valor de desplazamien- to en ¢l registro del apuntador de la pila (SP), indica la palabra actual en la pila que esti siendo direccionada, Para propdsitos de programacién normal, no se necesita referenciar el registro SS, Registro ES. Algunas operaciones con cadenas de caracteres (datos de. caracteres) utilizan ¢l registro extra de segmento para manejar el direccionamiento de memoria, En este contexto, el Tegistro ES estd asociado con el registro DI (indice). Un programa que requiere el uso del registro. ES puede inicializarlo con una direccién de segmento apropiada. Registros FS y GS. Son registros extra de segmento en los procesadores 80386 y poste- tiores., 4 Introduccion al hardware de laPC Capitulo 1 Registro de apuntador de instrucciones El registro apuntador de instrucciones (IP) de 16 bis contiene el desplazamiento de direcci6n de la siguiente instrucci6n que se ejecuta. El IP esté asociado con el registro CS en el sentido de que el IP indica la instruccién actual dentro del segmento de c6digo que se esté ejecutando actualmente, Por lo comiin, usted no refiere el registro IP en un programa, pero, para probar un programa, si puede cambiar su valor por medio del programa DEBUG de! DOS. Los procesadores 80386 y osteriores tienen un IP ampliado de 32 bits, lamado E1P. En el ejemplo siguiente, el registro CS contiene 25A4{0]H y el IP contiene 412H. Para ‘encontrar la siguiente instrucciGn que sera ejecutada, el procesador combina las direcciones en el €S y el IP: Segmento de direccién en el registro CS: 2S5A40H Desplazamiento de direccién en el registro IP: + 412H Direccién de la siguiente instruceién: 25E52H Registros apuntadores Los registros SP (apuntador de la pila) y BP (apuntador base) estén asociados con ¢l registro SS y permiten al sistema accesar datos en el segmento de la pila. Registro SP. El apuntador de la pila de 16 bits esta asociado con el registro SS y propor- cciona un valor de desplazamiento que se refiere a la palabra actual que esté siendo procesada en la pila. Los procesadores 80386 y posteriores tienen un apuntador de pila de 32 bits, el registro ESP. El sistema maneja de manera automdtica estos registros. En el ejemplo siguiente, el registro SS contiene la direccién de segmento 27B3{0}H y el SP, cel desplazamiento 312H. Para encontrar la palabra actual que esté siendo procesada en la pila, 1a ‘computadora combina las direcciones en el SS y el SP: Direccién de segmento en el registro SS: 27830H Desplazamiento en el registro SP: +310H Direccién en la pila: 27E42H 27830] 31H Direcciém del segmento SS Desplazamiemo del SP Registro BP, El BP de 16 bits facilita la referencia de parimetras, los cuales son datos y direcciones transmitidos via la pila, Los procesadores 80386 y psteriores tienen un BP ampliado de 32 bits Hamado el registro EBP. Registros de propésito general Los registros de propésito general AX, BX, CX y DX son los caballos de batalla del sistema. Son tinicos en el sentido de que se puede direccionarios como una palabra o como una parte de un byte. El ultimo byte de la izquierda es la parte “alta”, y cl Ultimo byte de la derecha es la parte “baja”. Por ejemplo, el registro CX consta de una parte CH (alta) y una parte CL (baja), y usted puede referrirse a cualquier parte por su nombre. Las instrucciones siguientes mueven ceros a los regis- tros CX, CH y CL, respectivamente. Registros a 15 wr X00 Mov cH,00 wy cL,00 Los procesadores 80386 y posteriores permiten el uso de todos los registros de propésito general, mas sus versiones ampliadas de 32 bits: EAX, EBX, ECX y EDX. Registro AX. El registro AX, el acumulador principal, es utilizado para operaciones que implican entrada/salida y la mayor parte de la aritmética. Por ejemplo, las instrucciones para muttiplicar, dividir y traducir suponen el uso del AX. También, algunas operaciones generan cédigo mas eficiente si se refieren al AX en lugar de a los otros registros. ax | AH AL FAX: Registro BX. El BX es conocido como el registro base ya que es el tinico registro de propésito general que puede ser un indice para direccionamiento indexado. También es comin emplear el BX para célculos. EBX: Registro CX. El CX es conocido como ¢l registro contador. Puede contener un valor para controlar el nimero de veces que un ciclo se repite o un valor para corrimiento de bits, hacia la derecha o hacia la izquierda, El CX también es usado para muchos clculos. [a a BCX: Registro DX. El DX es conocido como el registro de datos. Algunas operaciones de entra- |«--Aselt—»| rooee:eik 099 we. wo03020 OE eae = eI ro0eK 120830 = hiienaniniesiat Sees ssewe * Cada linea despliega 16 bytes de memoria. La direccién de la izquierda se refiere solo al ultimo byte de Ia izquierda, en la forma segmento:desplazamiento; puede contar atravesando la linea para determinar la posicion de cada byte. El area de representacion hexadecimal muestra dos caracte- res hexadecimales por cada byte, seguides por un espacio en blanco por legibilidad. Adem, un guién separa a los segundos ocho bytes de los primeros ocho, otra vez por legibilidad. Asi, si usted necesita localizar el byte cn el desplazamiento xx13H, inicie con xx10H y cuente tres bytes sucesivos a la derecha, Este libro hace un uso considerable de DEBUG y explica en detalle sus comandos conforme se necesitan. El apéndice E proporciona una descripcién completa de los comandos de DEBUG. Inicio con DEBUG: Para empezar con DEBUG, coloque el sistema en el directorio del disco duro que contenga DEBUG o0 bien inserte un disco flexible con el DOS: que contenga el DEBUG en la unidad por omisién. Para iniciar el programa, teclee la palabra DEBUG y presione la tecla Enter. DEBUG debe cargarse del disco a la memoria. Cuando ¢l indicador de DEBUG, un guidn (-), aparezca en la pantalla, DEBUG esta listo para recibir sus comandos (esto es un guién, aunque parezca el cursor). Ahora usemos DEBUG para curioscar por la memoria. VISUALIZACION DE LAS LOCALIDADES DE MEMORIA. En nuestro primer ejercicio, usted usari DEBUG para ver el contenido de localidades sclecciona- das de la memoria, El Ginico comando por el que estard interesado en este ejercicio es D (Display, mostrar), ¢1 cual lista ocho Ifneas de 16 bytes cada una y muestra su representacién hexadecimal y ASCII. Verificacién del equipo del sistema Primero veamos qué es lo que ha determinado el BIOS que tiene instalado su equipo. Una palabra el estado del equipo en el area de datos del BIOS, offece una indicacién rudimentaria de los dis- positives instalados, Esta palabra esté en las localidades 410H-411H, que pucde ver desde DEBUG por medio de una direccién de dos partes: 40 para la direcciGn del segmento (se sobrentiende el ‘timo cero) y 10 para el desplazamiento desde la direccién del segmento. Lea la direccién 40:10 como segmento 40[0]H mas un desplazamicnio de 10H. Teclee de manera exacta lo siguiente: D 40:10 ly presione la tecla Enter] El despliegue debe empezar con algo como esto: 040,020 63 44 En este ejemplo, los dos bytes en la palabra del estado del equipo contienen los valores hexadecimales 63 y 44. Invierta los bytes (44 63) y conviértalos a binario: \Visualizacién de las localidades de memoria a Bit: i 4 13 12 1m 10 9 8 7 6 5 Binrio: 0 1 0 O O 1 0 0 0 1 1 ou ° 4 0 A continuaci6n esté una explicaciGn del cédigo hexadecimal: BITS —_DISPOSITIVO 15,14 Ndmero de puertos paralclos para impresora conectados = 1 (binario 01) 11-9 — Numero de puertos seriales conectados = 2 (binario 010) 76 ‘Niimero de dispositivos de disco flexible = 2 (donde 00 = 1, 01 = 2, 10=3 y l= 4) 54 ‘Modo inicial de video = 10 (donde 01 = 40 x 25 en color, 10 = 80 x 1225en color y 11 = 80 x12 25 monocromitico) 1 1 = coprocesador matemsitico estd presente 0 1 = unidad de disco flexible esta presente ‘Los bytes no citados no son usados. Puede permanecer en DEBUG para el siguiente ejercicio 0 introduzca Q para salir. ‘Verificacién del tamaiio de la memoria El siguiente paso es examinar la cantidad de memoria que el DOS “piensa” que tiene instalada. Dependiendo del modelo de su computadora, el valot puede estar basado en interruptores internos yy puede indicar menos memoria de la que realmente esté instalada. El valor esti en el area de datos del BIOS en las localidades 413H y 414H. Teclee lo siguiente exactamente como lo ve: 1D 40:13 {y presione Enter) El despliegue debe empezar con algo como esto: 0040-0033 2... eR. Los primeros dos bytes mostrados en el desplazamiento 0013H son los kilobytes de memoria en twxadecimal, con los bytes en secuencia inversa. Aqui estin dos ejemplos que mucstran hexade- cimales en orden inverso, hexadecimales corregidos y el equivalente en decimal; HEXADEGIMAL INVERSO HEXADECIMAL CORREGIDO DECIMAL (kK) 00.02 0200 512 8002 02 80 640 Verificacién del mimero de serie y de la nota de derechos reservados El ndimero de serie de la computadora estii alojado en el ROM de BIOS en la localidad FEO0OH, Para verlo, teclee 1D FH00:0 Ly presione snter} La pantalla debe mostrar un niimero de serie de siete digitos seguido, en méquinas convenciona- les, de una nota de derechos reservados. El niimero de serie se muestra como niimero hexadecimal, mientras que la nota de derechos reservados es més reconocible en el area ASCII ala derecha. La 32 Ejecucién de instrucciones Capitulo 3 nota de derechos reservados puede continuar pasando sobre lo que ya esté mostrado; para verla, basta con presionar D, seguida de la tecka Enter, Verificacién de la fecha en el ROM BIOS La fecha de fabricacién de su ROM BIOS inicia en la localidad FFFFSH, registrada como mm/ dd/aa, Para verla, teclee D FFFF:5 [y presione Enter) El conocimiento de esta fecha puede ser itil para determinar la edad y modelo de la computadora. Verificacién de la identificacién del modelo Inmediatamente después de la fecha de fabricacién del ROM BIOS esta la identificacion del modelo en la localidad FFFFEH, o FFFF:E, Aqui estin varias idemificaciones de modelos: cépico MODELO F8 PS/2 modelos 70 y 80 F9 PC convertible FA PS/2 modelo 30 FB PC-XT (1986) FC PC-AT (1984), PC-XT modelo 286, PS/2 modelos 50 y 60, eteétera FE PC-XT (1982), portitil (1982) FF Primera IBM PC Ahora que ya sabe cémo usar el comando para desple gar informacién, puede ver el conteni- do de cualquier localidad de almacenamiento. También puede avanzar por la memoria con silo presionar D de forma repetida: DEBUG muestra de manera sucesiva ocho lineas, continuando a partir de la dltima operacién D. Cuando haya terminado de curiosear, introduzca Q (por Quit), para salir de DEBUG 0 continge con el ejercicio siguiente. EJEMPLO I DE LENGUAJE DE MAQUINA: DATOS INMEDIATOS Ahora usemos DEBUG para introducir el primero de dos programas directamenie en memoria y rastrear su ejecucién. Ambos programas ilustran un sencillo cédigo de lenguaje de maquina y cémo aparece en el almacenamiento principal y los efectos de su ejecucin. Para este propisito, empe- zaremos con el comando DEBUG E (Enter, introducir). Sea muy cuidadoso en su uso, ya que introducir datos incorrectas o en una localidad equivocada puede causar resultados impredecibles. No es probable que cause datos, pero puede sorprenderse y perder datos que haya introducido durante la sesién de DEBUG. El primer programa utiliza datos inmediatos, datos definides como parte de una instruccién. Mostramos el lenguaje de maquina en formato hexadecimal y para legibilidad en cddigo simbéli- ‘co, junto con una explicacién, Para la primera instruccién, el codigo simbolico es MOV AX,0123, Ia cual mueve (0 copia) el valor 0123H al registro AX (no tiene que definir un valor inmediato en Ejemplo | de Fenguaje de maquina: datos inmediatos 33 secuencia inversa de byte). MOV es la instruccién, et registro AX es ¢l primer operando y el valor inmediato 0123H es el segundo operando. INSTRUCCION DE coniGo MAQUINA ‘SIMBOLICO EXPLICACION 82301 MOV AX, 0123 Mover e1 valor 0123H a AX. 052500 xDD AX, 0025 Sumar e1 valor 0025H @ AX. eave MOV BK.AK Mover el contenido de AX a BX. o3ne ADD BK,AK Sumar e} contenido de AX a BX ance MOV Cx. Bx Mover el contenido de BX a Ck. 2ac8 SUB CK.AK Restar el contenido de AX del de Cx 28c0 SUB AX, AX Restar AX de AX (Limpiar AX) 90 wor No operacién (no hacer nada) Puede haber notado que las instrucciones de méquina pueden tener uno, dos o tres bytes de longitud. El primer byte es la operacién real y cualesquiera otros bytes, si estin presentes, son operandos: referencia a un valor inmediato, un registro 0 una localidad de memoria. La ejecucién del programa empieza con la primera instruccién de maquina y avanza por cada instruccion, una después de otra. Al Hegar a este punto no esperamos que tenga mucho sentido el cédigo de miquina. Por ejemplo, en un caso el cédigo de méquina (el primer byte) para mover es BB hex y en otra caso el eédigo para mover es 8B hex. Cémo introducir instrucciones de programa Iniciamos este ejercicio como lo hicimos con el anterior: teclee el comando DEBUG y presione Enter. Cuando DEBUG esté cargado por completo, despliega su indicacién (-). Para introducir este programa directamente en memoria, sélo teclee la parte de lenguaje de mAquina, pero no et ccédigo simbdlico o la explicacién. Teclee el siguiente comando E (Enter), incluso los espacios en blanco en dénde se indican: E CS:1000 88 23 01 0S 25 00 [presione Enter! CS: 100 indica la direccién de memoria inicial en la que los datos se almacenaran ~100H (256) bytes siguiendo al inicio del segmento de cédigo (la direccién de inicio usual para el cédigo de maquina con DEBUG). El comando E hace que DEBUG almacene cada par de digitos hexadecimales en un byte de memoria, desde CS:100 hasta CS:105. El siguiente comando E almacena seis bytes, empezando en CS:106 a 107, 108, 109, 10Ay 10B: © C5:106 8B DE 03 DE 8B CB [seguido por Enter} E| Giltimo comando E almacena cinco bytes, iniciando en CS:10C a 10D, 10E, 10F y 110: E C5:10C 28 C8 2B CO 90 [seguido por Enter] ‘Si teclea un comando de manera incorrecta, s6lo repitalo con los valores correctos. Ejecucion de instrucciones Capitulo 3 €8:100 BB 23 01 05 25 00 $S:206 88 D8 03 Da 8B CB 8:20¢ 28 C8 2B co 90 -R ‘AX0000 BX=0000 CxX=0000 DX*0000 SPeFFEE BP=0000 St=0000 DI=0000 DSe21CL BSe2iCl $Se21C1 CS=2iCl P0100 MV UP EI PL NZ MA PO NC Mov “AX, 0123 a AK=0123 BX=0000 Cx=0000 DX+0000 SPaFFEE BP.0000 s1=0000 D1~0000 DSe21CL ESe21C1 §8«21C1_ CB=21C1 TPs0103 NV UP EI PL NZ MA PO NC 24C1:0103 052500 ‘ADD “AK, 0025 7 AX=0148 BX~0000 CX=0000 DX-0000 SP=FFEE BP=0000 s1=0000 DI-9000 DSa21CL BSn21C1 $$+21C1 CSa21C1_TP.0106 MV UP EI PL NZ NA PE NC 21C1:0206 S808 mov BX, AK AM*0148 BX=0148 CX=0000 DX=0000 SP-FFER BP-0000 1-000 D1-0000 DSe21CL ES~2iCi $$+21C1_ C¥a21C1_ [P0108 NV UP EI PL NZ NA PE NC 24C1:0108 o3Ds ADD” BK, AX 7 AX=0148 BX=0290 CX=0000 DX=0000 SP-FFEE BP=0000 SI=0000 DI=0000 DSe21CL BS~21C1 $$-21C1 C211 TPO1OA NV UP EI PL NZ AC PE NC 24CL:010A BBCB Mov CK, Bx AK=0148 BX=0290 CX*0290 DX90000 SPeFFRE BP#0000 SIm0000 DI*0000 DSe21C1_ ES~21C1 $S«21C1 CS=21Cl TPeO10C MV UP BI PL.NZ AC PE NC 3el 0106 aece suBCX,AX AM=0248 BX~0290 CX+0148 DX~0000 SP-FFEE BP=0000 SI~0000 pr«0000 DS=21Cl BSe21Cl SSe21Cl CS=21C1 IPeO10E NV UP BI PL NZ AC PE NC 2uci:0108 28C0 BURAK AX AX+0000 BX=0290 CX=0148 DX=0000 SP=FFEE BP=0000 SI=0000 DI-0000 DS=21CL ES=21C1 $S=21C1 CS=2iCl [P-0110 MV UP EI PL ZR MA PE NC 71c1:0110 90 ‘NOP Figura 3-1 Rastreo de las instrucciones de maquina Ejecucién de instrucciones de programa Ahora es algo sencillo ejecutar las instrucciones anteriores, una a la vez. La figura 3-1 muestra todos fos pasos, incluyendo los comandos E. Su pantalla debe mostrar resultados semejantes cuando introduzca cada comando DEBUG. Al mismo tiempo, puede ver el contenido de los registros después de cada instruccién. Los comandos DEBUG que nos conciernen aqui son R (registro) y T(trace, rastreo). Para ver los contenidos iniciales de los registros y las banderas, teclee el comando R, seguido por la tecla Enter. DEBUG muestra el contenido de los registros en formato hexadecimal, Por ejemplo, ‘AXu0006 BXe0000 ... Ejemplo | de lenguaje de maquina: datos inmediatos 35 A causa de las diferencias entre las distinias versiones del DOS, el contenido de algunos registros en su pantalla pueden diferir de los que muestra en la figura 3-1. El registro IP muestra 1P=0100, indicando que la ejecucién de instrucciones inicia 10H bytes después del inicio del segmento de cédigo (por esto se us6 E CS:100 para introducir el inicio del programa). El registro de banderas en la figura 3-1 muestra la siguiente configuracién: MV UP EI PL NZ NA PO NC Esta configuraci6n significa no desbordamiento, direccién hacia arriba (o hacia la derecha), inte- rrupcidn habilitada, signo positive, no cero, no acarreo auxiliar, paridad impar y no acarreo, respectivamente, En este momento, ninguno de estos valores es importante para nosotros. El comando R también muestra en el desplazamiento 0100H la primera instruccién que es cjecutada. Note que en Ja figura el registro CS contiene 21C1. Ya que es seguro que su direccién de segmento CS, difiera de ésta, la mostraremos como Xxx para las instrucciones: woot: 0100 862302 MOV AX, 0229 «+ xxx indica el inicio del segmento de cédigo como xxxx{0]. El valor xxxx:0100 significa desplazarse 10H bytes después de la direccién del segmento CS xxxx{0). = B82301 es el cédigo de maquina que usted introdujo en CS:100. » MOV AX,0123 es la instruccién simbélica en ensamblador para el cédigo de maquina. Esta instruccién significa, en realidad, mover el valor inmediato 0123H al registro AX. DEBUG ha “desensamblado” las instrucciones de maquina de manera que usted pueda interpretarlas de manera més ficil. En capitulos posteriores, codificara exclusivamente instrucciones en digo ensamblador. En este momento, Ia instruccién MOV no ha sido ejecutada. Para ese propésito, teclee T (trace, rastrear) y presione la tecla Enter. El cédigo de maquina es B8 (mover al registro AX) seguido por 2301. La operacién mueve el 23 a la mitad baja (AL) del registro AX y el OL a la mitad alta (AH) del registro AX: ai xt x: [era DEBUG muestra los resultados en los registros. El contenido del registro IP es 0103H, que indica la ubicacién del desplazamiento en el segmento de cédigo de la siguiente instruccién que seri ejecutada, a saber: yoo: 0103 052500 ADD AX, 0025 Para cjecutar esta instruccién, introduzca otra T. La instruccién ADD suma 25H a la mitad baja (AL) del registro AX y OOH a la mitad alta (AH), en realidad suma 0025H al AX. Ahora AX contiene 0148H y el IP contiene 016H para la siguiente instruccién que sera ejecutada: yoo 0106 8BDB MOV BX,AX ‘Tectee otro comando T. La instruccién MOV mueve el contenido del registro AX al registro BX. Note que después de mover BX contiene 0148H. AX atin contiene O148H, ya que MOV copia en jugar de realmente mover los datos de una localidad a otra. Ejecucién de instrucciones Capitulo 3 ‘Ahora teclee de manera sucesiva comandos T para pasar por el resto de las instrucciones. La instrucciém ADD suma el contenido de AX a BX, dando 0290H en BX. Después el programa mueve (copia) el contenido de BX a CX, resta AX de CX y resta AX de él mismo. Después de la {iltima operacién, la bandera de cero se cambia de NZ (no cero) a ZR (cero), para indicar que cl resultado de la Ultima operaci6n fue cero (restar AX de él mismo lo deja en cero). Si quiere volver a cjecutar estas instrucciones, inicie el registro IP con 100H y rastree otra vez, Introduzca R IP, introduzca 100 y después R y el nimero requerido de comandos T, todos seguidos por la tecla Enter. Cémo mostrar el contenido de memoria Aunque también puede presionar T para la tltima instruccién, NOP (no operacién), esta instruc- cién no realiza cosa alguna. En lugar de eso, para ver el programa en lenguaje de maquina en el segmento de cédigo, requiere un despliegue como: BD cs:200 Ahora DEBUG muestra 16 bytes (32 digitos hexadecimales) de datos en cada linea. A la derecha esti la representacién ASCII (si es imprimible) de cada byte (pareja de digitos hexadecimales). En el caso de cédigo de maquina, la representacién ASCII earece de significado y puede ser ignora- da. Secciones posteriores estudian con mayor detalle el lado correcto del despliegue. La primera linea del despliegue inicia en el desplazamiento 100H del segmento de c6digo y representa el contenido de las localidades CS:100 hasta CS:10F. La segunda linea representa el contenido de CS:110 hasta CS:11F. Aunque su programa termina en CS:110, el comando D en forma automética muestra ocho lineas desde CS:100 hasta CS:170. La figura 3-2 muestra los resultados del comando D CS:100. Esperemos que el cédigo de mAquina desde CS:100 hasta 110 sea idéntico al que muestre su pantalla; los bytes que siguen pueden contener algo. También, la figura (3-1) muestra que los registros DS, ES, SS y CS todos contienen la misma direccién. Esto es porque DEBUG trata el érea de programa como un segmen- {0, con e6digo y datos (si existen) en el mismo segmento, aunque usted debe mantenerlos separa- dos, * Introduzea Q (Quit) para terminar Ia sesién con DEBUG, 0 continiie con el ejercicio si- guiente. =D C8100 21C1:0100 88 23 01 05 25 00 8B Da-03 Da 6B CB 2B CB 2B CO 90.3 @D 46 14 50 Si 52-FP 76 28 B8 74 00 8B ES bo 50 76 30 PF 76 28 FF 76 28 15 8B PP 36 26 12 8B 76 21 3A 89 3D 0A 00 75 32 AL 16 DB 00 53 50 8B 76 28 FF 74 3A A}-16 12 89 1E 18 12 EB FA 2ic1:0170 CD 8B BS 30 B4 3D OD 00-74 OA #3 06 16 12 01 83 Figura 3-2 Vaciado del segmento de cédigo Ejemplo Hl de lenguaje de maquina: datos definidos 37 ‘Cémo corregir una entrada Siusted introduce un valor errdneo en el segmento de datos o en el segmento de cédigo, reintroduzca el comando E para corregirlo. También, reanude !a ejecucién en la primer instruccién iniclando el registro IP con 0100. Teclee el comando R seguido por el registro designado, esto es, R IP [Enter]. DEBUG muestra e! contenido de! IP y espera por una entrada. Teclee el valor 0100 (seguido por Enter). Después, teclee un comando R (sin el IP). DEBUG muestra los registros, banderas y la primera instruccién que sera ejecutada. Usted ahora puede utilizar T para volver a rastrear las instrucciones paso a paso. Si su programa acumula totales, puede limpiar algunos registros y localidades de memoria; pero asegiirese de no cambiar e1 contenido de los registros CS, DS, SPy SS, todos ellos tienen propésitos especificos. EJEMPLO Il DE LENGUAJE DE MAQUINA: DATOS DEFINIDOS El ejemplo anterior usé valores inmediatos definidos directamente en las instrucciones MOV y ADD, Ahora ilustraremos un ejemplo parecido que define los valores de los datos (0 constantes) 0123H y 025H como clementos separados dentro del programa. El programa ¢s para accesar las localidades de memoria que contienen estos valores, ‘Al avanzar en este ejemplo debe hacerse una idea de cémo una computadora accesa los datos por medio de direcciones en el registro DS y direcciones de desplazamicnto. El ejemplo define los siguientes elementos de datos y contenidos: DESPLAZAMIENTO DS CONTENIDO HEXADECIMAL 2008 pion ozo2n asoox e204 oon o2osi 2x2A2A Recuerde que un digito hexadecimal ocupa medio byte, asi que, por ejemplo, 23H (el primer byte) es almacenado en el desplazamiento 0200H del drea de datos y O1H (el segundo byte) es almace- nado en el desplazamiento 0201H. A continuacién estén las instrucciones en lenguaje de méquina que procesan estos datos: INSTRUCCION EXPLICACION 10002 Mover la palabra (dos bytes) que inicia en el DS con desplazamiento ‘(20H al registro AX. 03060202 Sumar el contenido de 1a palabra (dos bytes) que inicia en el DS con desplazamiento 0202H al registro AX. A30402 Mover el contenido del registro AX a la palabra que inicia en el DS con desplazamiento 0204H. 9 No operacién, Puede haber notado que las dos instrucciones para mover tienen diferentes cOdigos de maquina: Aly A3. El cédigo real de maquina es dependicnte de los registros a los que esté referenciando, Ejecucién de instrucciones Capitulo 3 el tamafo de los datos, la direccién de transferencia de datos (de 0 hacia un registro) y de la referencia a datos inmediatos o en memoria. ‘Cémo introducir instrucciones de programa Otra vez, puede utilizar DEBUG para introducir el programa y observar su ejecucién. Primero, utilice los comandos E (Enter) para definir los datos, iniciando en DS:0200; £ 08:0200 23 01 25 00 00 00 [presione Enter] B DS:0206 2A 2A 2A [presione Enter] Ahora utilice el comando E para teclear las instrucciones, otra vez iniciando en CS:100: # CSi100 Al 00 02 03 06 02 02 [presiona Enter} = CS:107 Al Ad 02 90 [presione Enter} El primes comando E almacena las tres palabras (seis bytes) en el inicio del direa de datos, DS:0200. Note que tiene que introducir estas palabras con los bytes en orden inverso, de manera que 0123 es 2301 y 0025 es 2500. Cuando la instruccién MOV accesa de manera secuencial estas palabras y las carga en un registro, “deshace la inversién”, es decir, vuelve a invertir ¢l orden de los bytes, de modo que 2301 se convierte en 0123 y 2500 en 0025. El segundo comando E almacena tres asteriscos (***), definidos como 2A2A2A, de modo que usted pueda verlos mis tarde utilizando el comando D (Display, mostrar), De lo contrario, estos asteriscos no sirven para algin propésito particular en el segmento de datos. La figura 3-3 muestra todos los pasos en el programa, incluyendo los comandos E. Su pantalla debe mostrar resultados parecidos, aunque las direcciones en el CS y DS tal vez. puedan diferir. Para examinar los datos almacenados (en DS:200H a 208H) y las instrucciones (en CS: 100H a 10AH), teclee los siguientes comandos D: Para ver los datos: D DS:200,208 (presione ater] Para ver el cOdigo: D (5:100,10A {presione Enter) Verifique que los contenidos de ambas éreas (distintas a las direcciones de segmento) sean idénti- cas a las que se muestran en Ia figura 3-3. ‘Cémo ejecutar instrucciones de programa Puede ejecutar las instrucciones mostradas en la forma que ya se dijo. Presione R para ver el contenido de los registros y de las banderas y para mostrar la primera instrucci6n. Los regis- tros contienen los tismos valores que al inicio del primer ejemplo. La primera instruccién mos- trada es: 900% 10100 A10002 MOV AX, [0200) ’ CS:0100 hace referencia a su primera instruccién, A10002. DEBUG interpreta esta instruc- cin como un MOV y determina que la referencia ¢s a la primera localidad [0200H] en el area de datos. Los corchetes son para indicarle que esta referencia ¢s a una direccién de memoria y no cs Ejemplo Il de lenguaje de maquina: datos definidos 39 at 90" AL 00 02 03 06 02 02 A3-04 02 90 wisaspiiee BX+0000 CX~0000 DX~0000 SPAFFEE BPe9000 SI-0g00 Di-0000 BS=21C1 $S=21CL CSe21C1 P0100 0100 AL0002 Mov" “Ax, (0200) * B-020000123 AX=0223 BX=0000 CX=0000 DX=0000 SP-FFEE BP=0000 St~0000 D1~0000 DSe21C1 ESe21Cl SSe21C1 CSe21C1 1Ps0103 MV UP BI PL NZ NA PO NC 21C1:0103 03060202 ‘ADD AK, (0202) DS:0202+0025 (CX=0000 Dx~0000 SP«FFER BP=0000 SI-0000 DI~0000 SS-21CL CS=21C1_1P=0107 NV UP BY PL NZ WA PE_NC 2u¢1 +0107 a30402 Mov [0208], ax S:02040000 AL=0148 BX*0000 CX=0000 DXe000 SPsFFEE BP=0000 Si=0000 D1~0000 DS<21C1 ESa21C) SS=20C1 CSe21Cl IPsOLOA NV UP EX PL NZ NA PE NC 21C1:020A 90 NOP 'DS:0200, 0208 10023. O1 25 00 48 O1 2A 2A-2A Aen eee Figura 3-3 Rastreo de las instrucciones de méquina tun valor inmediato. (Un valor inmediato para mover 0200H al registro AX apareceria como MOV ‘AX, 0200.) ‘Ahora teclee el comando T (trace, rastrear). La instruceién MOV AX, [0200] mueve e! con- tenido de la palabra en el desplazamiento 0200H al registro AX. El contenido es 2301H, el cual aparece en orden inverso en el AX como 0123H. Ingrese otro comando T para provocar la ejecucién de la siguiente instruccién, ADD. La ‘operacién suma el contenido de la palabra de memoria en DS con desplazamiento 0202 al registro AX. El resultado en el AX ahora es la suma de 0123H y 0025H, 0 0148H. La siguiente instruceién es MOV [0204],AX, Teclee un comando T para ejecutarla. La instruccién mueve el contenido del registro AX a la palabra de memoria en DS con desplazamien- to 0204H. Para ver los contenidos cambiados de los datos desde 200H hasta 208H, teclee D DS:200,208 (Enter) ‘Los valores mostrados deben ser: Valor enel drea de datos: 7} ol 25 00 «48 lA AOA | ' | | | | | | | Desplazaniento: 300 202 202-203 -20k 205 20620? 208 El valor 0148H es movido del registro AX al drea de datos con desplazamientos 208H y 205H y es invertido como 4801H. El lado izquierdo de la pantalla muestra los c6digos reales de maquina 40 Ejecucién de instrucciones Capitulo 3 como aparece en memoria. El lado derecho sélo ayuda a localizar los caracteres de manera més sencilla. Advierta que estos valores hexadecimales son representados a la derecha de la pantalla Por sus equivalentes ASCII. Asi 23H genera un simbolo de numero (#) y 25H genera un simbolo de por ciento (%) mientras que los tres bytes con 2AH generan asteriscos (*), Ya.que no hay mis instrucciones por ejecutar, introduzca Q (quit) para terminat la sesidn con DEBUG 0 contimie con el siguiente ejercicio (y recuerde restablecer el IP a 100), COMO INTRODUCIR UN PROGRAMA SIMBOLICO EN ENSAMBLADOR ‘Aunque en este momento los ejemplos de programas han sido en formato de lenguaje de maquina, también puede utilizar DEBUG para ingresar instrucciones simbdticas en lenguaje ensamblador, Puede encontrar ocasiones para usar ambos méiodos, Ahora examinemos cémo introducir enun- cindos en lenguaje ensamblador. El comando A El comando A (Assemble, ensamblar) le dice a DEBUG que acepte instrucciones simblicas en ensamblador y las convierta a lenguaje de maquina. Inicialice la direcciGn de inicio en el Segmento de cédigo con desplazamiento 100H para sus instrucciones como 200 fenter} DEBUG muestra el valor del segmento de cédigo y el desplazamiento como xxxx:0100. Teclee cada instruccién, seguida por Enter. Intente ingresar el programa siguiente: Mov At,25 (enter) “Oy m,32 [Enter] AID ALB Enter) moe [Enter, miter) Cuando haya tecleado el programa, presione otra vez Enter para salirse del comando A. Esto es, tun Enter extra, que le indica a DEBUG que ya no tiene mas instrucciones simbélicas por ingresar. Al ierminar, DEBUG debe mostrar lo siguiente: sot: 0100 MOV AL,25 room: 0102 Mov BL,32 voor: 0104 AOD AL, BL soo: 0106 mp Puede ver que DEBUG ha determinado la localidad de inicio de cada instruccién. Pero antes de ejecutar el programa, usemos el comando U (Unassemble, desensamblar) de DEBUG para exami- nar el lenguaje de méquina generado. Uso de la instruccién INT a” El comando U (Unassemble, desensamblar) El comando U de DEBUG muestra el cédigo de méquina para sus instrucciones en lenguaje ensamblador. Puede usar este comando para indicarle a DEBUG las localidades de la primera y altima instrucciones que quiere ver, en este caso, 10H y 106H. Teclee 8 100,106 [enter] La pantalla debe mostrar columnas para la localidad, el cédigo de maquina y el cédigo simbdlico: yecer:0100 O25 MOY AL,25 yooo0102 8332 WON BL,32 yoo0r:0104 GoD8 ADD AL, BL yo0%:0106 90 oP Ahora rastree la ejecucién del programa; el eédigo de méquina es lo que en realidad se ejecuta, Empiece por introducir R para desplegar los registros y la primer instruccién, y después T de manera sucesiva para rastrear las instrucciones subsecuentes. Cuando llegue a NOP de Ia locali- dad 106H, continde con el ejercicio siguiente o presione Q para salir de la ejecucién. Abora puede ver cémo ingresar un programa en cualquiera de los dos, lenguaje de maquina © lenguaje ensamblador. Sin embargo, DEBUG esta proyectado para lo que su nombre implica —depurar (debug) programas— y la mayoria de Jos esfuerzos que involucrardn el uso de lenguaje ensamblador convencional no estan asociados con DEBUG. USO DE LA INSTRUCCION INT Los tres ejemplos siguientes muestran cémo accesar el DOS y el BIOS para enviar informacién ‘acerca del sistema. Para este fin, se utiliza la instruccién INT (interrupcién), la cual sale de su progra- ‘ma, ingresa una rutina del DOS 0 de BIOS, realiza la funcién solictada y regresa a su programa. En lugar de avanzar un solo paso, usaremos el comando P (Proceed) de DEBUG para ejecutar toda la rutina de interrupeién. Cémo obtener el mimero de versin del DOS Existen ocasiones en que un programa necesita saber cudl es la versiGn del DOS que la compula- dora esti corriendo, ya que cada versin tiene disponibles nuevas funciones, La instruccién que nirega el nimero de versién es INT 21H del DOS, funcién 30H; esto es, cargue 30H en cl registro AH y solicite INT 21H.-Para probar esto, ingrese el comando A 100 de DEBUG y estas instrucciones en ensamblador: Moy AH,30 a (seguide por un enter adicional) Ejecuci6n de instrucciones Capitulo 3 Para rastrear la ejecucién de las instrucciones, primero ingrese R para ver los registros y T para rastrear MOV. En lugar de rastrear la instruccién INT, ingrese P (Proceed, proceder) para ejecu- tar toda la rutina del DOS. El proceso termina con la instruccién NOP. Ahora puede ver en el AL ¢l niimero principal de la versiGn del DOS, como X en DOS X.20, y en el AH el nimero secun- dario de la versién, como 14H (0 20) en DOS X.20. Presione Q para salir 0 continde con el ejercicio siguiente (y restablezea el IP a 100). ‘Cémo obtener la fecha actual Ahora que ya sabe cémo accesar el niimero de versién del DOS, puede utilizar un enfoque seme- jante para accesar la fecha actual. La instrucciGn para este propdsito es INT 21H del DOS, funcién 2AH. Una vez més, ingrese el comando A 100 de DEBUG y después el programa siguien. te de ensamblador: Ingrese R para mostrar los registros y R para ejecutar MOV. Después ingrese P para proceder con {a rutina de interrupcién; la operacién se detiene en la instruccién NOP. Los registros muestran esta informacién: + AL: — Dia de la semana (donde 0 = Domingo) * CX: Afio (en hexadecimal; por ejemplo, O7CDH = 1997) * DH: = Mes (01a 12) * DL: Dia del mes (01 a 31) * Presione Q para salir 0 continie con ¢l ejercicio siguiente. Cémo determinar el tamafo de la memoria En un ejercicio anterior, verificé las localidades 413H y 414H para saber la cantidad de memoria (RAM) que tiene su computadora. E! BIOS también proporciona una rutina de interrupcién, INT 12H, que entrega el tamafo de la memoria. Ingrese el comando A 100 de DEBUG y después estas instrucciones: we Ingrese R para mostrar los registros y la primera instruccién. La instruccién, INT 12H, transfiere cl control # una rutina en ¢l BIOS que entrega el tamafio de la memoria al AX. Presione T (y Enter) de forma repetida para ver cada instruccién del BIOS que se ejecuta (si, estamos violando una regia contra el rastreo de una interrupcién, pero esta vez todo funciona bien). Las instrucciones reales en su BIOS pueden diferir de éstas, dependiendo de la versién instalada (los comentarios a la derecha son del autor): ‘Cémo guardar un programa desde DEBUG 43 str iBstablece la interrupcién PUSH DS ;Guarda la direccién del DS en la pila wov AX, 0040 sSegnento 40(0)# Moy DS,AK. + nis Mov AX, 0013]; desplazaniento 00138 pop os jRestaura la direccién en el D5 IRET sRegresa de la interrupcién Si sobrevive a esta aventura con el BIOS, el AX contiene el tamafio de la memoria, en IK bytes. El tiltimo comando T sale del BIOS y regresa a DEBUG. La instruccién mostrada es el NOP que usted ingres6. Presione Q para salir 0 continde con el ejercicio siguiente (y restablezca el IP a 100). COMO GUARDAR UN PROGRAMA DESDE DEBUG Usted puede utilizar DEBUG para guardar un programa en disco bajo dos circunstancias: 1, Para leer el programa, modificarlo y después guardarlo, siga estos pasos: + Lea el programa bajo su nombre: DEBUG n:nombredearchivo, = Utilice el comando D para ver el programa en lenguaje de maquina y use E para ingresar os cambios. * Utilice el comando W (Write, escribir) para grabar el programa revisado. 2, Usar DEBUG para escribir un pequefio programa en lenguaje de méquina que ahora quiera guardar; siga estos pasos: * Solicite el programa DEBUG. * Utilice A (ensamblar) y E (ingresar) para crear el programa. + Ponga nombre al programa: N nombredearchivo.COM . La extensiGn del programa debe ser COM, (Véase el capitulo 7 para detalles de los archivos COM.) + Ya que sélo usted sabe dénde termina en realidad el programa, indique a DEBUG el tamaito del programa en bytes. Examine este: ejemplo: oo: 0100 MOV ALA 25 seoorrO102 MOV mL, 32 yo:0106 ADD AL, BL 2110106 NOP Puesto que la tiltima instruccién, NOP, es de un byte, el tamafio del programa es de 7 bytes, desde 100H hasta 106H, inclusive. + Primero utilice R BX para mostrar el BX, ¢ ingrese 0 para limpiarlo. «Ahora use R CX para mostrar el registro CX. DEBUG responde con CX 0000 (valor cero) y usted contesta con el tamafo del programa, 7. * Grabe el programa revisado: W [Enter]. “4 Ejecucién de instrucciones Capitulo 3 La razén para limpiar el BX es porque la longitud de! programa esté en la pareja BX:CX, aunque el CX es adecuado para nuestros propdsitos. DEBUG muestra un mensaje * Writing nnnn bytes” (Se escribieron nnn bytes). Si el niime- to es certo, se ha equivocado al introducir la longitud del programa; inténtelo ora vez. Tenga ‘cuidado en el tamafio del programa, ya que la Gltima instruccién puede ser mayor de un byte. EJEMPLO DE LENGUAJE ENSAMBLADOR: EL OPERADOR PTR Ahora examinemos otro programa que introduce algunas caracteristicas nuevas. En este ejemplo, movemos y sumamos datos entre las localidades de memoria y los registros. Aqui estén las instrucciones para este propésito: 100 AK, [2181 103 ax, (21¢) 1907 125 10K (281 ae WORD Pre {120,25 BYTE PTR (2221.30 ns 19 a ua uc 95 00 ne 120 90 00 SPS BES EESEE SE 90 99 00 Una explicacién de las instrucciones es la siguiente: 100; Mueve cl contenido de las localidades de memoria | |AH-11BH al AX. Los corchetes indi- can una direccién de memoria y no valores inmediatos. 103: Suma los contenidos de las localidades de memoria 11CH-11DH al AX. 107: Suma el valor inmediato 25H al AX. (0A: Mueve el contenido de AX a las localidades de memoria 11EH-11FH. 10D: Mueve el valor inmediato 25H a las localidades de memoria 120H-121H. Note el uso del operador WORD PTR, que indica a DEBUG que debe mover el 25H a una palabra de memoria, Si estuviera codificada la instruccién como MOY [120],25, DEBUG no tendria manera de determinar 1a longitud que se pretende y mostraria un mensaje de ERROR. ‘Aunque rara vez necesita usar el operador PTR, es vital saber cuando se necesita. 113: Mueve el valor inmediato 30H a la Localidad de memoria 122H. Esta vez, queremos mover un byte, y ¢l operador BYTE PTR indica esta longitud. Preguntas 45 IIA: Define 10s valores de byte 14H y 23H. DB significa “definir byte(s)" y le permite definir datos que sus instrucciones (come la que esté en 100) estan referenciando IC, HE y 120: Definen otros valores de byte para uso en el programa. Para ejecutar este programa, primero teclee A 100 [Enter], y después teclee cada instruc- ‘cin simbélica (pero no Ia localidad). Al terminar, teclee un Enter adicional para salir del coman- do A. Empiece por introducir R para mostrar los registros y la primera instruccién; después: ingrese de manera sucesiva comandos T. Salga de la ejecucién cuando Hlegue a NOP en 118, Teclee D 110 para mostrar los contenidos cambiados de AX (233E) y de las localidades 1 1EH- JIFH (3E23), 120H-121H (2500) y 122H (30). PUNTOS CLAVE + El programa DEBUG es util para probar y depurar programas escritos en lenguaje de miquina y en lenguaje ensamblador. + DEBUG proporciona un conjunto de comandos que permiten realizar diferentes operaciones tiles, como desplegar, introducir y rastrear. + Como DEBUG no distingue entre letras mimisculas y maydsculas, puede introducir los comandos de cualquier forma, * DEBUG supone que todos los niimeros estiin en formato hexadecimal. + Si usted introduce un valor incorrecto en el segmento de datos o en el segmento de cédigo, vuelva a introducir el comando E para corregirlo. * Para reasumir 1a ejecucién en la primera instruccién, asigne al registro de apuntador de instruccién (IP) un 0100. Teclee el comando R (registro), seguido por el registro designado, como R IP [Enter]. DEBUG muestra el contenido de IP y espera otra entrada. Teclee el valor 0100 (seguido por Enter). PREGUNTAS 341. {Cuiil es el propasito de eada uno de los siguientes comandos de DEBUG? (a) A; (b) D; () B: (d) P: (©) Q: (DR: (g) T; ) U. 3:2, Proporcione las comandos de DEBUG para las siguientes necesidades, (a) Muestre la. memoria iniciando en et desplazamiento 268H en el segmento de datos, (b) Muestre la memoria iniciando en ta localidad 410H. (Nota: Separe esta direccidn en los valores de su segmento y det desplazamiceto.) (©) Ingrese el valor hexadecimal A8B364 en el segrento de datos iniciando en la localidad 2008 (d) Muestre el contenido de (i) todos tos registros y (i) slo del registro IP. (©) Desensamble el cigo de méquina que se encwenta en ls lvalidades desde la 100H hasta 3-3. Proporcione instrucciones en cédigo de mAquina para las siguientes operaciones: (a) Mover el valor 4629 hexadecimal al registro AX; (b) sumar ¢! valor hexadecimal 036A al registro AX, Ejecucién de instrucciones Capitulo 3 344, Suponga que ha utilizado DEBUG para introducir el comando siguiente: E cS:100 Bi 45 01 05 25 00 El valor 45 hexadecimal supuestamente era $4. Codifique otro comando E para corregir s6lo el byte que esté incorrecto; esto es, cambie el 45 por el 54 de forma directa. 3-5. Suponga que ha utilizado DEBUG para introducir el comando E siguiente: & (32100 BB 04 30 05 00 30 30 (a) Cudles son las tres instrucciones simbéticas representadas aqui? (EI primer programa en este capitulo da una pista.) () Al cjecutar este programa, usted descubre que el registro AX termina con 6004 en lugar del esperado 0460. {Cuil es el error y cémo lo corregiria? (€) Habiendo corregido las instrucciones, usted ahora vuelve a ejecutar el programa desde la primera instruccién. {Cudles son los. dos comandos de DEBUG que se requieren? 3-6. Considere el programa en lenguaje de maquina 0 25 0 B08) 15 Fe HS 90 Este programa realiza lo siguiente; * Mueve el valor 25 hexadecimal al registro AL. * Recorre el contenido de AL un bit a la izquierda. (El resultado es 4A.) + Mueve el valor 15 hexadecimal al registro BL. * Multiplica el AL por el BL. Utiliza el comando E de DEBUG para introducir ¢l programa, iniciando en CS;100. Recuerde ‘que estos son valores hexadecimales. Después de introducir el programa, teclee D CS:100 para verlo. Después teclee R y suficientes comandos T, de manera sucesiva para avanzar por el programa hasta que alcance NOP, {Cudl es el resultado final en el registro AX? 347. Utilice el comando E de DEBUG para introducir el siguiente programa en lenguaje de miquina: C6digo de miquina (en 1008): 9) 00 02 DO ED ¥§ 26 01 O02 AP O2 O2 90 Datom (en 200i); 25 15 00 00 Este programa realiza lo siguiente: + Mueve el contenido de un byte en DS:0200 (25) al registro AL. + Recorre el contenido de AL un bit a la izquierda, (El resultado es 4A.) + Multiplica el AL por un byte contenido en DS:0201 (15). + Mueve el producto de AX a la palabra que inicia en DS:0202. Después de introducir el programa, teclee los comandos D para ver el eédigo y los datos. Después teclee R y suficientes comandos T, de manera sucesiva, para avanzar por el programa hasta que llegue a NOP. Al llegar a este punto, el AX debe contener el producto en memoria en 0612H. Teclee otro D DS:0200 y note que el producto en DS;0202 es almacenado como 12068. 3-8. Para la pregunta 3-7, codifique los comandos que graben el programa en disco con el nombre TRIAL.COM. 3-9. Utilice el comando A de DEBUG para introducir las siguientes instrucciones: wv ax,25 AnD BK,30 Preguntas 47 SHL BK, 01 roe Desensamble las instrucciones y rastree su ejecucidm hasta NOP y revise el valor en el BX después de cada instruccién. 3-10. ,Cuél es el propésito de Ia instruccién INT? PARTE B — Fundamentos de lenguaje ensamblador CAPITULO 4 Requerimientos de lenguaje ensamblador OBJETIVO Cubrir los requerimientos basicos para codificar un programa en Jenguaje ensamblador y definir los elementos de datos. INTRODUCCION El capitulo 3 mostré cémo usar DEBUG para teclear y ejecutar programas en lenguaje de miqui- ra Sin duda usted fue muy consciente de la dificultad de descifrar el cédigo de maquina, aun para 4un programa pequetio. Probablemente ninguin programa se codifica mas en serio en lenguaje de ‘miéquina que los programas mis pequefios. Un nivel mas alto de codificaciGn es el nivel ensamblador, en el que un programador utiliza instrucciones simbélicas en lugar de instrucciones de méquina y nombres descriptivos para los elementos de datos y para las Jocalidades de memoria, Usted escri- be un programa en ensamblador de acuerdo con un conjunto estricto de reglas que después utiliza ¢l programa traductor de ensamblador para convertir el programa en ensamblador en cédigo de miéquina, En este capitulo explicamos Jos requisitos bésicos para desarrollar un programa en ensamblador: el uso de comentarios, el formato general de codificacién, las directivas de impre~ si6n del listado de un programa y las directivas para definir segmentos y procedimientos. También cubrimos la organizacin general de un programa, incluyendo la inicializacién y la terminacidn de su ejecucién. Por ditimo, tratamos los requisitos para definir elementos de datos, (Comentarios en lenguaje ensamblador 49 ENSAMBLADORES Y COMPILADORES Primero identificamos dos clases de lenguajes de programacién: de alto nivel y de bajo nivel. Los programadores que escriben en un lenguaje de alto nivel, como C y Pascal, codifican comandos poderosos, cada uno de los cuales puede generar muchas instrucciones en lenguaje de méquina. Por otro lado, los programadores que escriben en un lenguaje ensamblador de bajo nivel codifican ‘instrucciones simbélicas, cada una de las cuales genera una instruccién en lenguaje de m4quina, A pesar del hecho de que codificar en un Lenguaje de alto nivel ¢s mas productivo, algunas ventajas de codificar en lenguaje ensamblador son: * Proporciona mas control sobre ¢! manejo particular de los requerimientos de hardware. + Genera médulos ejecutables més pequefios y mas compactos. « Con mayor probabilidad tiene una ejecucién més rapida. ‘Una practica comin es combinar los beneficios de ambos niveles de programacién: codifi- car el grtieso de un proyecto en un lenguaje de alto nivel y los médulos criticos (aquellos que ‘provocan notables retardos) en lenguaje ensamblador. ‘Sin importar el lenguaje de programacién que utilice, de todos modos es un lenguaje simbé- Tico que tiene que traducirse a una forma que la computadora pueda ejecutar, Un lenguaje de alto nivel utiliza un Compilador para traducir el cédigo fuente a lenguaje de méquina (\écnicamente, cédigo objeto). Un lenguaje de bajo nivel utiliza un ensamblador para realizar la traduccién. Un programa enlazador para ambos niveles, alto y bajo, completa el proceso al convertir el cédigo objeto en lenguaje ejecutable de maquina. COMENTARIOS EN LENGUAJE ENSAMBLADOR El uso de comentarios a lo largo de un programa puede mejorar su claridad, en especial en lenguaje ensamblador, donde el propdsito de un conjunto de instrucciones con frecuencia no es claro. Un comentario empieza con punto y coma (;) y, en donde quiera que lo codifique, el ensamblador supone que todos los caracteres a la derecha en esa linea son comentarios. Un comen- tario puede contener cualquier caracter imprimible, incluyendo el espacio en blanco. ‘Un comentario puede aparecer s6lo en una Ifnea o a continuacién de una instruccién en la misma linea, como lo muestran los dos ejemplos siguientes: 1. ;Toda esta linea es un comentario 2. ADD AX,BX ;Comentario en la misma linea que la instruccién Ya que un comentario aparece s6lo en un listado de un programa fuente en ensamblador y no genera cédigo de méquina, puede incluir cualquier cantidad de comentarios sin afectar el tamaiio 0 la ejecucién de! programa ensamblado. En este libro, las instrucciones ensambladas estin en Jetras mayusculas y los comentarios en letras minisculas, s6lo como convencién y para hacer que los programas sean mds legibles. Técnicamente, usted est en libertad de usar letras maytisculas 0 mindisculas para las instrucciones y comentarios. 50 Requerimientos de lenguaje ensambiador Capitulo 4 Otra manera de proporcionar comentarios es por medio de la directiva COMMENT, que se estudia en el capitulo 27. PALABRAS RESERVADAS Cicrtas palabras en lenguaje ensamblador estén reservadas para sus propdsitos propios, y son usadas s6lo bajo condiciones especiales. Por categorias, las palabras reservadas incluyen «+ instrucciones, come MOV y ADD, que son operaciones que la computadora puede ejecutar; + directivas, como END o SEGMENT, que se emplean para proporcionar comandos al ensamblador; * operadores, como FAR y SIZE, que se utilizan en expresiones; y + simbolos predefinidos, como @Data y @Model, que regresan informacién a su programa. El uso de una palabra reservada para un propdsito equivocado provoca que el ensamblador genere un mensaje de error. El apéndice C muestra una lista de las palabras reservadas del lenguaje ensamblador. IDENTIFICADORES Un identificador es un nombre que se aplica a elementos en el programa. Los dos tipos de iden- tificadores son: nombre, que se refiere a la direccién de un elemento de dato, y etiqueta, que se refiere a la direccién de una instruccién. Las mismas reglas se aplican tanto para los nombres como para las etiquetas. Un identifieador puede utilizar los siguientes caracteres: * Letras del alfabeto: dese La A hasta la Z * Digitos: desde el 0 hasta 9 (no puede ser el primer caricter) # Caracteres especiales: sign de interrogacién (?) subrayado (_) signo de pesos (S$) arroba (@) punto (.) (no puede ser el primer cardcter) El primer cardcter de un identificador debe ser una letra un cardcter especial, excepto el punto. Ya que el ensamblador utiliza algunos simbolos especiales en palabras que inician con el simbolo @, debe evitar usarlo en sus definiciones. El ensamblador trata las letras maydsculas y mindsculas como iguales. La longitud maxima de un identificador es de 31 caracteres (247 desde el MASM 6.0), Ejemplos de nombres validos son COUNT, PAGE2S y SE10. Se recomienda que los nombres sean descriptivos y con significa- do. Los nombres de registros, como AX, DI y AL, estén reservados para hacer referencia a esos mismos registros. En consecuencia, en una instruccién tal como: ADD AK, BK instrucciones 51 el ensamblador sabe de forma automética que AX y BX se refieren a los registros. Sin embargo, en una instruccién como: MOV REGSAVE,AX el ensamblador puede reconocer el nombre REGSAVE s6lo si se define en algin lugar del programa. INSTRUCCIONES Un programa en lenguaje ensamblador consiste en un conjunto de enunciades. Los dos tipos de enunciados son: 1. instrucciones, tal como MOV y ADD, que el ensamblador traduce a edigo objeto; y 2. directivas, que indican al ensamblador que realice una accién especifica, como definir un elemento de dato. ‘A continuacién esté el formato general de un enunciado, en donde los corchetes indican una entrada opcional: [identificador) | operacién | [operando(s}] [;comentario} Un identificador (si existe), una operacin y un operando (si existe) estén separados por al menos un espacio en blanco o un cardcter de tabulador. Existe un maximo de 132 caracteres en ‘una linea (512 desde 1 MASM 6.0), aunque la mayoria de los programadores prefiere permane- cer en los 80 caracteres ya que ¢s cl mimero maximo que cabe en la pantalla, A continuaci6n se presentan dos ejemplos de enunciados: IDENTIFICADOR OPERACION — OPERANDO COMENTARIO Directiva: COUNT DB 1 iMombre, operacién, operando Inst rucedén: nov AKO sOperacién, dos operandos Identificador, operacién y operando pueden empezar en cualquier columna. Sin embargo, si de manera consistente se inicia en la misma columna para estas entradas se hace un programa mis legible. También, la mayoria de los programas editores proporcionan marcas de tabulador cada ‘ocho posiciones para facilitar el espaciamiento. Identificador ‘Como ya s¢ explicé, el término nombre se aplica al nombre de un elemento o directiva definida, mientras que ¢l término etiqueta se aplica al nombre de una instruccién; usaremos estos términos de ahora en adelante, ‘Operacién La operacién, que debe ser codificada, es con mayor frecuencia usada para la definicién de dreas de datos y codificacion de instrucciones. Para un elemento de datos, una operacién tal como DB © DW define un campo, area de trabajo o constante, Para una instrucciGn, una operacién como MOV 0 ADD indica una accién a realizar. 32 Roquerimientos de lenguaje ensamblador Capitulo 4 Operando El operando (si existe) proporciona informacién para la operaciém que actila sobre él. Para un elemento de datos, el operanda identifica su valor inicial. Por ejemplo, en la definicién siguiente de un elemento de datos llamado COUNTER, 1a operacién DB significa “definir byte, y ¢ yperanda inicializa su contenido con un valor ce NOMBRE OPERACION OPERANDO COMENTARIO Para una instruccién, un operando indica en dénde realizar la accién. Un operando de una instruccién puede tener una, dos otal vez ninguna entrada. Aqui estin tres ejemplos: OPERATION OPERANDO COMENTARIO OPERANDO DIRECTIVAS EI lenguaje ensamblador permite usar diferentes enunciados que permiten controlar la maner ama ensambla y lista. Estos enunciados, llamados directivas, act ensamblado de un programa y no generan cédigo ejecutable de mAquina ye UH pr 9 sblo dra as directivas. mis comunes son explicadas en las siguientes secciones. El capitulo 27 trata con detallc todas la ectivas; en cualquier momento usted pucde utilizar ese capitulo con eo Directivas para listar: PAGE y TITLE Las directivas PAGE y TITLE ayudan a controlar el formato de un listado de un programa i ensamblador. Este es su intco fin, y no thenen ef PAGE, Alinicio de un progra de linea ay el mimero miximo de caracteres en una linea. Su formato general la directiva PAGE designa el nimero maxis para listar en una pig El ejemplo siguieme proporciona 60 lineas por pagina y 132 caracteres por linea: Bi niimero de lineas por pigina puede variar desde 10 hasta 255, mic caracteres por tinea desde 60 hasta 132. La omisidn de un enunciado PAGE causa que el ensamblador twme PAGE $0,80, Suponga que el niimero de lineas para PAGE se definié como 60, Entonces, cuando e2 programa enxamblado haya listado 60 lineas avanza las formas al inicio de ia siguiente pi increment en forzar un salto de pigina el contador de paginas. También puede usied quere: linea especifica en el Lstado del programa, como al fi 2. silo codifique PAGE sin operands. At en PAC TITLE. Se puede emplear la directiva TITLE para hacer gue in ttul ada pagina en el listado del p a. Puede codificar Su formato general es Para el operando tex ca recomend utilizar ef nombre det registra en el disco. Por ejemplo, si a su programa fe puso por nombre ASMSORT. cndin ‘ectiva SEGMENT ograma ensamblado en formato .EXE ¢ mis segments n propestciona able, Las directivas para definir SEGMENT ENDS, tienen ei formato siguie NOMBRE — OPERACION OPERANDO COMENTARIO El enunciado SEGMENT define el i bre de! segmento debe esta Present, ser tinico y cumplir las convenci del lenguaje. El enunciado ENDS indica el final del segmento y coatiene mitximo de un xegmento ¢3 68K. El ope de opciones: aline re del enunciado SEGMENT. El tamatic unciado SEGMENT puede tener tres tipe Tipo alineacién, La entrada alineacidin nite imiento tipico. PARA, atinea el segmenio con el limit \direccion inicial es divisible entre 16, 6 10H, En susencia de or omisién tome PARA Tipo combinar. censamblar (se expl ograma”), Los tipos combinar som STACK, COMMON, PUBL Ic ejemplo, el segmento de la pi y la expresion AT. Por 5a Requenmentos de lenguaje ensambiadot Capitulo 4 Puede utilizar PUBLIC y COMMON en donde tenga ¢! propésito de combinar de forma separada programas ensamblados cuando bos enlaza, En otros casos, donde ui comoinado can otros, puede omitir a opcidn o codificar NONE Tipo clase, La entrada clase, encerrada entre apdstrofos, es utilizada para agrupar seg menios cuande se enlazin. Este Uo uiiliza la clase “code” para el segmento de c6digos (recomen: dado por Microsoft), ‘data’ por segmento de datos y “stack’ para el segmento de la pila El cjemplo siguiente define un segmento de pila con tipos alineacién, combinar y clase: La pane del programa en la figura 4-1 ilustra enunciados SEGMENT con vi Divectiva PROC El segmento de cédigo contiene el eddigo ejecutable de un programa. También tiene und procedimientar, definidos con la directiva PROC. Un segmen puede aparecer como sigue que tiene s6lo un procedimie NoMaRE OPERACION OPERANDO COMENTARIO El nombre del procedimiento debe estar presente, set Gnico y seguir las re de nombres del lenguaje. El operando FAR en este caso esté relacionado con la. ejecuciin del programa. Cuando usted solicita la ejecucion de un programa, el cargador de programas de! DOS as para la formacicin utiliza este nombre de cedimiento como ¢! punto de entrada para la primera instruccioa a La directiva ENDP indica el fin de un procedimiento y contiene ¢! mismo nombre que el aciado PROC para permitir que el ensamblador retacione a lo eben estar por completo dentro de un segmento, ENDP define el final de un procedimiento antes que ENDS defina e! final de un El sepmento de cédigo puede contener cualquier mimero de p 108 usados cor subrutinas, cada uno de los cuales va con su caracteristico conjumo de enunciados PROC y ENDP, Cada PROC adicional por lo comiin se codifica con (0 por omisién) el operando NEAR, el capitulo 7 1. Ya que fos procedimientos scedithie analiza esta situackén, Directiva ASSUME Un programa wiliza al registro SS para diteccionar la pila, al registro DS para direccionar el seginento de datos y al registro CS para diteceionar el segmento de cédigo. Para este fin, usted tiene que indicar al ensamblador e propdsito de cada segmemto en el programa. La directiva para este propsito es ASSUME, codificada en el seymento de cédigo como sigue: como 0s R OPERACION OPERANGO ‘SS:mompita significa que el ensamblador asocia el nombre del segmento de Ia pila con el registr SS, y de manera similar con los otros o mostrados. Los operandos pueden aparecer ea uualquier orcen. ASSUME contener una entrada para el ES, tal com ES:nomsegdatot: si su proge 0 ES, puede omitir su referencia 0 codifien ES:NOTHING (desde ¢l MASM 6.0, el ensambla para el segmento de c6digo) a ASSUME Al igual que a8 directivas, ASSUME es slo un mensaje que ayuda al ensamblador a convertir cédigo simbdtico a e6dlige de méquin min puede tener que codificar instrucciones que fisicamente cargan direcciones en registros de segmenios en e! momento de in ejecue Dicectivh END iva ENDS finalir procedimiento. Una directiva END final segmento y la direetiva ENDP finaliza un todo el programa. Su formato general es OPERACION = OPERANDO. El operando puede tar en blanco si el programa n es para ejecutarse; por ejemplo, usted puede ensamblar s6l definiciones de datos o puede querer enlazar el programa con otro médule principal). Ext la mayoria de los programas, el operando contiene el nombre del primero 0 tnico PROC detignado como FAR, donde inicia la ejecucién del programa COMO INICIALIZAR UN PROGRAMA PARA SU EJECUCION dos tipos biisicos de programas ejecutables son .EXE y COM, Primero desarrollaremos los uisitos para programas .EXE y dejamos los progr: Proporciona una estructura de un programa .EXE que muestra los segmentos de la pila, de k 08 y del codigo. Examinemos las instrucciones del programa por ni ss COM para el capitulo 7. La figura 41 r0 de linea: UNEA exPUCACION La directiva PAGE para este listado establece 60 lineas y 132 columnas por pagina, 2 La directiva TITLE identifica el nombre del programa PO4ASM 3 Las lincas 3, 7 y 11 som comentarios que clarifican la declaracién de los segmen definides Estos enunciados definen el segmento de la pila, STACKSG (pero no su contenido, en este ejernplo). Estos emunciados definen el segmento de datos, DATASG (pero no su contenido), Estos enunciados definen el uegmento de cédigo, CODESG. Estos enunciados definen el segment de codigo del tinico proced BEGIN. Este procedimiento ilustra los requisitos comunes de inicializa salida para un programa .EXE. Los dos requisitos para iniial én y de Roquorimientos de dot Capitulo 4 5 DS con la direccién del segmento de Ladirectiva ASSUME avisa al ensamblador que asocie cies ros de seymento, en este e280, STACKSG con el SS, DATASG con el DS. y CODESG con el CS Alasociar segmenios con registros de segn as direcc! nos, cl ensamblador puede detern os para los elementos en la pila, para los element mnes de desplazaen en el segmenio de datos y para las wcciones en el segmento de codigo. Por cada instruccién de méquina en el segmento de codigo es de ui especifica. La prim lenguaje de miquina 8 de dos bytes de longin la segunda instruccién tendria un desplazarnien Dos instrucciones inicia a del segmento de datos en el registro DS 10 AX y el in del AX al DS. Se requieren dos MOV ya que de mover El primer MOV carga la direccién del segmento de datos en el re jegundo MOV copia Ia direce hinguna instruccida p tro de segmento: usted tiene que mover la direccidn desde otro registro al registro el segmenio. Asi, el enunciado MOV DS,DATASG seria ilegal. El capitulo 5 con mayor detalle 8 de forma directa de estudia cémo inicializar los registros de segment Seen mismos pasos de inicializacign que usted puede jar cada Vez qu programa en ensambtadoi aR COMO TERMINAR LA EJECUCION DE UN PROGRAMA INT 21H es tuna operacidn de int min del DOS que utiliza un eddigo de func Ds: registro AH para especificar una accion que serd realizads, Las diferentes fuiciones de INT 2141 incluyen entrada desde el teclado, manejo de la pantalla, E/S de disco y sald a impresora. Li funckin que mos ineresa aqui es la 4CH, que INT 21H reconoce como una pe at digo de repre: enel AL para prucbas subse loves (via el emunciado IF ERRORLEVEL), e f i. 58 Requerimientos do lenguaje ensamblador Capitulo # Fl csdigo de represo para wna terminaciéa normal de un programa por To comin €s 0 (cerd Foe puede eodifear dos MOV como un enunciado (como se muestra en I figura 4-1) Jin 4CH del DOS ha sustinuido las operaciones originales de terminacién INT 208 La INT 21H, funcida OOH. EJEMPLO DE UN PROGRAMA FUENTE formacién precedente en wn programa fi ddaios en el registro AX. La figura 4-2 combina Iai npleto, que suma dos elementos de pera co ‘STACKSG contiene una entrada, DW (define p amato adecuado para la mayoria de los pr 198 lamadas FLDA, FLDB y FLDC programa, DATASG define tres palabras de dat CODESG contiene las instrucciones ¢jecutables para el Jado, ASSUME, no genera cédigo cjecutable ‘La directiva ASSUME realiza estas operacione STACKSG al registro SS, de forma que el sistema utile la direceiin en el regis a ditecci b de STACKSG. ina DATASG al registro DS, de modo que el sistema ut ice Ia direccién en el registn + Asig DS para direccionamiento de DATASG. CS, de modo que el sistema utilice Ia direccion en 19 de CODESG + Asigna CODESG al regi CS para direceionamics Programa fuente .EXE con los segmentos convencionales conn DIRE ero) ‘Cuando se carga un programa desde e! disco sistema extable prime ora para su cjecuci ce las direcciones reales en los registros CS y SS pero, em 8 instrucciones MOV, usted tiene que ink n capitulo zar el registro DS ty ES) a de este programa pién INT 20H COMO INICIALIZAR EL MODO PROTEGIDO E rotegido bajo el 80386 y procesadores posteriores, un programs puede sta 16 megabytes de memoria. E} uso de DWORD para al bor, sencilla enta la velocidad de acceso a me emoria para buses de dai s de 32 bits, En c o*igo siguiente, Le directiva 386 le indica al ensamblador que acepte instruccioars sa nici inde pace roccaadores; el operando USE32 indica al ensamblador que genere Codigo wren piado para el modo protegido d 32 bits stro del segme datos podria parecerse a esto, ya.que en est regisico Procesadores el registro DS ati de 16 bits pel repistn : pas cmmueclotes STI, CLI, IN y OUT, disponibies en modo real, no estin permitidas en modo protegio, PIRECTIVAS SIMPLIFICADAS DE SEGMENTOS Kot ensambladores de Microsoft y de Borland proporcionan algunas formas abreviad a Segmentos. Para usar estas abrovianuras,inicialice el modelo de memoria anes nemto, El formato general (incluyendo el punto inicial) ex jp adelo de memoria puede sr TINY. SMALL, MEDIUM, COMPACT o LARGE (otro n 10. HUGE, to necesitamos tratato aqui). Los requisitos para cada models ace MODEL —_ MOMERO DE SEGMENTOS DECOOIGO NUMERO DE SEGMENTOS DE DATOS Puede utilizar cualquiera de esto modelos para un program 10 esté enlazad 8 otro). EI modelo TINY esté des ye ensambiador Capit 60 Requenmve as .COM, los cuales tienen sus datos, cOdigo y pila en un segmento, El modela SMALL exi que el c6igo quepa en un segmento de 64K y los datos en otro segmento de 64K; este modelo e adecuado pari la mayor parte de los ejemplos de este libro. La directiva MODEL. genera de ~ a automitica el enunciade ASSUME necesari 4 Los formatos generales (incluyendo el punto inicial) para las directivas que 4 . mentos de ta pila, ¢ y de cédigo * e sa Coda una de estas directivas hacen que el ensamblador genere el en. ; si est odificad La cenunciados pueden utilizar val inidos por COUNTR. éo necesita cambiar et enunciade EQU, No on. EQU) s6lo.en donde una sustitucion tenga sent mibres simbOlicos, come en el sigu También puede igualar (con EQL el alias TP al elemento definido TOTALPAY. Para do TP, el ensamblador lo mer EQU hace equivalente plaza con la direce 69 PGALPAY. El sequndo EQU permite a un programa usar la palabra MPY ens nstruccidn simbéliea MUL MASM 6.0 introdujo una directiva TEXTEQU, pa PUNTOS CLAVE ario esté precedido por punto y coma ( + Las palabras reservac # en lenguaje ensamblad bajo condiciones especiales son usadas para propésitos especiales Sun nombre que se aplica x clementos en sus programas. Los dos tipos de Neslifcadores ton nombres, que se refleren w diecoiees a datos Rblador, Aho Feflcren a Ia direceién de una instraccion arabs * Una operacion es usada, por lo comdn, ara definic éreas e datos y codificar instrucciones Un operando proporciona informscide para ta informe Wn que actia sobre é1 * Un programma consiste en uno 0 mds segmentos, cada uno de 10s cuales empieza en un timite de pirrato, * [a directiva ENDS finaliza cada sepmento, ENDP termina cada procedimiemo y END ina un programa * ka directiva ASSUME asacia los. registro de seymentos CS DS y SS con sus nombres de tepmento apro % Programas .EXE (pero no los .COM) de leben proporcionar al menos 32 palabras para ¢ cionamiente de ta pila, * Para un programa EXE, p cement de di lo general se inicializa of registro DS con | * Para las directivas simplificadas de segmentos, se antes de definir agin segmenio, se inicialina ore uma iad memeria. Las opciones ton SMALL (an segenseet que la omisiém del atribut P (esta operaciGn + En el procedimiento BEGIN, Ia instrucciin CALL transfiere el control del programa al procedimiento B10 e inicia su ejecucién. + Enel procedimiento B10, la instruccién CALL transfiere el control al procedimicnto C10 ¢ peck ceeetets + En el procedimiento C10, la instruccién RET hace que el controll regrese a ta instruce que sigue a CALL C10. + En el procedimiento B10, I a RET hace que e! control regrese la instraceiéin que p del procedimien- igue a CALL BIO. + Entonces el procedimiento BEGIN reasume el procesamiento desde ese puntc RET siempre r ‘a [a rutina que !lama, Si B10 no termina con una instruccién RET, la procedimicnto cti wstrucciones se ejecutarian pasando B10 ¢ irian directamente a C10. De hecho, si C10 no je mete a la pila a contiene un RET el programa ejecutaria, pasando el final de C10. todas las instrucciones (s ga del capitulo 23, hay) que estuvieran ahi, con resultados impredecibles, Téenicamente, puede transferir el control a un procedimienio cercano por med sna instruccién de salto o incluso por cédigo normal en linea. Pero por claridad y consistencia, utilice + 8-3, Advierta las ‘CALL para transferir el control aun procedimiento y utilice RET para terminar la in procedimiento, mic antes EFECTOS EN LA PILA DE LA EJECUCION DE PRC propio ENDP para AMAS ido poca necesidad de meter datos en la pila y, © questa, Sin embargo, una llamada a procedimient 9, el cual a su vez aun puede Hamar (CALL) a ou ebe set los suficiemtermente grande para contener las direc ser mis ficil de lo que parcce a primera v niciGa de Ia pila de 3 CALL y PUSH almacenan una direceién de una palabra Hasta este punto nuestros programas han ‘onsecuentia, hemos definido una pila muy pe puede llamar (CALL) a otro procedi procedimiento, de manera que la pila ciones. guardadas, Todo esto llega mayoria de nuestros propésitos una palabras es suficiente RETy POP sacan odas estas operaciones cambian la dirce bra prev pa mente guardoda cidn del desplazamiento en el rigistro de SP para la palabra sigu ica, las operaciones RET y POP deben coincidir con sus operac storio, al cargar un programa .EXE pa establece los valores siguiemtes en tos registros ie. A causa de esta caracteris 3 originales CALL y PUSH el ‘Como un reco rgador de sistema + DS y ES: La direccién d rea de 256 bytes (1O0H) que precede un middle d programa ejecutable en + CS; La direceign del segms su programa + IP: Cero, sila primera instruccién ejecutable esti en el inicio del segment + SS: La direceidn del se * SP: Desplazamiento del tope de Ia pila. Por ejempl (64 (64 bytes 0 32 pala ento de la pila nida como STACK para una pila de 38), en un inicio SP contiene 68, 0 40H, Rastree cl pro Namadas procedimi ama sencillo es tendrian cualquier ntimero de instrucciones. Ja figura 8-3 a Jo largo de su ejecucién, En la pri 124 40H a SEH. Después mete el IP ruccidn CALL . iliza la direccién formada atrol a B. palabras en memoria contienen bytes en on P niento B10, C minuye en 2 el SP, a 3CH. : cel rope dela pil smiento 3CH. El procesads gramas a pila. Pa 40H CSIP para Despue SPERACIO Capitulo 8 aciones booleanas YPERACIONES BOOLEANAS La togica booteana ex importante en el diseflo de cineuitos y tiene un paraiclo cn ta logica de srogramacién, Las instrucciones para lOgica booleana son AND, OR, XOR, TEST y NOT, que pueden usarie para poner bits en 0 © 1 y para manejar datos ASCII con propésitos artmétc ) encel tope 1 te i ? {capitulo 13). El formato: general para las operaciones booleanas € El primer operando s¢ refiere a an byte © palabra en un registro o memoria y cs eb Unico 1 que es cambiado, El segundo operando hace referencia a un rep valor inmedia La operacidn com bits de lox dos operandos referenciados y de ‘con esto establece las banderas CF, OF, PE, SF y ZF (AF esté indefinido) + AND. Si ambos bits comparados son 1, establece el resultado en 1. Las dems condic ddan como resultado 0 pasegs ol ‘OR. Si cualquiera (0 ambos) de los bits comparados es 1, el resultado + 1, Si ambor bis XOR. Si uno de lor bits comparados es 0 y el otro 1, él resultado ex 1, Si ambos bic ‘comparados soni iguales (ambos 0 0 ambos 1), el resultado es 0 TEST. Establece las banderas igual que lo hace AND, pero no cambia tos bits de | coperandos. Las operaciones siguientes AND, OR y XOR ilustran los mismos valores de bits como operandos Jel toe de a Es ui! recordar la siguiente repla: el empleo de AND con bits 0 es 0 y el de OR cx bits Ejemplos de operaciones booleanas pila en 3EH c ejemplos independienies, suponga que el AL contiene Sgica y contro! de programas Los ejemplos 2 y 6 mues mas de limplar un registro, y ponerlo a cero. El ejemplo 3 po * cero los cuatro bits més a la tzquierda de AL. Aunguc el uso de CMP pucde ver ma Puec uilizar OR para los siguientes fines: TEST acta igual que AND, pero sélo extablece las bande ui estén algunos ejempl La instruccién NOT {a instruccién NOT solo invierte los bits en un byte © palabra en un registz0 0 en memort oavierte los ceros en unos y los unos en ce general para NOT ¢ : Por ejemplo, si el AL contiene 1100 0101, la instruccidn NOT AL cambia el AL. a 0011 1010 {eeultado es el mismo de XOR AL.OFFH del anterior ejemplo 7). Las banderas no son afectes Tod NOT to &+ lo mismo que NEG, que cambia un valor binatio de postivo a nepativey vies te wirtiendo Jos bits y sumande CAMBIO DE MINUSCULAS A MAYUSCULAS Exiscn varias razooes para realizar la conversin entre letras maydsculas y minsculas, P DRRIMIE: 'mplo, puede haber recibido un archivo de datos den sistema que procesas6l0 letras maya Uas. O lun programa tiene que permitir a los usuarios ingresar de forma indistinia mays sg mindsculas (como *YES* 0 *yes") y para faciitar ls comparaciones, riscula {Las letras maytisculas de A ala Z son desde 41H hasta SAH. y las lee a hasta : de 61H a 7AH. La tnica diferencia es que el bit $ de una 1 Oy para q MavOsCULAS. MNUSCULAS . Letra A; 01000001 Letra a 1 10004 Letra Z 0110 Letraz: 01111010 Bi 7654321¢ Bi 65: Figura 4 Cam las a mayscula programa COM de La figur el contenido de un dato, TITLEX, TITLEX rama inicializa el BX com la di la a maydscula, empezando en TITLEX +1 y utiliza la direcein para ida cardctet al AH, iniciando en TITLEX valor esti entre 61H y 7AH, una ins AND establece & : os dems ca a hasta 2 pe sin cambio, De ter cambiad eso a TITLEX, incrementa el BX para el siguiente » BX funciona fin, también se puede utilizar SI yD perande contiene cl valor del corrimiento, que torencta a CL. Pat 8088/8086 128 joIca y control de programa c to de bits hacia ta derecha Los corrimiientos hacia la dered SAR) mueven bos bits hacia la derecha en ignado. El bit recorrido fuera del registro mete la bandera de acarreo. Las instruccione L o amenm an I fe 3 siguientes i icionadas Hlustran SHR y di instRUCCION AL COMENTARIO El primer SHR desplaza et contenido de AL. un bit hacia la de a la derech do a la bandera de acarreo, y el bit de mas a Ia izquierda se Hleea El seg tres bits més al AL. La bandera de acarreo contiene dé vat a mas, tres bits 0 son colocados a la izquierda del AL SAR difiere dle SHR en un punto utiliza el bir de sigmo para Henar y icant ds a Ia iago De esta manera, io positives y negat m 2008. 1 lentes instrucciones relacionadas itustran SAR y dat igno en los que , INSTRUCCION A COMENTARIO ‘ % mm En especial, los corrimicntos a Ia derecha son itiles para (dividir entre dos) abvener mite = de valores y son mucho més répidas que utilizar una operacié de divisién. En los cjemp orrimientos de tres bits a la derecha, el primer corrimiento de un bit a la derecha en reali 14 orrimictos a la derecha en realidad no bits (desplazamiente ewcuia 128 Corrimbento de bits hacia ta izquierda ; decsignado, SHL y SAL. son idénti 0. El hit desplazado fuera del registro in w la bandera de ones de corrimiento hacia la izquierda estipulan dat ‘ SHL: desplazamient a la izquierda SAL: desplazamiento atitméti ' Las siguientes instruceiones relacion tran SHL para datos sin In TRUCCION aL COMENTARIO ; mer SHL. desplaza e1 contenido del AL. un bit hacia la izquierda. E bit desplazado de mis a ind jena con cero, E do SH desplaza tres bits mis el AL. La bandera de acarred D, Ly I, y se rel ala dere _ iments a a 1 bit de , SAL som idénticos x ‘ mucho mis rapid iplica por 2, y el segundo y tercer ci b ip por 8, También, xi tiene que desplaz i mae ROTACION DE BITS (desptazamiento circular) 130 + Hacer referencia a un byte o 4 wna palabra. + Hacer referencia a un registro o a memoria + Realizar rotacién aa derecha o ala izquierd. El bit qu acanie en la memoria o registro y también se: copia en l v . + Realizar rotacion hasta de 8 byte, 16 bits em una palabra y 32 bits en una pal ble (80386 y procesadores posteriore + Realizar rotacién Kigica 10) 0 aritmeética (eon nm una referencia al registro CL s procesadores 8088/8086, Ia constante i E ata solo puede ser 1; un valor de rotaciém ma be estar eel registro CL. Proves 4s recientes permiten constantes inmediatas hast El formato general para la rotacidn ¢ rrecha de bits as rotaciones a la derecha (ROR y RCR) desplazan a ba Jo. Las instrucciones de rotacién a la derecha estipulan met cor Deg tae pis teetrcciomes welacionnd ROR INSTRUCCION oH COMENTARIO! “a SHLA 13 Las is lst ROL pet espacio imstmUcciON a coMENTARIO Véans | una palabra = Se cee Elprimet ROL desplaza el bit de mis a a izquierda del BLa la posicion vacante de més a la dere a [La segunda y tetcera operaciones ROL tell a rotacidn de fs tres its de mds De manera similar a RCR, RCL también provoca que la ban Sts posicta vacerte dela dovecha ae Desplaramiento y rotacién de palabras dobles 1 las instrucciones de rotacién y para desplaza centre siitiplon de 2, val les. Considere un valor en 32 bi bits de mas a la izquierda estén en el DX y los 16 bit DX:AX. Las instrucciones para a fin de multiplicar y diviir mas a la derecha estin en el AX, con ‘multiplicar” ese valor por dos podria ser EL SHE desplazs a la izquierda todos ts del AX, y el bit de mi 20. ELRCL desplaza el DX a la izqui de ends a la derechs. Para multiplies SHL-RCL a ta inquierda lo envia x la da ¢ inserta el bit del CF en el bi 4, haga seguir a la pareja SHL-RCL por otra pat a vez considere un valor en 32 bits en DX:AX, Lay valor serian derecha a ee Para dividir entre cuatro, haga seguir a la pareja SAR-RCR par otra pareja SAR-RCR. quent Los desplazamientos de doble precisién para ¢1 8386 y procesadores posteriores son SHRD SHLD, Pacem TABLAS DE BIFURCACION Un programa puede tener una rutin para probar varias conidiciones relacia rrutina, Por ejernplo, consi establecid clientes con hase en su nivel de crédito y volumen codigos especiales para lo vemtas, Los cédi indican la cantidad de descvento ofrecido y otros procesox especiales qi pueden necesitarse para el cliente. Los cédigos de Jos clientes son 0, 1, 2, 3y 4 132 wala recta. Uni lucra m0 se muestra en elf STTBL rE lores hexadecimale E ue porciona un desplazamiento en la tabla: CUSTTBL +0 es la cS la segunda, CUSTTBL+4 es la tercera, y asi i El operando 4 n IMP, (CUSTTBL.+ BX], forma una direc a Una testriccidin impc en el programa es que ‘i veden decimales 00-04; jeua ro valor causaria terribles resultados! Si utiliza DEBUG par flidos (00-04) DE P 80386 y pe r dria. reempla Jos in UMP ORGANIZACION DE UN PROGRAMA. sctlilo® anizncion do un programa 133 El valor os BL+0.es| ¥ Figura 85 Tab que serdin m Desp ie a estrategia para las insiruccions nas de in jizacién, para uso de salto condicional y ps DOP. Lo siguiente mue Inicialézar k be segm + Reger 134 pica y contro! de programa Mover un cardcter : Ri 3. 0: progra 2s relacionadas aa (a pantalla is facile eet PREGUNT 4 as otros programas. Intentos de memorizat todo el material técnica y codifs * pensatl encia tienen como resultado mas errores en el & witméticas y mn son realizadas y lo que esté haciendo una instruccién rara v a(t anterior ¢s LOOPNE: ;el ciclo se efectia mientras no sea igua 5 6. Para teclear el progra 2 estructura de programa que pueda copiar en un a é¢ lo neste texto hacen uso considerable de IMP, LOOP, salt . les, CALL Procedimientos, Ya cubierta lo bisico de lenguaje ensambadk UNTOS CLAVE sireceién corta es alcanzada por medio de un despl “ ia de -128 Una dire reama es ale + Una etiqueta: como “B20: dentro de un procedimienio necesita dos puntos (:) para indicar que €$ una etiqueta cercat rene 10: O1H a TFH que hasta el +1 on i‘ dos pantallas comp “2 on wo utilice & que LOOP disminuye el + Cuando una ins na bandera a perm “s spropiada de sal nal, dependiendo de si Ia procedimiento ¢ incluya RET al a 138 xs convenciones, RET hace que salga Ia direccién correcta de la pila. Los tinicas cjemp de ste libro que saltan a un procedimi programas .COM. devecha para i. Asegirese d correcta . PREGUNTAS car BA. By stop teen direcciin corta; (b) diroccibm cercans: (c) deescl6n lej ats £3. Una instrucekin IMP empieza en La localidad con desplazamicnt Determine la di teansferencla el siguiente céitigo objeto para el operando de IMP: (a) 27H; (b) SBE a den.) Kstableaca of mite Ensimblela, enlicela y wii autrear paar jm aque AXy BX z jue CX y DX contiencn datos sin signe. 1) {Bl valor de DX excede la de CX 1 de BX exiede al de AX! (<) El CX contien Este un desbordamien FEI BX igual o meant que el AX x a de avance paso por paso; (e) und transferencia de cadena derocha a igquicrta cua 8-7, Refirase ala figura 8-3, Sil procedimiento BIO no contiene wn RET, jcual sera elf 1 #8. Cuil la diferencia entre la codificacin de un operando PROC con FAR y con NEAR £9, ,Culles son las formas en que un programa puede inicia la ejecuciin de un procedin $10. En un programa -EXE, A10 Mama + B10, BIO lam C10 tama a D10, Como resultado d lamadas, jcudntas direccion ene la pila : $12. Suponga que el BL conte 1110 0011 y que la localidad Hamada BOONO 1 te Dictertiine el efecto sobre el BL para to siguiente: (a) XOR BL.BOONO: (b) AND BL, BOONO: er OR BLBOONO: (d) NOR BL. 111 111 1B; (@) AND BL, 000000008, 12 a el programa de la figura 8-4 como sigue: Defina el contenido de TTTLEX a 8-13. Suponga que et DX cou . O01 binario y que et CL. cont Determine et ‘ enido hexadecimal de DX despots de la ejecacion de las siguientes instrucciones no relackona pe 4) SHB DX. 1: (6) SHR DX.CL: (9 SHI DX,CL: (a) SHL DL.t: (€) ROR DX 1) ROK DL,CLs (y) SAL DH peree $14. Uuilice imsracciones para recorrer, mover y sumat 4 comenido de AX por 8-15. Lina rina a final de te secekin tinulada “Rotaciin de bits™ multiptica el DX:AX por 2. ¢ P rotina pa (a 1 por 4; (b) divide entre 4; (c)rnltiplicar lt 4K bits tel DX:AX:BX por PARTE C — Operaciones para la pantalla y el teclado taper CAPITULO 98=§ ———__________ Introducci6n al procesamiento en pantalla y del teclado La PA owerivo Introducir los requisitos para desplegar informacién en ta panta Hla y recibir i INTRODUCCION an y verifican " acién INT 21H del DOS maneja gran pa BIOS, que mane de Ia operacidn Como conv ficre al mimero ODH co aricter © a FUNCIONES DE LAINT 10H DEL BIOS —_ FUNCIONES DE LAINT21H DEL DOS 2H Pija el curs 2H Despliega en pantal HH Recorre la pantalla OH Despliega en pantalla AH Enir aFH E oH Desp a LA PANTALLA pantalla es una malta dk direceionables, en cualqu as cu 4) ¥ 80 col de 0 hasta 79), A continua r neces a El na espa a para w de desplicgue de vide El rea de itico inicia en la localidad de BIOS BOOO{OTH y permite utili mi 4K bytes de memoria bles para caracteres y 2K para atributos para cada ca vide ©, intermitencia, intensid b E legue hisico de video gr aciot colar pe ilizar 16K. byt ando en la localidad de BIOS BEO0[O}H. Se puacde pro " a en modo de texto para cardcter normal o en modo grifico, Para modo. de tex desplicgue ofrece para la pantalla “pain: adas desde Ia cero hasta la como EGA VGA. Aunque us programas pueden tra Ja - al Area de despliegue de vide add direcciones de tn ts a IN rismas en todos los modelo critura directa de datos en e1 dexpli al DOS. i bien ripida, puede ser riesg a recomendada es utilizar la it de int bit 7 as func OH para desplicgue, ubicar e , siciin y Limplar Ia pabialla, y las funciones de INT 21H para dif % 138 rduccién al proc lento en pantalla y del teclacto Capitul COLOCACION DEL CURSOR La colocacién del cursor es un requisito comin en modo de texto, ya qué su posicidn determin: (El modo grafico no permite el uso del cu peracin del BIOS para manejo de la pantalla, y ta funcién O2H en cl AH de pagina (o pantalla), por to comin 0 . donde seri desplegado el siguiemte cari INT 10H es la VL n el registro BH ¥y en el DX el renglén y columna requeridos. Los contenidos de los otros re ‘ ho son importantes Las instrucciones siguientes colocan el cursor en el renglén 05, column 12 , me FUNCION Para esta na en e! DX. también puede utilizar una instruccién MOV mediato, como Py con un valor hexade LIMPIAR LA PANTALLA La funcidn 06H de la INT 10H del BIOS maneja et borrado 0 recorrido de la pantalla, Pued F impiar todo o parte de un despliegue iniciando en cualquier localidad de la pattalla y terminand 5 én cualquier localidad con niimero mayor. Por ejemplo, para limpiar toda la pantalla especifiqu ¢l rengion:columna iniciales como 00-00H y el renglét:cohimna finales como 18:4FH. Cargus + AHL = funcién O6H + AL = OOH para Ia pantalla completa + BH = nimero del atrituto % * CX = renglon:columna iniciales s + DX = renglén:columaa finale En el ejemplo siguiente tributo 71H establece toda la pantalla con primer plano azul (1 u a 28 a le modo equivoca 9 establece usted la ubicaciéin de la esquina inferior derechs de la pantalla en algo may que 184FH, la operacién da vuelta a la pantal limmpia dos veces algunas Z ee incibn 09H dal DOS para 139 a determina en Con frecuencia un programa tiene que desplegar mens ue solicita da b del indica que ejecute una acid. Primero examinaremos los mét tones originales d Fen el AH indica DOS, que san titles para ejerciclos y programas pequefios, y mis adelante examinaremo n0, en métodos con mane} Je archivo. La wes del DOS original trabay as la ps otros registr ersiones y en algunos. aspectes son mi Sciles de usar, aunqu lizar operaciones mas reciente war FUNCION 09H DEL DOS PARA. DESPLIEGUE EN PANTALLA Last 1d de 1a funcidn OOH del DOS orig ee lama Requiere la definiciém de una rea a cadena . atament ina de pesos (S, o 24H aut a para finalizar el lente fo i OB *$', Sin embargo, el resultado ex que no puede utilizar esta 1a dexpleg Coloque La fsn AH, utilice LEA para cargar la dir lacaden de desplicguc en nINT desplicga acters d hy wqulerda a dered de los datos a 1 delimitad 0 i. Cargo INT no cam ne re Una cadena desplegad . ds In ekthema dereca de lk pantalla con x gui recorriendo la pantalla tanto pecesario, Si al final de la ca i no de pesos, la operacién despl acteres de ta mi asta q 7 ; on Uso de ta fuuneién OOF de la INT 21H para desplegar earseteres ASCIL te de lox 256 ASCII esti represen que pues alla de video. Alguns valores, cor FFH, puede le y aparecen come tn espacio € rdadero caricter ASC bianco es 20H ama .COM de la figura 9-1 despliega gri pleto de caracteres ASCH. + BIOCLR utiliza la funcidn O6H de Ia INT a limpiar la pantall ne * CLOSET ‘utiliza ta funcién O2H de a INT 10H para inicializa en 00,008. ‘ae Sicciio a amnion 4 FUNCION + DLODISP fe ln INT 21H para de el contend La primera linea desplegada inicia cc ritas folices” (OL 2 (03H amie (04H x ria que mi pocina, 08H peovoea un x Jol DOS para entrada del toclad 141 per i de pesos, 24H, no se desy « peciales,) E Se |a nota musical FH basta F ASCI Pucde corregir ¢1 programa para librar el eeplegar los ca La arvcek lentes evitan tod acteres entre 08H y ODH: puede querer expe i is eri (Retro DH ¢Retorno 4 ice de Hines y retorno forma normal d Sugerencia; Re rograma anterior, ensdmbiclo, ¢ iertalo en rchivo COM FUNCION OAH DEL DOS PARA ENTRADA DEL TECLADO jcwlar, la funcién OAH de la INT 21H pa F datos desde el te E arp cad a operacidn INT cesar. Pr fi bn gundo, la operacién envia Je paramettos el min bytes qu inaro Et obi n tras para un dea de cntrada abajo CHAR qu 1 un enguaje que haya viilizado el términa regisen rn esplegar cad LABEL es una ditectiv ipo de atributo de BYTE proves ‘ byte contiene su limite de F Je caracteres de un campo de un byte, el miximo es FFH. ‘ Hy 02H) a que espera q a fl E ue mostrar ye almacena eb nimero teal de caracteres introducidos cot be impo que conti sak Jeados, de izquierda tp 142 int al procesamiento en pantaita y dal te ap En la lista de pardimetros, la directiva LABEL indica al ensambiador que alivee en un ic y dé a la localidad cl nombre NAMEPAR. Puesto que LABEL no ocup NAMEPAR y MAXLEN se refi a Jocalidad de Para solicitar una entrada, establezca ta funciin OAH en el AH, carg cin d a de parimetros ( iplo NAMEPAR), en el DX, y emita INT 21H ope INT espera q xduzca cara verifica que no excedan MAXLEN en la lista de pari peracion re aricter en la pat avanza ¢l cursor, El usuario presiona para sefialar el final de la a tamb jr Enter le 1 ", La INT 09H ha almacenado los cara boifer y ha avanzado ia parte fi Por simplicidad, el ejemplo no muestra los c6u le rastreo avociados.) El programa ha emitido la INT 16H cinco veces p ados Jon car res y ha avanzado la parte final a 428H, de manera que el bifer est a 7 OH Cua ext leno, 1a parte final i ran J a 4 i ni . lea tghijklmaopae cna los caractere final en 428H y dan icial en 4264, ODH> © f k ® COMO INC E 4 44 428 $2C 42E 430 432 434436 En este punto, la INT O9H no acepta nin nds que se tecle Mui . fer tiene 16, acepra slo 15 a k decir por qué?) Si nro caricter, avanzaria Ia parte final a la misma direceiéa de Ia patte inicial Las teclas Ctrl, Shift y Alt Je datos del BIOS BIOS px > del shift eu 40:17H en el brea La INT 09H también maneja el byte [Shif derecho (bit 0), shift izquierdo (bit 1), Ctrl (bit 2) y Al para el teclado ampliado, Cuando presiona Su programa puede examina medio de la INT 16H (funcién 02H) 0 por referencia directa a la byte de estado, El t jgrama parcial COM ilustra el uso dite rencia di de estado NT 16H y direccion. Ea Jo los caracteres ™ " rio Jos cara sgramia utifiza la caracteristica SEGMENT AT para definir el area de dator del BIOS lidad, un segmento ficticio. KBSTATE identifica | I byte de est en 40:17H, El scgmento de codigo inicializa la direcckin de BIODATA ¢ fe inital. Pall cena et byte de estado del teclado en el AL. Una operacién OR pructa si alguna de Tas tecla sae hift fue presionada stl, nee Puede modificar este cédigo para examinar tambien los bytes de esta Jado ampliads n 40:18H y 40:96H, ‘OMO INGRESAR EL CONJUNTO COMPLETO DE CARACTERES ASCII A 4x comp aracteres y hasta el 295 (FFH ade lantad de ésta plegable 1 ASCII 20H (espacio) hu el teclado esti limitado a 83.0 101 teclas, la mayo NT O9H capiarg ASCII TEH (€ 198 Procesamiento ava do del eciado —_Capitul 56 caracteres ASCII no estin reprevemtados en él. Sin embargo puede introducir cualqui desde ( apropiado como un valor decimal por 8 6a hasta 255 manteniendo op primero esl caricter ASCII generac se utilizar DEBUC que ingress como dos bytes en el bier del teclado: e Por ejemplo, All+001 envia O1H, y Alt+-255 envia PFH. Pu para examinar el efecto de introducir diferentes nimerox PUNTOS CLAVE + Los bytes de estado del shift en el drea de datos: del BIOS indican el estad Alt, Shift, BlogMayis, BlogNum y Scrollock + Las operaciones de la INT 21H det DO! nocer 0 ignorar Curl +Break y para aceptar codigos de oporcionan diferentes servicios con o sin repeticio on Ja panialla, para rec + La INT 16H del BIOS p caracteres desde el be oporciona la operacidn bisica del BIOS ps ccardcter al AL-y el cédigo de rastreo de la tecla al AH. Para una tecla de funcivin extendid la operacidn envia cero al AL y el cédigo de rastteo al AH. + El cédigo de rasireo es un ndimero dnico asignado a cada tecla, que le permite al cl origen de una tecla presionada y permite a un programa verificar las ecla nckin extendidas tales como Inicio, AvPig y las fechas, +E] drea de datos del BIOS en 40:1EH contiene el bifer del tec ina entrada siona una tecla, el procesador del teclado genera el cOdigo de do) y solicita a INT 09H. Cuando su de rastreo (el primero mis 128 ndicarle a la INT O9H que la tecla ha sido soltada + La INT O9H del BIOS obtiene un codigo de rastreo del tectado, y ‘ ASCH asociad estado de Cur, Alt, Shift PREGUNTAS H1-L, €2) gC es ta losalidad det tela 0) OLN: (b) OTH: (6) OBH; (€) OAH ‘entre las funciones OOH, OLH y. 10H de ts ENT TES, Explique las dit psando cl cisigo peena los valores CII generado y el ilizar DEBUG peracion envia el jo para ace union extendida, ficar las teclas de pa izquierda) park genera un caricter do, 0 establece ef Jado. com la INT 21H 11-4, Proporcione fos cédigos de rastreo para tas funciones exteatias sigmiemts: a lecha hac arrita cla de Funcién programable; (c)iicio (Hoene); (d) RePag (Pet 1-5. Unlice DEBUG para examinar bos efectos de k rod 7 wat a la ricrrupedin, La ejecucin 1 detiene en espera de su entrada, Presione cualquier tela para ctaminar los registros Ally AL, Contin introduciendo diferentes teclas. Presiowe pars aa DEBUC Codifique tas iar para itrodacir un solo tecieo: sila tecla ex AvPigiPn cursor en el rengli 26, columna 0 ‘Corral programa deta figura 11-1 para proporcionar ts mex: {a) Despuds de panclla,(b) Cuando se presione IF, deyplegar el men. () Ta oar 7 una. INT OO no la ENT O94 mancja las tectas Curly Shift de man el tectado estind PARTE D — Manipulacién de datos CAPITULO 122@. 2——H—______ = Operaciones con cadenas de caracteres > OBJETIVO les utitizadas para procesar da mer. Pi 200 201 que wna instraccidn para ARACTERISTICAS DE LAS OPERACIONES CON CADENAS DE CARACTERES ‘Una instruct de cadena ped amicnto repet byte, palabra 80386 tiempo. Ast. puede seleceianar una oper palabra doble y supone el uso de los registros ES: DL o DS:SI. El Dly SI deben contener direccion Bisicamente existen dos maneras de codificar instrucciomes dk En la tabla siguient Ja segunda columna muestra el formato bisico para cada operackin, Ia cu o . perandos como MOVS BYTE! ,BYTE2, en donde la definicién pera ak cud del movimiento) per r * Ia segunda manera de cod ciones aes la a usu cn las.colummnas cuarta, quinta y sexta. Usted carga las di e Jos en lc Diy Sly cod or ejemplo, MOVSB, MOVSW y MOVSD aruccion a suponen que ef DI y el St eck desplaza micmto validas que hacen 1 ia a bytes en memoria, El registro SI esta asc ‘ omiin con el DS (segmento de datos 2S:SI. El registro DI sth asociadk registro ES (segmento extra) come consecuencia, MOS. STOS, CMPS y SCAS ES necesitan que un programa .EXE REP: PREFLIO DE REPETICION DE CADENA El prefijo REP inmediatame REP MOVSB, propore ablece en el r x hel CX sea cero, De esta mane Operaciones con cadenas de caracteres Capitulo La bandera de direccién (DF) determina a direccidn de la operacién que se repite: * Para procesamiento de inquierda a derecha (Ia manera normal de procesar), utilice CLD para poner en cero a DF + Para procesamiento de derecha a izquierda, utilice STD para poner uno en DF El cjemplo siguiente mueve (0 mejor, copia) los 20 bytes de STRING! a STRING? (supong ‘que cl DS y ES ambos han sido inicializados con la direccin del segmento de datos, co Durante la ejecucién, las instrucciones CMPS y SCAS también establecen las banderas ¢ ‘estado, de modo que la operaciOn puede terminar de manera inmediata al encontrar uns cond ‘ida especiticada. Las variaciones de REP para este propésito son las siguientes + REP Repite la operacién hasta que el CX Hegue a cero. + REPE o REPZ _Repite Ia operacidn mientras la bandera de cero (ZF) indique igual o cero Se detiene cuando la ZF indica difereate & ceto © cuando CX Wega a cero, + REPNE OREPNZ Repite la operacidn mientras la ZF indica diferente o cero. Se detic la ZF indica igual 0 cero 0 cuando CX llega a cero. Para el 80286 y proceradores mis avanzados, el uso de las operaciones con palabra 0 palabra ‘dobile puede proporcionar un procesamiento mis ripido. Ahora examinaretnos en detalle las opera clones de cadena MOYS: MOVER UNA CADENA DE CARACTERES MOVS combinada con tn prefijo REP y una longinad en el CX puede mover cualquier mimero de Caracteres. Aunque usted no codifica los operandos, In instruccién se parece a esto: Para fa cadena receptora, los registros segmento:desplazamiento son ES:DI; para la cadena temisora los registros segmento:desplazamiento ton DS:SI, Como resultado, al inicio de un progra ‘a .EXE imicialive el registro ES junto con el registro DS y, antes de ejecutat el MOVS, utilise LEA Para inicializar los registros DI y SI. Dependiendo de la bandera de direeciin, MOVS incrementa ¢ ddisminuye fos registros Di y Sl en | para un byte, en 2 para una palabra y en 4 para una palabra doble. El cédigo siguiente es ilustrativo: lice CLD Se detiene elas opera un progres tilice LEA una palabra S: Mover una eractares 203 La figura 6-2 ihust utilizado MOVSB para este mover un campo de 9 bytes. El programa ta bjetivo, En la figura 12-1 el procedimniento C1OMV'SB utiliza MOVSB para mover de byte en byte wn campo de 10 bytes NAMEl a NAME2. La la bandera de direccién de modo que el MOVSB procesa inicio de la ejecucién, por lo regular la bandera de direccidn se encuentra en cero, pero icin extd codificado CLD, instrucciones LEA cargan y NAME2, respectivat mitica inicializa los registros DS y ES, las direcciones seg para ES:DI y DS:SH. Una instruccién MOV inicializa el CX con 10 (la lon NAMEZ). Abors la instruceién REP MOVSB realiza lo siguiente tmer instrucciée, CLD, s repisttos: St y DE cs Ya que el cargador del DOS para un programa .COM de manera m mos de NAME n los desplaza mento-desplazamicnto son corrects jtud de NAME! y de or DS:SI) al byte de + Mueve el byte de la extrema izquierda de NAME! (direecionado p a de NAME? (direccionado por ES:DI + Incrementa el DI'y Si en uno para los siguientes bytes a li » Disiminuye el CX en I + Repite esta operacié, 10 cielos en total, hasta que el CX se convierte en c Puesto que la bandera de ditecciin es cero y MOVSB incrementa DI y SI, cada iteracidin process un byte més a Ia derecha, como NAME1+1 a NAME2 final de la ejecucién, el CX contiene 00, el DI contiene la direceién de NAME2+10, y el SI comtiene Ia direccidn de NAME1-+10 —ambos un byte después del final del nombce Si la bandera-de diteccién es uno, MOVSB disminuiria DI y St, pri 1. y asl en forma sucesiva. Al 1 ocurriera de de mover los contenidos de manera cha a izquierd en ese caso, par adecuada tendria que inicializar el SI con NAME!+9 y el DI con NAME2 Ey procedimiento siguiente de la figura 12-1, DIOMVSW, utiliza MOVSW para n cinco palabras desde NAME2 a NAME3. Al final de la ejecucién, el CX comtiene 00, e! DI Ccontiene la direccién de NAME3+0, y el SI contiene la direecién de NAME2+ 10, 204 on cadenas de carac Capit dima Figura 12-1. Uso de operaciones con cadens MOVS r Ya que MOVSW incrementa los registros DI y SI en 2, la operacién s6to nece STOS: ALN clos, Para procesar de derecha a izquierda, inicialice el SI con NAMEL+8 a NAME2 +8. LODS; CARGA UNA CADENA DE CARACTERES LODS carga el AL con un byte, el AX con una palabra o el EAX con una palabe emoria. La direccidn de memoria estd sujeta.a los registros DS;S1, aunque p SI. Dependiendo de Ia bandera de ditecsi6n, la operacién también incremeata @ disminuye el Sl ¢ oble dete t pasar por alc va para byte, en’2 para palabra y ea 4 para palab acién LODS Hema el re prefijo RIEP. Para a mayor parte de los propds MOV genera 3 bytes de c6digo 8 una seneila in LODS slo genera sr LODS para recorrer wna cadena v lecuads. Pe méquina, mientras q SI. Podria utili ina palabra doble a la vez, exami Figura 12-2 . DSW Las instro quivalentes a LODSB En a ok r a byte FIELDA 1 * Assemble 0. campo de 10 mado FIELDB. El obj les de FIELDA 4 FIELDB. rersa, de FIELDB conten th LODSB es utilizada p un vend DA al AL nstruccién MC DI),AL trans pytes a FIELDIB de derecha a izquierda, peesita de ci ‘OS: ALMACENAR UNA CADENA DE CARACTERES ty cl DI STOS alimacena los contenid egistto AL, AX‘o EAX € slabra 0 pala ria. Lad n iemipre a a ES:DI. Dep lo d andera de direccin, $ jecrementa o disminuye to DI en | para so practico d prefijo REP ex para inicializar el érea de dat minye el SI 206 La instrucein STOSW en la figura 12.3 almacena de ‘cinco veces en NAME]. La operacién almacen NAME primer byte y el AH en blanco, e! CX contiene 00 y el L es. enonden inverso). Al fin adireccién de NAMEI +1 (COMO TRANSFERIR DATOS CON LODS ¥ STOS El programa de La figura 12-4 ilustra el uso de ambas instrucciones, LODS y STOS. El ejet semejante al ygrama de la figura 10-4, que transfiere caracteres y atributos de man directa al érea de despliegue de vi wo que en la figura 12-4 contiene estas diferencia * Para cl drea de video, utiliza la pagina nim En CIOPROC utiliza STOSW para almacenar caracteres y video, en lugar de esta instruceiém y sus dos intrucciones DEC partantes que dismi * Enel segmento de datos, define un elemento llamado PROMPT, solicita al usuari fet tecla .,.", para ser utltzad: + Allterminar el procesarnie procedimicnto D1OPROMPT de Para este fin, utiliza LODSB vez, desde PROMPT al AL y utiliza STOSW para tr asociado desde el AX al drea de vide (MPS: COMPARAR CADENAS CMPS compara el contenido de una Jocalidad de memoria (4 calidad de memoria (direc jeccionada por DS:SI} com el de ot onada por ES:DI). Dependiendo de la bandera de direccié, CM gstros SI y DI el AH enel byte tiene 00 y el TOS. E} ejempla SI) con el de otra direceidn, CMPS 207 Figura 12-4 Despliegve directo.en 208 NAME E CMPSE : banderas. AF, CF, OF, PF ASCH. La of adi P REP a MPSB. E alores. F a opera NAME 3 2 NAME NAME rene isto BL ae 209 F. Cuando * . Figura 12-5 aciones decadent de caracteres CMP mpara cMpsw 2 sles). Abor SAMUEL y ARNOLD. Para la comparacin inicial de as pl erar SA ‘ AR Ia operacion compara AS con RA. A . re SAMUEL inde ; ee ayor, seré menor, ¢ incorrecio, CMPSW funciona t para NAM AS: BUSQUEDA EN CADENAS Bc realiza¢ SCAS diflere de CMPS en que SCAS busca una cadena slor de byte, palab : Je NAME ble especifico, SCAS Iu localidad de memoria (diteccionado por ES. DI Pn tro Den | para alabra y 4 pare palabra * i Ai final de a SCAS estable as AF. CF, OF, PF, SFy ZF, Cuan i fio REP y una longitud en el CX, SCAS ped Si 1 contiene I SCAS os util ar para ap x30) en la pe programa tone El cédig ura 12-6 \ 4m, La ope ian DEB es REPNE SCASB racida SCASB : ' NAME 0 “A SCASB ™ aracion. 5 DEBU : . 210 Dporaciones con cadenas de caractore Figura 12-6 Uso de la operaciin de cadena de cara operaciion REP SCASB mentado en un byte pasan 0 Al wctnksh pee hast SCASW busca una palabra utiliza LODSW @ MOV para transferir una AX. el p AL y cl segundo en el AH. Como SCASW compara los bytes ex funciona de mat BUSCAR Y REEMPLAZAR semplasa porrar de un documento caracteres de € guiente programa parcial busca en STRING un ampersin (&) y lo 1 stra cero, el CX of jemp n, como simbolos de pirrafo y de fin de pig SCASB localiza un aimpersin, termina la operacién. En este ejemplo, existe uno en STRING 10 Di a STRINC donde ic iscra un blanco, aunque al ial SCASB ! Diamine Dl ex AX »DLFIC MoD apitut posicidn actual de para indicar que se epistro AX. Si P plo, park fe fin de pagina. 2 con un blanco. $f en STRING +8, 8 » Dia STRING +5) mplaza a ODIFICACION ALTERNA PARA INSTRUCCIONES DE CADENA DE CARACTERES c mas, si codifica de manera explicita con una instruccién para byte, palabra 0 palabra doble, como MOVSB, MOVSW 0 MOVSD, el ensamblador supone gitud correcta y 1 necesita operands. También puede utilizar Jos formatos bisicos de la instruccién pas jones con cadenas de caracteres. Para instrucciones tales como MOVS, que no tienen su FLDA y FLDB estin defin los registros DI y SI con las di én MOVS como movimiento repe de! byte que inicia en FLLDB al byte que inicia en FLDA. Si catg jones de FLDA y FLDB, también pue ados de esta manera, y el formato se )MO DUPLICAR UN PATRON La instruceién STOS es dil para codificar tu fe, palabra le especifico, Sin embargo, para repetir un patrin que exceda estas longitude tilizar MOVS con una pliegue al siguiente pateén: icacién, Digamos que tiene que establecer una linea de En lugar de definir el patrén de manera repetitiva, ta definir Jos primeros seis byte ue estin al inicio de la linea de 212 a inal de DISAREA | + FIOCLNM utili 2 STOSW pat La longitud de ACTNLEN en la lista de sleul heer dé mis a La derecha en el nom DISAREA a. El patron pu spitulo, El proce ba Figura 12-7 Jusificacion ala de ta pana 214 as de caractores Cay PUNTOS : PREGUN i rt 1 215 UNTOS CLAVE nas de caracteres MOVS, STOS, CMPS y SCAS. aliza © 0 ES, sufijos B, Wo D pa + Para las instruccione dde que su programa .EXE + Par + Ponga en uno (CLD) o-en cero (STD) la bandera de direccién para a direceién necesarin d + Verifique dos veces la inicializacién de los regis MOVS ing Jos operandos DI,SI, mientras que CMPS implica lo SIDI + Tnicialice el registro CX de REP para procesar el tiimero necesario: de bytes, palabra palabras doble * Para procesamiento normal, utilice REP com MOVS y STOS, y utilice un REP condictonal (REPE 0 REPNE) con CMPS y SCAS. + CMPSW y SCASW invierten de las palabras que son comparada: + En donde necesite procesar de del campo de byte de la extrema dk es NAMEI y tiene un direccién que cazga para LEA eceidn que carga para LEA aracteres acceta NAME+8 y NAME+9 Jongitud de 10 bytes, © es NAME+9. Sit NAME-+8 ya que la operac PREGUNTAS Dio St. ier os restos para si 2) MOVS (operand (b) CAPS (operand SCAS (operand Para operas cadenas wsando REP, :simo define el miimero d que Para operaciones con cadenas usando REP, (cdimo estab amiento de derecha a fequierda 1 capitulo da las instruceiones equivalentes a (a) MOVSB, (2) LODSB y (c) STOSB, cada ur prefijo REP. Para cada caso, proporcione et quivatente pa arcsento de palabra 12-8, Corrija el programa de a figura 12-1. Comviera el programa de formoto COM a EXE, y asep peraciones MOVSB y MOVSW para mover datos quierda. Utilice DEBUG 2) Mover CONAME a PRLINE, de inquiends 4 dececha, over CONAME a PRLINE, le derecha a izquierd, 216 CAPITL Aritn I—Pr INTRODUCE Ta CAPITULO 13 = ——— = Aritmética: I—Procesamiento de datos binarios NTRODUCCION ADD Suma SUB Resta IMUL Mi Dv Di NEG Niega av 218 SUMA Y RESTA Las instrucciones ADD y SUB realizan narios negativos estén. represe plement lavierta todos los bits del niimero positivo y sume 1. Los formatos gener. ara las instrucciones ADD y SUB son Como con otras instrucciones, no existen operaciones directas de memoria a mem ra sumat WORDA a WORDB: a el registro AX ora a ejemplos de ADD y SUB para el procesamiemto de valores en El procedimiento BIOADD utiliza ADD para procesar bytes y el proce miento C1OSUB utiliza SUB para : Deshordamientas Est alerta con los desbordamientos en las oper. jones aritméticas. Ya que un byte sé hasta +127), una operacién aritmé p YY una suma en AL contiene 60H. E provocar resultados inesperados. Por ejemplo, suponga qu genera una suma de 80H en el AL. Coma hemos sumado dos nimeros positives, esperamos 4) {a suma sea positiva, pero la operaci uno la bandera de desbordamiento y la bande . sativa. {La raza? El valor 80H, 0 900 tina negati a 128 aes El problema es que el registro AL es muy pequeto par LAX. E AX: 008 notia. E pandera de AX En el ejemplo siguiente, CBW extiende e AX. Después AX:00804, de sign del wo de ADD al sumar 20H al mime del AL (00 1) al AH. Observe q signo (0) en el AL ssuma 20H al AX (en lugar de al AL) y g que el AX representara la suma de imstruecion para este propdsito es CBW (convierte byte AL que de forma uc cl CBW esté te ngido para c al AH, que nera (CSO doc mys, Ral que, POF ch na defini MH se convierte en MO1H. P E \ g , ae soDwD ade un par de WORE t do par (WORD2A y WORD2B) y alma 8). Ea ser . WORD2A a WORD WORD3A. A 22 sama en WORDSB, Examinemos Las operaciones en detalle. El primer MOV y la operackin AD! ATOS CON wert i AX ' ade WORDIA mis WORD2A excede la capacidad del AX, ocurre un acar an le acarreo es puesta en uno. Ahora, el ejemplo suma las palabras de la derecha, ando ADC (sumar con acarreo) en lugar de ADD, ADC suma los dos niimeros y SUB Por medio de DEBUG rastree la aritmética: ped uma O136H en el AX y los val inverse 9C11H en WORDSA y 3601H en WORDSB. Tambiel gura 13-2, el procedimiento mas elaborado EXODWD proporeiona u 1c para sumar mimeros de cualquier Longitud aunque aqui, ome antes, se suma la a palabras WORDIA: WORDIB y WORD2A:WORD2B. El procedimiento utiliza el SI, D ls bi ros hase pata las direc WORDIA, WORD2A y WORD3A. aves de las instruceiones por cada par de palabras a ciclo 5 palabras de la exirerna izquierda, y el ia: sma las. de jue el segundo ciclo es para procesar las 4 Una o Ly BX se incrementan en 2. Para cada registro, dc ¢ INC real mplea INC (en lugar de ADD) por unia buena razén lain { ais én re. 0: scarteo y Causaria una respuesta incorrecta, mientras q A causa dh e ain ADC. Al i a instruccién CLE (por: inicializar el CX al ue sei sutnax labras, la instruccidn ¢ ADC es SBB (restar con pre DDWD,, #61 ADC con SBE Laope Aritmética en registros de 32 bits Duta 80386 y procesadores posteriores prove tros de 32 bits para arit con palad u Por ejemplo, para sumar cl EBX al EAX s6lo codifiq } Puede suma suidruples utizando la técnica estudica antes para sumar palabe: A. el sueldo de un empleado, Para datos sin signa lugar de un maximo de 32,76 0, el bit de la extre SUB no d Sin embarg ‘el campo con fica cualquier cosa + Aritmética com acarreo emaRIO La operaciin sobre los di Desbordamiento aritmétic, Una operacitin aritmética pone en en de Signo; por ejemplo, un niime 160s pueden tener niimeros sebraico, ¥ otros campo DECIMAL ‘SIN Stano DECIMAL CON sian OF CF qui 0. Si ocUrFe un acarreo en datos sit a prov DECIMAL SIN S1GNO DECIMAL CON SIGNO OF CF tino la bandera de desborda 1 un desborda 224 rimetca DECIMAL DECIMAL Patabe dobie DECIMAL DECIMAL BINAKIO SINSIGNO CONSIGNO OF CF ! er a progra Jee di tamato de r : MULTIPLICACION P ° 2 i a f : IMUL en 4 ae Tama te deat armas i mato d Elope rocesa, ¥ tiene la responsabilidad de seleccionar ta instr de muttiplicacién spropiada. E apd ra MUL e IMUL ide ope Byte por byte tn byte en memoria @ en otro registro, Para la instruccién MUL DI AL por e lel DL. E ucto generadk ° AX AVL (rl propiada. E ara cl 80386 225 Palabra por palabra Para multiplicar dos mimeros de una palabra, e! multiplicando esti en el registro AX plicando ¢s una palabra en memoria o en otro registro. Para la instruccién MUL. DX, la operaci ‘maltiplica ef contenido del AX por el contenido del DX. El prod a palabr (que necesita dos registro den alto (mas a ta kzquier pare mds a In derecha La operacion ignora cualquier informacicn 4 da estar en el DX Palabra doble por palabra doble Para multiplicar dos mimeros de palabras dobles, el mulip est egistro EAX multiplicador es una palabra doble en memoria El producto es generado en el par EDX:EAX. La operacion ignora y borr a en el EDX Tamafio de campo El operando de MUL 0 IMUL sélo hace referencia al multiplicador, que determina el tamato de INSTRUCCION MULTIPLICADOR =—MULTIPLICANDO-PRODUCTO jos ejemplos siguientes, los finidos en memona OPERACION MULTIPLICADOR MULTIPLICANDO PRODUCTO 226 Artmética: |—Proc iplicacién sin si BI objetivo: a instroccién MUL es 05 sin sig a figura 13-3, CIOML plos del uso de MUL: byte por byte, palabra por El primer ejemplo multiplica 80H (128) por 40H (6 nducto en el AX El segundo ejemplo genera 1000 O000H en los registros DX:AX. El tercer ejemplo multiplica una palabra por un byte y necesita extender BYTE] AH soin cero. (Aqui el problema con el uso de CBW ex que el bit de la extrema izquierda de podria ser unc spagacién de bits uno en el AH g cen el DX: AX 8 0040 0000H. 3 Multiplicacién con signo: [MUL El objetive de Iai mt iphicacion er igura 13-3, DIOIMUL da los mismos tres ejemplos que CLOMUL, pero reemplaza MUL tiplica 80H (un niimero negativa) por 40H (un nimere cen el registro AX e+ EOOOH. Usando los mismos datos, MUL genera un produc asi que puede ver la diferencia entre el uso de MUL y de IMUL. MUL trata 80H c 28, mientras que IMUL lo trata como ~128, El producto de -128 por +64 es -819: al a EOOOH. (Iniente convirtiendo EOOUH a bits. invierta los bits, sume 1 y su os bits E iplica S000H (un ndimero x ob El p DX: AX es F000 O000H, que € erado Eltercer ejemplo extiende BYTE a una palabra en el AX. Ya que los nimeros se sup signo, el ejempio utiliza CBW para extender el bit del signo de la extrema izquierd r0 AH: BOF en el AL se convierte en FFBOH en el AX. Ya que el multiplicador, WORE lambién es negativo, el producto debe ser positive, Y en realidad asi es: 0040 OOOOH OX:AX e MUL, « ume E co el el bit del mismo signo, EMUL y M MULTIPLICACION DE PALABRAS MULTIPLES Qué p bien, pala separa CIOMUL ai AX BYTE! a una AL n signo, En la plaza MUL. com in produc trata BOH com 81 92H, que es ores de pad eros se suponen aquierda en el ador, WORD} IMUL y MUL vo. El results igura 133 Multipliescién con pes aprepiadas | par palabra, 6 Qué pasa si usted s6lo puede multiplicar nimeros de dos digitos? Entonces podria m 0 Signo en una separado el 13 y el 65 por 12, como: i 386 28 Ariimatica: esa Ho datos bina pli palabra doble ps El ml bra Hy 2521H, respectivamente. La razén DD (palabra es para facilitar el dire palabs gisiro AX. L 08 est Asi MULTCND, que tiene un valor definido de 3 IH, esal r 6 Figura 13-48 El multi MULTPLR +001 alabra faquierda de MULTCND; el prod: Es PRODUCT+2y PRODUCT+4. E Jo MUL de MULTCND; el producto es 138A S800H. Entoo r mer ADD car a sex 29 230 a: |-Procesamiento de datos binarios Capit Munpicacion p MULTIPLICANDO MULTIPLICADOR palabra 2 palabra id palabra 2 x palabra | palabr palabea palabra palabra Se e1 DX y AX para la palabra spropiads en el producto final. En la fig sjemplo, MULTCND contiene 3206 2521H, MULTPLR contiene (10 A26H y PRODUCT muntiene cuatro palabr Aunque la ldgica es semejante a la multiplicacién de una palabra doble por uns problema necesita wna caracteristica adicional, Después de la pareja ADD/ADC esta otro AD 20 a PRODUCT. El primer ADC puede provocar un acarreo, que instruccion piarian, Por Jo tanto, el segundo ADC suma cero si no hay acarreo y uno si ex MULTIPLICA iguno, La dltima pareja ADD/ADC no necesita un ADC adicional: Ya que PRODUC waa jentemente grande para la respuesta final generada, no existe acarre aad El producto final es 138A 687C BESC CCE6, almacenado en PRODUCT con los b i s, Trate de usar DEBUG para rastrear este ejempl =~ INSTRUCCIONES ESPECIALES DE MULTIPLICACION Mi M res posteriores tienen formatos adicionales para IMUL que propor 2s ¥ permiten generar proxluctos en registros distintos del AX. Puede Mi a nes para muliplicar datos con y sin signo, ya que los resiltados ini T meros deben tener la misma 6 1 80386 y procesadores pe ‘Corvin Operacién IMUL en 16 bits ee Para el IMUL en 16 bits el primer oper sumere oducto Operaciéa IMUL en 32 bits E} IMUL en 32 bits tiene tres operand un nittero inmedia Operacién EMUL en 16/32 bits sa que comtiene e! multiplicad formato general para el IMUL El producto es gene $m de IMUL. de 16 R contiene 6400 3 pl est4 otro ADC by uno si existe M DUCT es sufh primer ope desbordamicate raciones de 16 undo operandd He aqui ejemplos de estas tres insirucciones IMUL LTIPLICACION POR CORRIMIENTO Para multiplicar por una potencia + mis eficiente slo corre eves Para ¢ orrimientos en el reg etd en el AX. ejemplos sigue Multiplicar por 2 (un corrimie Multiph a la t2quierda) SHL AX MOV CL.03 SHL AX,CL ala izquierda):. SHL AX. Por 8 (tres corrimiemtos a la izquierda): #088/8086 Multipticar por 8 (tres corrimientor 80286 y poste Corrimiento en los registros DX:AX La rutina siguiente puede ser titi} para obtener un producto por corrimientos a la repistros DX:AX cualquier mimero Puede id iodo mis eficiente, pero este ejemplo es generalizado ciclos imientos) en el CX. Observe que un bit 1 registro entra a la bandera de acarreo, la cual es utilizada por RCL El método siguiente para corrimientos a ta izquierda necesita de un 80286 7 gs ds 4 . de ms instruccid ada. EI fo \ | 233 OPERACION DIVIDENDG COCIENTE RESIOUO Ba los emplos siguientes de DIV, los 4 estin definidos en memor Después 7 FH DIVISOR —_DIVIDENDO COCIENTE —_RESIOUO Divisién sin signa: DIV Dive DIODI mt ' : = etre 80H en el AL es 40H (64). sac on el Al En el tere DX ¢s 1000H y el cocienn ios oneott am arto ejemplo 1 siender WORDI a tna palabra dob DX. De puts de lad DX es O000H te en el AX cs 0002 234 prnética: |—Procesamiann : - Dest f * won oe DX:A Figura 135. Divisin con sio yin sgn | EJEMPLODEIOV —RESIDUD ~——cocienTE Divi ‘Solo el cuanto ejemplo da el mismo resultado que el que dio DIV. En efecto, si el dividendo y © divisor tienen el mismo bit de signo, DIV e IDIV generan el Peto siel di ¢ tienen bits de entes, DIV genera un cociente positive, mientras que IDIV Puede encan I usar DEBUG para rastrear estos ¢ Deshoradamientas ¢ interrupein Las operaciones DIV © IDIV supe cociemte €¢ mucho menor que el dividendo original Como consecuencia, la operacin puede €2u n. Pero la division en genera un cocient aterrupcién sta es una regla iterrupe idendo: si el diviso mayor que la palabra doble izquierda (EDX) del divi como divisor, aunque también pueden servir otras cifras UA OPERACION DIVIDE DIVIDEND® DIVISOR COCIENTE abra entre byte o1 1 Pala En ambos casos, el caciente generado exce na pracba. anges d + DIV oIDIV, como se n mero, DIVBYTE es un divisor de un byte, y el dividendo ya ests en el AX. DIVWORD es un divisor de una palabra y el dividendo esti en el 2 IDIV, ta 6gica debe tener en cuenta que el dividendo o el soluto del divisor debe ser el menor de los dos, pue ene un rakmeero Negative en positivo y después de la division restau Ya que el v fe utilizar la instruceidn NEG para convertir temporal Divisidin por medio de restas, Si un cociemte es demasiado grande para cl iso del di sucesivas, Esto ms Avitmtica: | 0 datos bina : ns restando hasta que el menor que et divisor. En el ejemplo siguiente, et ann den el AX, el div BX y el cociente se desa ex ruy simple pra demoxrar slo a ei. 8 el eaiee es 1 nparar AX con BX sélo si DX es cero accién SUB, insertar SBB DX,0C Para el 8088/8086, un corr " L. Los ejemplos siguientes suponen que Corrimientos en tos registros DX:AX Ta registros DX:AX. Puede ideat un método mis eficiente, pero este ejemplo es general para cu quicr numero de ciclos (y corrimienios) en el CX. Observe que un bit 1 desplazado fuera dé a de acarreo, 1a cual es utilizada por RCR: 237 MBIO (INVERSION) DEL SIGNO send En realidad, NEC sal que NOT 2 complement El formato gene a NEC \ A s ponga que ¢ DX:AX con nu rio de NEG no puede actuar sob AX datos ASCTI son adecuados para desplegar e im 2 teren de un )CESADORES NUMERICOS DE DATOS (COPROCESADORES) eral para cua queda fuera del alcance d », Lavtareta de sistema tiene un enchufe para un Pro 238 Aritmética: |—Procesamiento de binarios —Capitu guna 1 8087 consta de ocho registros de 80 bits, RI-R8, én el formato siguiente Cada registro tiene asoc ador de 2 bits, que indies su estad DL Contiene un valor cero Est va El coprovesack ace siete tipos de datos numér Word integer (palabra): 16 bits de datos binaric Long integer 750: 4 bits de datos binario Short real (real corto): 32 bits de datos de punto flocante Long rea argo): 64 bits de datos de panto Aotante PREGUNT 239 NTOS CLAVE CAPIT Ariti de di STRODUCE AP{TULO 14 Aritmética: II—Procesamiento de datos ASCII y BCD ‘OMIETIVO SCI y BCD para realizar arit centre estos fi y el ‘Avtmétice: Procesamiento de datos ASK Las instrncciones introducidas en esie capitulo som: AAA Ajusta ASCII después de sumat AAS —Ajusta ASCII después de restar ANAM. Ajusta ASCU después de multiplica AAD. Ajusta ASCII para divide DAA. Ajusta decimal después d DAS Ajusta decimal después de restat DATOS EN FORMATO DECIMAL Hasta est hemos manejado valores numéricos en formatos binario y ASC, El sistema ieee aunien permie usar formate decimal coxificado en binario (BCD), que facia wip spetaciones aritméticas limitadas. Dos usos del formato BCD son: 1. EL BCD permite un redondeo apropiado de ndmeros sin pérdida de presi er acteristica que es particolarmente dtl para manejo de cantidades monetais ) y el punto decimal (2E) a EBCDIC (60 y 4B. hex Al final EBCNO debe se XLTBL rBL | pros Figura 166 274 Procesamiento de tablas Capt entra : (ste Figura Como vio en la figura 8-1, desplegar simbolos ASCII no causa pr s embargo, desplegar la representacién hexadecimal de un valor ASCII es rads complicado. P nplo, para desplezar tun hexadecimal como ASC, tise que convertir OOH a 3030H, 0} 30311, etcétera Et programa inicializa HEXCTR a 00 y por cada ciclo lo increments ¢ anera s Ei procedimiemo CIOHEX divide HEXCTR en dos digitos hexadecimales. Por ej g3 que HEXCTR contiene 4FH. La tulina exirae el 4 hex y lo con un para wna traduccidn. El mimero que regresa al AL. es 34H. Después, in rutina extae la traduce a 46H. El resultado, 3446H, se dexplicga como 4F !' El procedimiento DIODISP convierte caracteres no ASCII en blancos. Ya que la f qed IH de la INT 21H del DOS trata a LAH como un cardcier de fin de archivo. el progr ingress tambien lo cambia a espacio en blanco. Cuatido un renglén esthlleno con 16 carsctcres, el pr - dimicnto lo desplicga; el procedimiento termina después de desplegar el renglin decimosex on NAMIENTO DE ENTRADAS DE UNA TABLA LISTAS LIGA icacién necesita ordenar datos tabla en secvencia ascende u cjemplo, un usuario puede necesitar tena lista de descripciones de existencia secues tuna lista del total de ventas por agente escendemie, Existen vai a ha tas para ordenar tablas, desde las ineficientes pero claras hasta las eficientes pero. poco cla peces La rutina prese esta seccidn es bastante eficie ada 1 con la entrada 2, la entrada 2 hasta el final de la tabla, intercambiando las entradas algin intercambio de entradas, repita el proceso desde el a uno con la entrada dos, ora vez, Si nc secuencia y se puede terminar e] ordenamient icto de la tabla, comparan realiza ningtin intercambio, Ia tabla ya ests « En el seudocédigo siguiente, SWAP es un elemento que indica (Sf) 0 10 (NO) icado. Por 50H, 01H we que el programa atmacena de manera sucesiva en tna tabla Hlamada NAMETAB. ( {ngresado todos los nombres, el usuario sélo presiona la tecla Enter, sin ningiin nombre, Entom fena la tabla de nombres en secuencia ascendente y los desplega en la pantalla das de Ia tabla son todas de longitud fja de ordenar informacion de ongitud variable seria més complicada ASCH: par ayaa ae STAS LIGADAS (ENLAZADAS) Una lista ligada contiene datos lamados celdas, al igual que fas entradas de una tabla, ecuencia especifica. Cada celda contiene un apunador (puntero) a la celda siguiente par fa ar las bisquedas hacia adelante. (Una celda también pucde precedente de manera que 1a busqueda pueda realiz agregar y climinar de una lista sin la necesidad de expi comener un apuntador a la ¢e een cualquier direccién.) El método fac dirla 0 contraeria lista ligada contiene celdas ¢on un ndmen ASCII de cuatro bytes), precio por unidad (palaby aria elda sig n la list Para muestros props de parte que contiene el siguiente riimero de parte la entrada es de ocho bytes de longitud. El apuntador ex un desplazam 276 Procesamidnta de tablas Cap ees to scss (a 7 apitulo 18, 277 278 nto de tables Cap Figura 18-7 wack a. La lista ligada inicia en el desp 2000, et nla seri DESPLAZAMIENTO NO. PARTE PRECIO SiG. DIRECCION n016 03.75 El elem 0016 contiene omo la direccidn vin El 2 15-8.utiliza et 0 de la lista ida, LINKLST ero de parte especifica, en este caso 1720. La twisqueda empieza con abla, La Jogica para wear CMPSB es similar a la de la figura 15-4 * Igual: La busqueda ha (erin * Menor: El elemento n a tabla ‘* Mayor: El programa obtiene el desplazamniento de la tabla para el elemen ven so, Si el desplaramieein 0 ex cero, Ia comparnciéa se repite para el a clemento; si el desplazamiento es cero, la busqueda termina sin encontrar al eleenen: Siro, LONGI PUNTOS CL p podria permitir al usuar omo una cifra ASCIL TIPO, LONGITUD ¥ TAMARO DE LOS OPERADORES TYPE, LENGTH y SIZE LENGTH para NTOS CLAVE acionadas y tengan | * Disente tablas con b = Re Adem CMP y CMPSW be pala 280 Pr : Is. “ Figura 15-8 Lists liga " PREGUNTAS 18-1. Dé las diferencias entre el procesamiento de una tabla para diteccionamiewo directo y para datos de sr datos ASC. Arr sescit machin. El programas dete realizar las a Cifrar CRYPTEXT y desplegar | + Descifrar CRYPTEXT y desplegar 281 PARTE E—Entrada/Salida avanzadas CAPITULO 16. —-@-—--——-W_—_—— Organizacion del almacenamiento en disco OBIETIVO INTRODUCCION CARACTERISTICAS DE LOS DISCOS Pistus y sectores Cada Indo dé un disco Flexible 0 de un disco Las dispositivos de discos flexibles y de discos duros se hacen funcioa, 1to ech ree a, Pa sabe i fixate un 0 flexible, una pe querida. Despoés, 1 cont ilegue a la cabeza. En ese momento la opera a iene lugar. La figura 16-1 ilustra este procedim s diferencias principales entre una uni de disco duro y una d flexi flexible la cabeza de lectura/escritura re cada operacién de lectura/eserit Chtindros El cilindro es el conjunto vertical odat las pistas con el mismo ndmero eb cada superficie dé un disco flexible o de un disco duro. Por tanto el eilindro 0 es el conjunto de pistas nummeradas con lindro 1 ¢s et conjuno de pistas con niimero: 1, y asf sucesivamente. Entonces, on un d flexible el cilindro 0 consiste en la pista O ence! lado I y la pista O en el lado 2: el cilindso | - m la pista 1 en e lado 1 y la pista 1 en el lado 2, ete. Cuando se escribe un archivo, el si va as Las pias de despues avanza las cabezas de lectura/escritura al cilia Una referencia a las caras (cabezas) de un disco, pistas y sectores ¢2 por medio de un sta empkeran con 0. os sectores pu meradon dk dos formas detalles teenie ierias que exam 1. Direceidn lind’: os rain c om 1, asf qu donde se necesing primer se el disco tiene la direccin cil capacidades DOS desde di caracteristicatilg Figura 16-1 Superfcie del i procesador y la unidad d controlador de disco esta localizado entre ¢ municacién entre elles. El controlador acepta in forma que pueda usa el dispo ejemplo, el un cilindro, cabe sspecificos. El papel de! 2p P de acceso al cil de lecturwescritura y aceptar la informac sector cuando ésta llegue a 4 liberado para otras tareas m ador mancja s6lo un rolador ta wvitando al procesador po El método de transfe directo @ memoria (DMA) mis répidas compl ta i a directa a 1a memoria y desde ella if un boloque id Para este de cilindro, cate 1c el DMA con el comando de lectur de almac apitulo 16 2 deo sistema y dea do datos en ds 285 pa peticion de 1. Las operaciones tiles para \ 7 pista abezas de lectura/escritura incluyen tas funciones 1FH y 440DH con cédigo secundario 60k amas de la INT 21H, y tratadas en el capitulo 18 (REA DE SISTEMA Y AREA DE DATOS EN DISCO Para dar f da en disco, el DOS reserva c ctores d 7 * fleribles estin form para autoarrangue. esto ¢ p de almacena Area de sistema po se puede i ack 1. Registro de arr 2. Tabla de asignac FAT y en bow Sectores asignados pura el dren de sistema ectores de inicio y final para el registro de arra yeldiree stores en ern 286 ganizaesda dol almacenanvonte er api En Jos discos dures, las ubicaciones del registro de arrangue ¥ de la FAT por to com 2s ism, araun disco flexible; el tamafo dela FAT y la ubicacion del directorio vat dispositive. Aren de datos El dred de datos en un. disco © disco flexible de arrinque empieza con los archivos de DOS llamados |OSYS.SYS y MSDOS.COM (para MS:DOS) 0 IBMBIO.COM ¢ IBMDOS (para IBM PC DOS), Cuando utiliza FORMAT /S para formatear wn disco, ¢! DOS cof archivos de sistema eros sectores del area de datos. Los archivos del usuario si anera inmediata 8 < iema 0, si no existen archivos de sistema, empieza \ de dos lados formateado con nueve Sectores por pi ne ta it Lado 0, pista 0, sector Regist a Lado 0, pista 0, sectores 2-3 Tab a archivos (FAT Lado 0, pista Di > Lado 1, pista Director L tr0s para los archivos de datos empiczan en el lado 1. pista ena almacena Jos registros siguientes en el lado 0, pista 1, despus esp | pista 2, y asf sucesivamente, Esta caracteristica de lenado: de poestas (en el mismo 10) antes de proceder con te cilindro reduc a cabeza del dis cl método usado en am discos, flexible Pa positives, Ia FAT ite 1 de longitudes dif clones siguientes estudian en detalle el registro de dire la FAT REGISTRO DE ARRANQUE El registro de arranque contiene las instrucciones que carga ancan”) los arc fema JOSYS.SYS, MSDOS.COM y COMMAND,COM (si desde el di memoria. Todos los discos formateados ticnen este estén almacenad. hivos de sistema, E] registro de arrangue cont n OH Saltoce Ja rutina de arranque en ef desplazamiento LEH 0 3EH nH bre del fabricante y mimero de la versién de! DOS cuando fue creado e! an BH por sector, por Jo comin 200H (S 287 GEN Sectores reservad oH Nimero d a FAT (102 HH Naimero de entradas en ! directorio ra 3H Si el volumen ¢ menor que 32 MB, nui SH Byte de de: . escrita post - (6H Nidmero de sectores para la FAT i 8H Namero de sectores por pista CCargador de Ia rutina de arranque para las versiones del DOS hasta Si el yolumen es menior que 32 ME, nkimero total de sector del sisten Niimero de unidad fisica (para discos flexibles, A = 0; para disco duro, S08 MDOS.COM unidad C. ete.) OS copia Reservado por el DOS > siguen ¢ Sector ampliado de arranque (contiene 29H anal in Identificacidn det votumen Etiqueta de! volumen 1a inform 36H Reservado por el DOS JEH-IFFH A le DOS 4.0, el cargador de arranque inicia aqui El DOS 4.0 amplia el regis Por tania, ef ampos adicionabes desde 20H hasta 1FFH. 8 de 200H (512) bytes Sy ees DIRECTORIO Todos los archives en un disco empiezan en tin DOS crea una nin el nombre del archivo, la fecha en que fue a de directorio de 32 (20H) byte f oyTE PROPOSITO N0H-O7H Nombre del €3 definido en e programa que f primer b del archivo también puede indicat el estado del arc archives dd OOH El archivo munca ha sido utiliza rel disco a i OSH Actuslmente el primer catdcter det nombre del archivo es ESH 25H La entrada 1 para un suieedora ESH El archive a sido borta OBH-OAH —ExiensiGn det nombre det archivo H o3EH en OBH Atributo del archivo, define el tipo de archivo (observe que un arc puede tener mas de un atribut 0 OOH Archive normal O1H Archive que sd @QH Archive oculto, en busqueda de directorio no se desplicga 288 anizacién dol almacer MH Al i DOS, no desplegado por una busqueda Hi Subd 20H Archivo resguardado, que indica si el archivo fi itoen Como ejernp O7H significaria un archivo del sistema ( s ira (O1H) y oculto (02H DCH-ISH —— Reservade por et DOS I6H-ITH Hora del dia en q rchivo fue creado o actualivado por dl SH-ISH Fecha de altima a i o, almacenada 5 en formato binario com mdddda |. El 260 pued AH-IBH Grupo inicial del archivo, El mimero es relativo a los dos tim re directorio. Es no existen archivos de sistema DOS, el primer arc reales dep acidad de! disco, Una entradi significa P CH-LFH del arc n bytes. Cuando cre 1 DOS cal FA P pos rm xoedan un byte en el directorio, los byte acenad TABLA DE ASIGNACION DE ARCHIVOS Bl objetivo de la FAT nar espacio en disco para jos archivos. La FATT con das asociadas die la. FAT de acuerdo icon 1a ubicacién de! a Ap FAT empieza en ¢ 2, inmediatamente después del registro de arrat f referencia a cu la informacion discos en donde po consiste rd onsecucficia, él use de grupo con seek iples reduce el mimero de entradi F permite al DOS direcciona p 7 amic , inc Demasiada FAT na Los disefiadores originales proporcionaron dos copias de la FAT (FATI y FAT acu porque la FAT ilizada si la FAT se dafaba. Sin embar Cn a ne, St Us a. iplementado.. Todo lo tratado en ¢ ore dela FAT de ls FAT vic de la FAT, el descriptor de medio, indica cl tipo de dispositive (ob a a 289 queda de direct FOH dos lade, 18 1.44MB) m a FOr ados, 36 sectores/pista (2. 88MB} bei FRH Dis nde disco RAM virtual Fou ‘ 9 sectores/pisia (720 KB pict 4 POH 5,25 dos, 15 . MB FCH u 9 see sta (180 MB) ema (OSH) que FDH ados, 9 sect G0 MB FFH 5.25 n, 8 sectores/pisia (320 MBI ot Oe fi Observe que FOH y FOH identifican, cada uno, a dos d format pens ly Segunda entrada de la FAT Bo puede ser 0-119) La segu da de la FAT conticne FFFFH para FAT de discos flex i 4 de entradas de In FAT de 12 bits y FFFFFFH p 108 que permit x de la FAT de 16 bits. Las primeras d Je ven a Como ya se de e Npo en un disco es ef registro de: arr 0 por In pos , FAT y después por el direct rea de datos esth despues. La 1 completa es com ‘0, los primeros dos nimera mntan al directorio, de modo 4) a para almacenar archiv za en-el grupo mimero 2. L de este es a yexistente, el DOS ‘enel disco, El Apuntadores a entradas de uputitadores en la FAT E de las primeras d dle la FAT estén las entradas de ap lacionan | FAT puede spo ent ct dea de datos. El dite 1AH-1BH) contiene la ubicacién det p ; grupo para un archivo y la FAT contiene una cadena de de aput ara cada un la FAT upos que le sucede DOS 3.0, 1a longitud de ta entrada para di xib de tres digit (1% by 2 bits) pero para disc €5 de cuatro digitos hexad 3). Cada apiuntador de la FAT lnwica el uso d ular d F © cere dk : v . FERRO smnbay 96 apuop ts “#3i4q 3p eeADAUE HiSuENSIF ap SOLU Ho Lv] ap seperiua se] ap omanureuotany 2p ons we: miAUD eH EX SOM [2 BIOFY “oaryasE oy sed Ht ouanwo: 4 odd 9 exe LV 1 2p 7 19 ua enutMOD onreie DyRs K “po aust ua qiosaadax on 4.4 ¢] 9p aopennde ap epesiua e] exan0y « do wmasaidas amb Va tt soa 1A UOKSUOIND e| A YAWOLSND OMUasR 9p opreiaus OSI FOP “US YFWOISND 9] Rd “HALL * 2 (INET on 2 umysease kayhq 2p zed jp anb 1a ‘andre owo> ¥s23: op 2p epenias 7 “ontyaue jap ‘sang 2 “oymure; jo esed epenu wun & oargase ea sad [9p UpIDENGA BE eed HIZO “WOES ap eysa) e| eRIOU OAIysIe 9 anb seoqpuy exed FOO “TL UPISUARYE F] “MAWOLSND oammaue fap aqui” ays9 eaed ouoIDaxIp fap epemuD Fy 'p A ¢ “Zz sodnEd so} ua o1a}dui09 10d opRUaseLTE FIs9 TLE HAWOLS1D aaquIoL 9p “oaryase oFOs un sEaHWOD B1qIK2y OOsEP UM aN e’uOdNS: “LW AMSNUIED | TEDL # WEiEpNE amb Ly.4 sepe duss(a un sourauiexs eiouy LVA®1 9p © yon sepe ue Jop oda um 9 ¥oNpUT HALA (4) uanWOD an epeAWD op roped Lf, 2 ‘DISIK3 18 “EAMES apu0p UOIDE=NGN e| EMIpUE 2159 “LVA [op JopeIuNde jap se eun f oxqaue epea wed adn Jap o1>4u1 ap O.BMIpA j2 BUDKUOD OLOLSIND 14 SONIY>IE 40} ap [POW Odns# K OYeUIED [2 KOHP 9 rupioeuSise op sopepiun sx ap otanE] {2 owoD sopmuese ore eR, anb “OLED. oda soury sop so} e uesmde (1 4g) LV 2p sepentD sop sesouEtad sel “oprAUDs O1 V4 1 3p eperms et evunde jens ye odns [e sayax oF onrezas odnu, ounmisgy (a UDA 98 (S19 21) AHF" 2P SHGINOY Oe un Uo SepEsNHD 50 we HP UO CWUONUELESBUY Jap UdDED reb9 ost Manejo de entradas de 12 bits de la FAT en sécuencia inversa de bytes Continuemos coi el a FAT para CUSTOMER. FIL Ia FAT de 12 bits se a FAT. E OMER.FIL. qu a FAT. Estos cor + Para el FATE Manejo de entradas de 16 bits de la FAT Como heme yes 4 FFFFFEH radas ena FAT son de 16 bit eolrada de a FFFFH indica ada entrada dk nda en e} grupa de ln FAT, suponga que el DOF jrupo, Aqui r que no hay mill ¢ un poco mis 4 La entrada de ta FAT para el grupo relative 2, 0300, se invic La entrada de la FAT para el grupo relativo 3, ICIO QUE IMPLICA EL USO DE LA FAT DERUG p pulgad: c s de 720 KB (v0 PIODRVID.ASN Discos de 720K. Pric DEBUG, MMB. TBH o ICH d + FF FF ent i Cople 4 Para el primer arch E tener OOF e Discos de 1.44MB. A\ dio en 115H es FO ye H deben m De la FAT en 3004 ASM. rs E] DOS proporei 20 Observe que F3All acerca d la FAT. L VINA op eam 9s odnuf cn 2p open fq cust TAVIS SONIA 8 [PP HET WoIad PP P 9p ofa SP Jour ty sora P uatgaud on 2 HARK] SOA 199 Opon3K SOG PP Hi 5108 Fp 7 usesao0id ap mf spa ante Y3 : : se rea ‘ an Co oy eas 7734 n se19ND8 epand Sq] 12 anb ExaueW ap OAIqoue Ja na12 osaUIUd OnINe Un 3 uesZoud a7) “OOM # epies/epessuD e} usm! spe apgodinasayu} 2p S043 A OOgp © epreS/mpexwy eed updo ap sop : danaf 304 pand anb uptoenisosin ap a n 9 ou anbunyy F neue ey oso fe nay wi sopeeoNe VOR CORD ps (OOSUE NA SOATHOUY 3d O.LNATINYSAD0MNd ss pve 9p vooWAUO pez spitula 16 o 295 uardar ent na JOSYS.SYS, MSDOS,COM y COMMAND.COM a : * EI prope a tabla de a inde archivos (FAT) es asignar espa isco pa archi ne ente despues del fe i an contenet cam nticne una entrada por cada directo REGUNTAS disco pare unidades de asignacién de 1, 2. 4 165, M wets d de un disco flexi ase ent f 166, :Ov eo Bren na en di mu hiv 16-7. (a) (En dnde sud uhicad ro de arrangue? (b) {Cul disco ya xe 16-10, Cuneo tiliza FORMA a adicronal en 16-11. Comic hwo de tama de 2.890 (eciml aie . H del DOS, aus En formato hesadecimal, seul es tama? Mueste el oma Wo al de re 16:12, {Doo e FAT @ : ie (a) un isco BIOS. El cal fiexibte de “OK er bo 13H del BIOS. CAPITULO 17 — —- —— — Procesamiento en disco: I—Escritura y lectura de archivos oe OBIETIVO INTRODUCCION BEANEIADOR MANEJADORES DE ARCHIVO OPERACIONES QUE USAN F =: : OFH Abr 1 Cierra arch 4H Lee regisir ! jase ci 27 FH Lee ISH Bscribe rei OH Excibe reg 6H Crea arch OTROS SERVICIOS DEL DOS. 22H ESCRITURA DIRECTA DE REGISTRO INT25H Lectura avohuta 7H Lectura directa de INT 26H Escitra ay aH Escritua deta de bog capitulo tao servicios de DOS para escribir archivos en ico, Ea VOS | i i Ssplzamien DX po : » mero a soporte, Pea ADORES DE ARCHIVO Pon cadena ASCH ‘ f ror d od Jos archivos en dlsco por mando de sa die mde th FAT y dube acho tn disco. Al as Duta ta eecaci del progeati, fer , prop : hiv eS QUE USAN Foe HH DOS Ii ca eh ii ee ie et io te 298 0 en Bl PSP contiene tna tabla de manejadores de archive por omisién manejadores (y pot ti ite nom abierios), pero laf H puede ser usada para aumenta 1 explica en el capitulo CODIGOS DE ERROR DE REGRESO a acarte egisiro AX. Una operacin exitaza pone en, cero la bam i opiadas. Una operacida no exirasa no a la de acarteo y fe8 rot en el AX, dependiendo de la operacién. La figu lista Hos codigos de error 01-36 COdtigos se refferen a rede Si estos errores no son suficientes, también puede usar la INT S9H para m L iemte cubre los requisitos para crea hivos en DOS anipi APUNTADORES DE ARCHIVO: F} BOS mantiene un apuntador de arch a cada archivo. que. un progr abrir fijan el valor d f de archivo en po de archivo toma manera sub pla del archi c ace que el DOS increment 1. Utilice una cadena ASCIIZ: para obtener manejador de archivo del DOS, 44 INT 2 Para cre de manojadares de archivo para crear archi 299 e proporctona. 2 2. Utilice la funcién 3CH del DOS para crear el archivo. 60 67H de la INT 3. Utilice la funciér 40H del DOS para escribir registros en el archive ‘ 4 wlilice la fanci6n 3EH del DOS para cerrat el archi INT 21H, funeién ICH: Crea archivo Para crear un archivo nuevo 0 sobreescribir en uno ya con el mismo nombre, use prime racién por medi la funcion 3CH del DOS, Cargue el CX con el ate pitulo 16) y el DX con I 1 de Ia cadena ASCHZ. (donde el DOS envia archi pase a be Catia Aqui esté un ejemplo que erea un archivo normal ea la unidad D con atribu sormacton aici . Para operacién valida, et DOS crea una entrada d 2 ndera de acarreo y establece e1 mancjador para el ar Archivo para todas las operaciones subsecuentes de! disc 2 as apuntador de archivo fijado en ce a esté nombre dad en la uevo archivo en el an En condic AX: 03, Por ejem ogra ol INT 218, func 40: Exeribe regio 0, uti n del DOS, Cargue bn el mane}ak Je archivo almacenado, el CX ¢ bytes a escribir y el DX co sin del pdor de archivo 9 alida. El ejemplo siguiente utiliza jador de archivo de operacién de creacion preced posicidn del reste Jesse OUTREC archi EH d Uso de manejador de archivo para c + CIOCREA Util cH *D Acepta entrada des uk + FIOWRIT én 4014 pai + GIOCLSE AI fina ced dc linea (OAH), para un total : “lcar el fin de loa registros. Para ; de NAMEFILE.DAT en orden as larch arda el manejador 3EH para ce : 1-2 bytes pat acteres Enter (ODE P SORT del DOS nece ¢ ejemplo, el comando SORT para a ite y dejarlo en NAMEFILE.SRT pod Je NAMEFILE.SRT, Observe . apiuio 1 anojadores de archivo para crear archivos an dis 301 er C% AX, 06 (man : final det nom ct DH de 108 DOS necesita esta SORT para orden 302 sesamiento en isco: IE lectura de archiv SO DE MANEJAL manejadore! 1 3. Utilice 4. Al fin INT 21H, f peraciémn ASCIIZ neo ors Fhgura 17-2. (continuacton fe manojacores de archiv Capitulo ‘ nese 303 citar ef orsenamiento y de rma podrian ser omitidos, (2) | agitud var SO DE MANEJADORES DE ARCHIVO PARA LEER ARCHIVOS EN DISCO En esta secckin cubriremos los requisitos para abrir y leer archivos en disco por hivo, El procedimicno para leer un archivo en di 1. Utilice una cadena ASCIIZ. para obtener un manejador de archivo del DOS 2. Utilice ta funcién 3DH del DOS para abrir el archivo, 3. Utilice ta funcién 3FH del DOS para leer registros del archivo, 4, Al final, utlice la f 3EH del DOS para cerrar el archiv INT 211, funcién 3DH: Abre an Sia gram es para leer un archive P la funcién SDH del DOS para abritlo. E peracion verifica que el archivo realmente exista, Cargue el DX con i ASCIIZ necesaria y establerca e! AL con el ers PETiCION oor 010 = leet Reservada Mo Bandera heredada Al escribir en un an funcién SDH para aby 8¢ de uilizar la funcion 3CH para crear el archivo, no ta 304 Procesamiento en disco: !—Ezcrtura y lectura de archives Cag er ne el atributo actual del archivo, establece el ap : dera de acarreo y extablece un man ¢ archivo para todas las operaciones subse 2 cero (el inicio del archivo), pore e ror en el AX: 02, 03, O4, 05 0 12 (véase la figura 17-1), Asegdrese de examina pri bandera de aearreo, Por cjemplo, al crear un archivo tal vez enwie el manejador 0S al AX podria con facilidad ser confundido con el codigo de error 05, acceso denepad INT 2111, funcién 3FH: Lee registro Para leer regisiros, uilice la funcidn 3FH del DOS, Cargue el manejador de arch nero de bytes a leer en el CX.y la diteccién del érea de entrada en el DX. E i Una operacién vilida envia el registro al programa, pone en cero la bandera de acarreo y 4 de bytes que en realidad se ley. Cero en el AX significa un intenta de leet acarten y Te AX el cdg ado) 0 06 (manejador n0 valido) Ya que DOS lim me al mismo tiemp ama qu Programa: Uso de manejadoe de arehivo para leer un archivo El programa de la figura 17-3 lee el an na de la figura den por el comands SORT del DOS. A con + ENOOPEN Utiliza la funcion 3DH del DOS para abrir el archivo y guarda el manejad Se datos llamado HANDLE *FIOREAD Emite la funcién 3FH del DOS, que utiliza el mane § Capitulo 1 4e manejadores d a adores de archivo para leer archivos on disco 305 ce un manejadae pes tubsecuenle a ws al AX, to cal nota hana : bo vido) : 1 programa quel Figura t Uso de un manejador pare leer un archi ra ee “6 amionto de arc 306 Procesa ESAMIENTO directorio y d pee DOS almac teclea, inch x c Para consery aricter Ente : en un teclad . La represent en donde O91 . a editor lee cl cursor en la asta Exami : PLTHANRD. Avance de li pantalla, 1a de ellas es de ara a apropiado d pantal Bip G1OXFER desplepados 09H y coloet El prog Jespliegue. por el Figura 17-3 (convimas gar slo arck Estos 4 * GLODISP Despli Enter y AV 1. tnicial linea ya 2. . 2, Sisell jos Capite te niento de archivos A 307 ROCESAMIENTO DE ARCHIVOS ASCII ASCII ereados por DOS o un whore directorio y de a FAT y la forma en que tl sistema almacena datos en un sector ten a OS almacena su informaciio en un archivo ASM, enactay lea, incluyendo los caractees pare abulador (09H), Enter OD itmmediatamente antes del carkcier de tabulacién o lon esp aricter Ene Lo siguiente ihustra una inutrucci¢n de sc a teelado » donde OOH es el Tab, ODH Enter y OAH es el Avance de lea, Cuando ¢ utsor en la pantalla Examincmos ahora el programa de ls figura 17-4, el cual lee y despliegs el ar PITHANRD.ASM (de ta figura 17-3), un sector a la ver. El programs realine chars funciones que el TYPE del DOS, en de a Tinea despliega todo hasta ie Avance de linea. Como las leas en un archive ASCII som ef ariabe re hasta cl final cada linea antes de desp 1 recorrdo de la pantalla puede lems, Si realiza prucbas especiales para determinar siya se ha alcanzado la parte hones mall, Ia operacién desplicga de manera auiomatica nuevas lines antes tana apropiado de la pantalla, tiene que contar renglones y sth € de la El programa ce un sector completo: de datos y | SECTOR. El proc GLOXFER ransfiere un byte la vee dexde SECTOR a DISAREA, en donde los nee tesplepados. Cuando se encuentra un Avance de lines arti desplcgaclcomtenidee Dice Renn El programa tiene que verificarel final del sec or) y el final del irea de sesplicgue, Para archivos ASCH convencionales, come ASM, cada linea es relativa jenle corta y es seguro que terminan con Enict/ Avan Archiv > son ASCII 0m0 198 archivos .EXE y OBJ, no tienen lineas prama tiene que verificat fin de DISAREA para evitar la caida del sistema, f est proyectado para desp far sélo archivos ASCII, pero la prueba del final debe aac nira archi perad Estos son los pasos en GIOXFER Ent y Avia 1. Iniciatiza la diteecién de SECTOR y la direccién de DISAREA 2 curser cual 2, Si sellego al final de SECTOR, Ne. Si se HegO a final del archivo, sai de otra forma inicializa la direccidn de SECTOR 308 Procesamento en |Escrtura y lectura de 7-4 Lectuea de un archivo: ASCH 310 Procesamiento en disco: |—Esertura y lectura de archivos Capi Br ae INE 2 Figura 17-4 (conto EI Dos 3. Si nl final de DISAREA, fuerza un Enter/Avance de linea, despliega DOS, 4 jcializa, DISAREA. 4. Obticne un cardeter de SECTOR y lo almacema en DISAREA directa 5. Si 8 fin de archivo (1AH 6. Siel es un Avance de linea (OAH), despticga la lines y va al paso 2; de Inte f este programa con DEBUG con un ai ide unidad y a ASCII de cada entrada legue el contenido del rea de yve * 00 +024 USO DE MANEJADORES DE ARCHIVO PARA PROCESAMIENTO DIRECTO i Para actualizar un archivo con informacion nueva, > secuencial tiene que da registro enel jc re. Por eje ru accesar el regist arc L general es usar p enter directo, en el q anera di alquiet 1 ado €n un archivo. Aunque u arwento directo 311 fer y envia el registro requerido. al program: En el ejemplo siguiente, los registros som de 128 bytes y cuatro por sector. Una peticid para el registr oca que los siguientes cuatro registros sean leldos y enviadas al bifer io para localiz € sector ia al bal al programa, De acu lo lente vollcitar Fos que estén cercano INT 21H, funcién 42H: Mueve apuntad: EI DOS mantiene an piers pri iniciale od DOS. 42H (Move archivo), para colacar el apuritads r seal movimiento hasta cx shor d DX. También ton AL que indi Ee +00 Toma el desplazamiento d 4 +01 Toma el d niento a archivo, que pct ualquiera dentro del archi +02 Toma azamient P este cOdigo tstableciendo el CX:DX a cero y wsandk meétod Fun archi a El cjemplo siguiente mueve el apurtador 1,0 des 4 Procesamiento en disco: \—Esertura y lactura de-archivor apit pone en cero la bandera de acarreo y envia la nueva posicién del apun nes $e puede realizar una operaciin de lectura 9 excritura para proc Una operacién no valida pooe en uno la bandera de acarreo y regresa en el AX cl 10 80 Valido de método) 0 06 (manejador no vilido) Lectura directa de thivo em disco ta figura 17-5 lee el archivo creado en la figura 17-2. Al teclear ws ue esi dentro de los limites del archivo, cl usuario puede solicitar registro en el archivo para que sea desplegado en la pantalla. Si cl archivo conticne 24 re entonces los nimeros vilidos de registro son desde 01 hasta 24. Un nimero ingresado de teelado esti en formato ASCII y en este caso sélo debe ser de uno 0 dos digitos El programa esté organizado como sigue CIOOPEN Abe el archivo y obticne el manejador de are DIORECN — Acepta un niimero de registro desde el teclado y verifica su lo 4c parimetros, Exisien tres posibles longitudes 00 Fin de la peticién de procesamiento 01 Peticion de un digito, almacenado en el AL 02 Petickin de dos digitos, almacenado en el ALL El procedimiento ha convertido el numero ASCH a binario. Ya que el niimero esté en cl AL trucciéa AAD funciona bien para este propésito, El sistema reconoce la posicidn 0 ca inicio de un archivo, El programa resta uno del nimero actual (asi que, por ejemplo, una del usuario para el registro 1 9 convierte en. el registro 0), multiplica el nimero por Jongitud de los registros en et archivo) y almacena el resultado en un campo llamado RECINL Como ejemplo, si el ntimero ingresado es 12 ASCII, el AX contendria 3132. Una AND cotwierte este valor a 0102, ADD después lo convierte a O00C (12) y SHL mul panera eficaz ¢l nalmero por 16 para obtener CO (192). Una mejora seria validar endo FIOREAD — Usa ta funcidn 42H y la posiciOn relativa del registro desde RECINDX ocar el apuntador del archivo y emitir la funcién 3FH para enviar el n ro solicitado al programs en IOAREA, GIODISP _Despliega el registro recuperad SERVICIOS DE DISCO QUE USAN BLOQUES DE CONTROL DE ARCHIVO Ahora estudiamos los servicios FCB del DOS para la creacién e archivo ta seeuenciales como de acceso directo, Todos estos servicios fueron intr J por la prim versién del DOS y estin disponibles en todas las verses, EX procesamiento en disco para los servicios FCB del DOS implican la deftnicitn d bloque de control de archivo (FCB) que define el archivo y un rea de transferencia a disco (1DT Aue define registros. Usted proporciona al DOS la direcciGn de} DTA para todas las operac ide entrada/salida de disco, Observe que los FCB no utiizan manejadores de archivo y no usa ccédigos de error listados en ia figura 17-1: tampoco ponen en cero o uno a la bandera de acar para indicar éxito © fracaso, (También los FCB existen en el PSP, que el DOS instala inmed ‘mente antes de los programas cargados en memoria para su ejectc 1 apuntador para procesa en el AX solicitar cualquie registron, yestéien el AL, ty RECINDX SHL muttiplics ¢ RECINDX para enviar el regie ‘a de ue DTA s las operaciones mndera de acarred ala inmediata Figura 17-8 samrionto en disco: |—Eertura y lecture de archi O_O Capinuk (c108 do diaco que usan bloques de control de archivo 315 Figura 17-8 (continuscion Bloque de control de archivo Como el método de FCB no permite el wo 4 res de ruta, ite pa fra d ntiene la informacion sigui > ‘aliza los bytes 00-15 y 32-36, mientras que el DOS establece los bree ty 5 ’ u de disco. Para la mayoria de las operaciones de FCB, 00 es 1 om es la unidad A, a unidad B y asf sucesivam 18 Nom rchivo. El nombre del archive, justifien ome .DOC 0 .ASM, justficade Cuando crea um archivo, ©! DOS almacenn su ne actual de regi relative al inicio def nt opetacion de abit actual de bloque de ento direc DOS calcula y alma nel directorio, U ¢ al abrir inicialima ceuamienta direct registro al bloque nis pequetlo pue patio del registro ex de FCB para crear archivos en isco funcién 16H: Crea archivo inicializacién, wn programa utiliza la funcion 16, de ta INT DOS busca et: el directorio un nombre de archi ‘omens con icuentra uno, el DOS reutiliza el espacio en el dire Después la operacién inicializa cl tamafio del archivo en cero y abre ¢l archiva. Al atv un espacio disponible en disco y establece uno de los siguient ible, Al abrir tambien inicializa el rin H = espack sual de bloque FCB a cero y establece un valor por 8 bytes (GOH). An ied isponible; FFH = no hay espac de escribir un rep sar su propio tamafio. : Hi direa de transferencia de diseo rca de transferencia de disco (DTA) cs el inicio de la definicion de su registro de salida. Ya FCB contiene el tamafo del registro, et DTA no necesita un delimitador para indicar ¢ del registro, Antes de una 3S la direccién del DTA. Sélo un DTA puede estar activo en cualquier momento. El céd te inicializa la direecidn del DTA: peracidn de escritura, utlice la fu AH de FCB para d na sélo p a inicializar el DTA s6lo una vex oda su ejecuchéin. $1 in archivo, debe iniciatizar el DT piado inmediatmente antes de cada lectura 0 excritura INT 2111, funcién 18H: Excribe registro scribir wn registro de disco de forma secuencial, utilice la funcidn ISH para FCB: peracidn de escritura utiliza la informacin en el FCB y la din del DTA. actual. Si ¢ a.un drea de beifer que es la longitud de un sector y escribe el bufer ces de 128 bytes de longitud, 1a 317 318 Procesame! riuea'y lecture de archivos — Cag Bs oe § En una escritura exitosa, el DOS increments el campo del tamaéo tamats diendo el tamafo del registro) e incrementa el rnimero actual de registro en aiimero actual de registro excede 127, Ia operacion lo pone en cero e incrementa de bloque del FCB, (También se puede cambiar el bloque actual y el nlimero actual 2: O1H = disco leno; O2H = DTA es muy pequetia para el regist INT 2H, funcién 10H: Cierra archivo Cuando ha terminado de escribir registros en el archivo, puede escribir un marcador d m archivo (LAH cn cl primer byte de un dltimo registro especial: no Jo confunda con Ia f et arch AH) y después utilice la funcién 10H para PCB a fin de cerrar el archivo i OH, La operaciin para cerrar escribe en disco cualquier informaciém parcial que ain se enc a fer del disco del DOS y actualiza e! directorio 2 det archivo, ( eon i cs rereado al AL: OOH = se cere de manera cous: FFH = a. disco flexible Los reqs USO DE PCB PARA LECTURA SECUENCIAL DE ARCHIVOS EN DISCO . en disco define un FCB exactamente igual al usado para a nes de lectura seevericial inclayen abrir el archivo, definir el DTA INT 21 re chia, Lou INT 21H, funcién OFH: Abre archivo [La funciéin OFH abre un archivo FCB para entrad n para abrir verifica que el directorio tenga una con ef nombre y extensid le archi lefinidos en el FCB, Si la entra 4 en el dir Ta operacion rege HAL. Si ate In entrada, la operacién regresa el cddigo 00 en el AL y € . | tamaso actual del archivo, la fecha, el niimero actual de bl O) y el tamato del reg tiliza ROH) en el FCB. Despuds de que se ejecuta la operacién de abrir, se puede acer €480 on as ert6a 1 firea de transferencia de disco INT 218 para cre La ope ;chivo, Utilice la funciin 1AH para FCB a fin de fijar a ¢ DTA, igual qu procesail FCB pare procesamiento direct a9 INT 21H, funcién 14H: Lee registro, Para leer secuenciaimente in Fegistro en disco, wilice la funcion 14H para FCB: Lv operacion establece uno de los siguientes eddigos de regreso en el AL: 00 = lectura exite OL = fin de archivo, ningin dato fue lefdo; 02 = DTA es muy pequetis para el registne dcl archivo, el registro se leyé parcialmente y se rellens con ex Para una lectura exitosa, la operaciGn utiliza la. inf sel FCB para et tro de disco, iniciando en la di del DTA. Un intento de leer de Je archivo provoca que la a sefiale una condic hivo que establece el AL cor OTH, qe usted debe examinar. E ica recor de entrada despy que s¢ ha leido compl que ef DOS limita el nimen que ped abiertos al mismo te SO DE FCB PARA PROCESAMIENTO DIRECTO Los requesimientos para procesamie plican insertar et nu " © escritura diroctas, Para Joealizar INT 2111, funcién 21H: Lectura directa de un registro La operacién para abrir y para est blecer el DTA Co que sea para leer de manera. adere un progran sere el ndmero 0S 3 campo FCB para el nimero relativo de registro y solicit la funcion >I La operacién de lectura regresa unw de los siguientes eédigos en el AL: 00 = lectura exitosa: 01 = # de archivo, no hay més datos disponibles; 02 = DTA muy pequcfa para el registro, U3 Tegistro ha side leido de miinera parcial y n n ceros, {na operacién exitosa convierte el nimero relativo de registro a bloque y registro actual incorrecta en el DTA 0 FCB, ANT 21H, funciéin 22H; Escritura directa de tin registro La opera de ¢ ear y establecer el DTA som las mismas para procesamient cial. Con el nimero relative de registro inick recta ttliza la funcién 22H, do-en el FCB, lac 320 Procesamiento an Laoperacidn de exc de lon condige nies em el AL: 00 PROCESAMIENTO DIRECTO DE BLOQUES Si un programa tiene espacio suficienie, una operacién vo completo del DTA al disco y pucd abrir ¢} archivo ¢ inicializar el DTA. Desp nero relativo vélido de registro y cuala INT 21H, funeién 28H; Eseri ra directa de bloque je el mimero relativo de registro inicial em el FCB y utilice fa func La operacion ne ol . mero relative de registro en e! FCB al bloque Uuliza este ndmero para determina lentes eigos de regreso en el AL: 00 = excritura ex po de registro relativo en ‘scribio ningin registro a causa de espacio ins tableve el can 1 FCB y de te INT 21H, funei 27H: Lectura directa de blog) Para una lectura directa de blog a funeién 27H para PCR La operacién de lectura regresa uno de los codigos siguientes en el AL: 00 disco: |—Escritura y lactura de archi n de inicio en ef disco y establece de todos los registro; ( 9:02 = DTAm 120 al DTA. Py enel CX BS ABSOLL 1 FCB y | critura exitoss B/S AIBSOLUTA DE DISCO Puede utilizar la INT 25H y la 26H del DOS para lecturas y disco de manera directa, pot ejemplo. para recuperar un an > manejadores de archivo 0 FCB y pietue las ventajas de manejo de directorio y blogu veo de registros que tiene con a INT 21H del DOS. Observe que la funcidn 4H de In tN escribir un arch (extwdiada en el capitulo 18) proporciona un servicio similar y. de acuerdo con las ti al DTA. Peto ai Microsoft, ha sustituido a tas INT 25H y 26H rel procexamicnta Como estas operaciones tratan de leer todos los registros come nat Skagit sector, accesa de‘ mane lun sector completo o un blog tomar ndmero relativo de registro en discos flexibles de doble | ada sector desde la pista 0, sector 1, como sigue nel registro CX. PISTA SECTOR ~——_ANMERO RELATIVO DE REGISTRO CX el ndmero real ly pequetio para elativo de registra para la pista 2 9 ampos de bloque gs Siar he pee A continuacion esté el cédlipa necesario para particiones de disco de menos de 3: nel CX, y utili 7 : Las operaciones absolutas de lectura/escritur 2 = DT los registros de segmento y empl elAL la bandera de acarreo’ Ina operacin no exitosa regresa a en disco destruyen todos a indicar una operaci no de loa sigule edbdigos diferente MB: 322 PUNTOS CL Escritura y lectura die arch 90001000 Inco en disco flexible (0000100 Sector do ns encontrado DOO0HOIT Intento de escribir en un disco protegido contra escritura petactin, debe sacarlas desput Desde l » DOS 4.0 puede usar las ENT 25H y 26H para xcedan 32MB. El AL y el CX todavia son usados de la misma BX spunta a un bloque de parametros de 10 bytes deserito c Byres DESCAIPCION NOH.O3H Niimero de sector de N6H-O7H — Desplazamiento del bi BHO det bat AVE Muchos de los ° del DOS hacen referencia » una ASCUIZ sasiste en una directorio seguido por un byte de ceros hexadecimal muchas de las funciones de disco del DOS ponen en uno la band n cédigo de error en el AX. 2 a archivo por cada archivo que un programa esté proc de creacién y apertura establecen el valor del apunt I L ear y abrir regresan un muanejador de archive que se uilliza Cua n archivo se utiliza primero la funcién para crear 3CH; cuando n archivo se emplea inicialmemte ta funcién 3DH. Un pr a e$ originales de la INT 21H de! DOS para E/S de Un bloga en! FCB pat esta procesand 323 * El Area de transferencia del disco (DTA) es la localidad del registro que serd exc Se tiene que inicializar cada DTA en un programa antes de ejecutar una operacidn de INT 25H y 26H del DOS proporciona ura y escritura en y desbloqueo de reyistr PREGUNTAS De las preguntas 10 conciernen a ope en disco que i anejo de arch peraciones de FCB en ITA. ¢C sy 104 Qu ot arch pcomtrado; (b) ma 17-2, Defias uma cade ada PAT ive com T 7 17-3, Para el archivo de op i definic un elem fombre CUSTHAN pars ef mancjad ar atch CUSTOUT (128 rat uebe p : jatrox a CUSTIN. Pruebe por si hy 5 wi ancias debe cerra r 409 ada! 17-6. Corrija el digo de ta figura que el usuario pec int Je el 7 Resten preci A continua una muestra de un PARTE DESCRIPCION PRECIO 328 CAPI Pro II-— sop erTROD E CAPITULO 18 Procesamiento en disco: [I—Operaciones del DOS para soporte de discos y archivos TIVO NTRODUCCION rod a FAT y los OPERACIONES PARA MANEJO DE UNIDADES DE Disco: 19H IBH, 1CH iPH 2EH 32H 36H 44008 +401" 325 326 Procesamiento en reciones del DOS para soporte y archiva Bpericiones p desde la unidad 8 1a unidad removible para dispositiv Laoperacié bir sector del al AL. Pua aciéa de medio dispositiv 66H Obtener identificacién de medio {68H Pereibide a tipo de medio ado de verificacién OPERACIONES PARA MANEJAR ARCHIVOS EN DISCO OPERACIONES PARA - MANEJAR EL DIRECTORIO Y LA FA a Borrar archiv 39H Crear subdirector 7 Obiener’e a 3AH — Eliminar subdire INT 21e $BH Cambiar directorio ac Esta fund $7H —Obtener directorio actual Los c(sdigos de error me e apivulo se reflerem a ta tsta de La fig (OPERACIONES PARA MANEJO DE UNIDADES DE DISCO AL a INT 21H, funcién ODH: Restablecer unidad de disco Q D) antes y actualiza€ circunstancias especiales, co . na cod error, €l puede necesitar restablecer DH t DOS salta todos fos bifers de peracién no clerra de manera alk a INT 211 E requeri 10 OEH: Selecctonar unidad por omisién 1 OEH del DOS es selecetonar una unidak donde 0 = unidad A. 1 = B. ya avi aciones para manajo do unidades de ¢ 327 Laoperacién dades (todos los tipo, incluyend los discos RAM virtua al AL. Poest men gieas A y B, regresn ol nimer a un sistema co Utitice la INT 11H para determinar el nimero INT 21H, funcién 19H: Obtener la unidad de disco por omisién La funcién 19H del DOS determina la unidad de disco por om ee La < an nimero de unidad en ef AL. donde O = A, 1 = B. ame HOY LA FA mover este mlmero de ireeta a su programa accesando un deéde la unida . 1, funcién 1IBH: Obtiene informacién de ta unidad por omisin Ya que ta oper enbia el DS, d pdarlo (PUSH) en ta pila antes llamar a 1 scarlo (POP) después dela iterrupeidin. La ope ahors ha tazad in 36H. Una operaciin 18H exitosa regresa la informacién sigulen AL Numero de seetores por grupo BX Apuntador (DS:BX) al primer by de medios) en la FAT CX Tamato del sector fisico, por * DX Nimero d ned EI producto del AL, CX y DX da la capacidad del disco. Una operacin 1BH pica los archivi egress FFH en el AL INT 2191, function ICH: Obten: dle un wnidad especifica equerida en el DL por omisiéa, 1'= A, y ast sicesivamente (60 IBH y umbién esta reemplazada por la funcién 36H. 2 opens INT 21H, funcién IFH: Obtener blogue de parimetros de la unidad por omisién (DPB) 4H, env de parimetros de la unidad es un dea de datos que contiene fe informa el acerca de la estructura de La un INTuH DESPLAZAMIENTO TAMANO CONTEND P 0H Byk imero de uniddad (0 = A Véase la H By igica del controlador " mH Palat Tamafio del sector, en by “H By Sectores por grupo m INT 2 H B Sectores por grupo (potencia de = ai 06H Primer sector relat FAT id aH Copias de la FAT Numero de entradas en el directorio raiz pH Palat Niime to d FH Palaby Sectores ocupad H Palabra ‘ aH Palabra doble H By BX 8H Byu dn cx 19H Palabra d Dx DH Plat FH Palabr: r0 de grupo lib prod Guarde (PUSH) en | © ny siquelo (POP) dle a pila al reg le la f a opera ne parimetros. Una opera Himpia el Al y regre INT 21H ireccidn en el DX:BX que apunta al DBP de la unidad por o% Si hay un error, el AL. tie Bste sere FFH. Vé bien la funcidn 32H Est ar las operaciones de cs \OCTL ¥ ica (CRC) del controlador jsticada de ve INT 21H 2 IL con 00, desactiva la on O1 la activa. E E permanece 60% asia g wera ambia. A continuaci dades de diac 329 sn 36H La operscién no regress valor ye slo: activa un 2 aH estado actual a INT 21H, funcién 32H: Obtener un bloque de pariimetros de Para obs pps. 1 iad en el DX (don Wease la funciin FH; esta funcig , H, con ex de ta pet INT 211, funciéa 36H: Obtener un espacio libre en el disco BX = Némer p00 ¢ accesado CX = Nimero deb pardmetro DX = Nimeto total de grupo en > El producto de AX, CX:y DX dla capacidad det . ido dea operacién regresa FFFFH en el AX. La opera one en un 1 Aly regres 1, funcidn 4414: Control de I/S para dispositives n Este servicio elaborado, IOCTL, comunica ink cnire un programa y un d i cin en el AL : t ' bandera de acarreo. U s ‘ 2 1 H: Obtener informaciin del dispositive 330 a operacion vida pone en ¢ ‘ Los otros bits tiene ficad ARCHIVO (BIT 7 =o} S$ Nim uunidad (0= A. 1 = B, INT 1 archivo no se escrit para DISPOSITVO (BIT 7 = 1} Enirada exténdar de la cont . Dispositivo nul $ _Dispositivo espec modo ASCII, | = modo binari Para entrada, Jel archivo reg el dispositive ex leido l Ne en. uno la bandera de acarreo y regresa en el AX el cédigo 01. 05 6 06 wa INT 21H, funcidn 44011: Establece informacién del dispositive Esta funcidn € de archivo en el BX y et bit de configuracién en el DI. pa 7, com r6 para La subfuncién OOH informa positive de a 0 one € regresa 05, 06 0 OH INT 21H, funcién 440441; Leer datos de control de la unidad Esta operaciéin lee los datos de control de un controlade CX y ladirece de datos en el DX. Una operacin ; dos. { une la bandera de acarreo y mn A funcién 44051: Eseribie datos de control en la unidad a misma q a funcion 44041 INT 21H, funcién 4406H: Verificar estado de la entrada BX. Una operacién vail n0 de los sipuientes cd AL * Dispe 0H preparade “Archivo; 00H = BOF a EOF fo aleanead Ll U pone en uno la bandera de ac a el cod (08 0 06 en el AX Ds INT 21H, funciém 4407H: Verifien estado de la salida apitulo 18 nes para manejo de unidades de c 331 en el DX, dontod + Dispositive: OOH sth preparide, FFH = propendo 3 + Archive: OOH = preparado, FFH — preparadk 0 la bandera de acarreo y regresa el c6digo 01. ( AX. INT 21H, funcidn 4408H: Determina si hay medio removible para el dispositive Cargue el BL con el nimen D = por omisién, 1 = A, ¢ DOH = dispositive remov FH = es led valido de unidad} 0.06 INT 21H, funcién 440DH, eédigo seeundario 4111: Escribir sector de disco Esta operacion escribe datos del bifer a is disco, Cargue estos registro bloque (uni Je bytes a leer en Kel nmero de bytes EI DX apunta a un bioque de dispositive con el formato sigu 0S 0 ODH en ef AX Be la peat AX DS:DX’ oMificado cia inversa de palabra. El operador SEG indica la defin de un segmento, em este caso del segmento de datos, DATA. El seni : dato ay debe a Jongitud del niimero de secto 2, com 392 Procesamiento ety paraciones del DOS para soporte de discos y arch spit a a Una opera, isa pone en cero la bandera de acarteo y eseribe To De otra may El eam INT 21H, funcién 440DH, cédigo secundaria 42H: Fomatear pista ; Para usar esta funcidn a fin de formatcar pistas, designe estos registr po INT 2 Obtene . 7 Para qu 61 DX apunta a un uient EIDX¢ josa pone en cero la bandera de acarreo y formate D 1 ens uno Ia bandera de acarreo y regresa el cédigo de ¢ INT 211, flancidn 440DH, cédigo secundarlo 46H: Establecer identificackin de medio a fluncidin designe Ta identificaciin de medio, designe estos registro E1 DX apunta a un Bloque en eh AX, as, De ote 02005 El campo filetyp comtiene ¢ sign pone en. uno la bander también la funcidn 440DH, INT 21H, funcién 44008, Obtener parimetros det dis E1 DX apunta a un bloque d sien 333 valor ASCII FATI2 0 FATI6, con blanec ra de tablece la identificaci a, a opera de acarreo y regresa el cédigo de error 01. 02. 0 AX. (VE digo secundario 66H cid Cr ispasitive a los pariimettos de dispositivo, establezca estos reg fe parimetro de dispositive con el formato siguie sy archivos — Capitu INT 21H, funcién 440DH, cédigo secundario 61H: Leer sector de disco Esta operacion Jee informacis mis sectores cn disco y la envia aun bife ° indario 61H ; los detalles cnicos para la operacidn son idénticas a aquell ‘digo secundario 41H, el cual excribe sec 18-1 itustra la func El DX apunta a un bloque de medio com el formato siguient {Una operacion exitosa pone e mandera de acarreo ¥ establece la identificackin. El f valor ASCII FATL2 0 FATIG, con espacios en blanco al final. De otra ‘Véase también la funcién 440DH, cOdigo secundario 46H INT 211, funcién 440DH, cédigo secundario 6811; tipo de medio pereibido E1 DX apunta a un bloque de medio de dos bytes para recibir informacion funcién 44H 1OCTL INT 211, funcién $9: Obtener error ampliado an FPH y d nanejadores con la INT 24H. L DS, DX, ES y SI. Guarde PUSH) a y siquelos de ella (POP) de Cédtigo de error ampliado (AX), 2 que la operacidin anterior INT 2 Clase de error (BH) OH No hay recurso, como canal d 896 Procesamiento en peraciones del DOS para soporte de H Error 4. como peticicin inconsiste BH Pe lernento mo encontra 9H Formato inadecuado de archivo o de disco AH Archivo o elemento esti bloqueado OBH Error en disco, como errar de CRC 0 disco incorrect CH Archivo Acciéin (BL). Proporciona informacion sobwe la ac PROGRAMA: LECTURA DE INFORMACION DESDE LOS SECTORES Bl prograrna de ta figura 18- 2 el wso de JOCTL fi 44H, su tes hex. RDB 1. JOBUFFR es ef despl 2. SEG_DATA uti in del segmento d 8 ope HOCTL BIOREAD La prucba por una |OBUFER en do: nes XLAT mar rereplones de 32 5 Figura 18-1 ‘$84 Frocesamuanto eraciones dal DOS para de diacos y archivos Capitul Una opera INT 21H, f INT 2114, 6 Este servic CHDIR del Puede mejorar este programa permitiendo al usuario solicitar sectores via OPERACIONES PARA MANEJAR EL DIRECTORIO Y LA FAT INT 218, funcién 398: Crear subdirectorio Este servicio crea un subdiree undo MKDIR del DOS, Cargue a Ia direccién de una cadena ASCIIZ con la unidad y la ruta a itvio Joo y la FAT 339 5 en el AX. INT 21H, funcién 3AH: Eliminae subdirectorio Este servicio climina un subdirectorio, tal como lo hace el comando RMDIR de! DOS. Cargue et DX con La direceién de una cadena ASCIIZ con la unidad y la ruta al directorio (tome en cue que no puede eliminar el directorio actual 6 wn subdirectorio con archive): Una operaciiin exitosa pone en cero la bandera de scarred; un 9 03, 05 0 10H en el AX Hi, funckin SBE: Cambiar de directorio vetual ambia el directorio actual a uno que usted expecifique, tal como lo hace e! comand CHDIR det DOS. Cargue el DX con la direccién de wna cadena ASCIIZ con la nueva unidad y la nia del directorio: Una operacién exitosa pone en ¢ céaligo 03 en el AX bandera de acarreo; un error la pone en uno y regresa INT 21H, funcién 47H: Obtener el directorio wctual La funci6n 47H del DOS determi el directorio actual en cualquier unidad. Defina un ¢ grande para eccién en el SI. Id fique ta unidad en e! DI. por 0 = por omisién, F = A. 340 Procesamiento en di peraciones del DOS pare soporte Una operacién vélida pon bandera de aca ours dh or n id) al bifer como una cadena ASCHIZ, co Un byte con OOH identifica el final d re de la ruta, Si el directorio solicitado es alor regresado es 561 le OOH. De esta manera, puede obtener el nor a actual a fin de accesar cualquier archivo en un subdirectorio, Un riimero no valid la ban acarreo y regresa el eddigo de error OFH en el AX. INT 21H, funcién S6H: Renombrar archivo 0 directorio PROGRAMA: DESPLIEGUE DEL DIRECTORIO BIODRIV Utiliza la funcién 19H para obtencr la unidad por omisién en el regi O (para A), 1 (para B) y asf sucesivame nimero:a valente alfabético, slo sume 411, de mod se convierta en 41H (A), 0} jerta en 42H (B), y- ast sucesivat Después el procedimiento despliega la letra de 1a por C1OPATH Uti 47H para obtener el pomb > prueba de forma inmediata que un valor por omisién al dire El programa de OPERACIONES PARA MANEJAR ARCHIVOS EN DISCO Esta ibe 1a8 operaciones del DOS que procesan archivos en disc ficaciéa 34 odo que Of por d or OOH ASCHIZ Figura 18:2 Obtiene a INT 218, fun 20H: Anlisis gramatical del nombre de archivo nivierte a una linea de comando, que codtiene tna especificacidn de archivo (filespe omibre de archivo ext en el formato FCB. La fun 9 del usuario para c 342 Procesamiento 0 Los eédigos para el método de andl atic err vaLon AccION pee pecifica Camibia rchivo en el FCB como cr Cambia hivo en el FCB, wen mbia ta lo si la flespee contiene una exten id " P dlidos, Ia funcidn 2914 formato FCB estindar para el nor de uo 0 mil P PROGI2.* se convierte en PROG EIAL IH No se encont nines af FFH Unidad espe slits Despu | DS:81 ne la ditectién del primer b : lespec analizada in ES:DI 8 direccidn del primer byte del FCE a) desde un progtay ve en el DX Puede utilizar esta operacicen tant obtener como para establecer un atributo de archivo en ectorio. La operacién necesita la direccién de una cadena ASCIIZ con la uni, ruta hivo, cargue el AL con el céxtigo 00, E vient EI AL regre a operacidn valida pone en cero la bandera de a H er ATRIBUTO arr ATRIBUTO Solo lectu 3 Etiqueta de volume: Arch * Archivo archivad aa4F Para establecer atributo de archiv ue el AL con el e6diga 01 y coloque el (Hos) b de atri el CX. Puede cambiar los bits de a slo lectura, oculto, de wi archivado, pero no la etiqueta del volumen 0 de subdireciorio. El ejemplo siguiente extab bandera de acarreo y designa la entrada del direc: aribut ‘CX. Una operacién no valida pone en a utlteat ese ad Esta accion provoca que el DOS timpie ¢! bd ancjador original del archiv Una -ope xitosa pone «en ce » grea el nuevo siguiente disponible) en el AX. Un error pone en. uno la ade acarteo y regre 04 0 06 al AX. (Véase tumbién la funciée 46H ENT 21H, funcién 46H: Forzar duplicacién de un manejadar de archivo Este servicio es similar a 1a funciéa 45H, salvo qu | manejador original y el CX con ef segund acidn exitosa pone en cero la bandera de acarre # la pone en uno y re de error 04 © 06 al AX. Alguna ne uncionar; por ejempl f 00 siempre es la entrada desde el teclado, OM es la mpresora y 03 (aux er redireccionada, (Véase también la funeion. 45H INT 211, funcién 4EH: Encontrar primer archivo que coincida acién es similar (y se prefiere) a ta func 4H para cd ginal L1H. U 2 busqueda, Tene q ion 4EH 43 bytes para la operacié opresar la entrada localizadsa € i6n AH (establecer DTA) a Ulilizar este servicio, Para iniciar la basqued: cl CX con el atributo del archivo. de los nombres de archivo que combinacion de sélo lectura (bit 0), oculto (bit 1), de sistema (bit 3), directorio (bit 4) © de archivado (bit $), Cargue el DX com Ia dite ef nombre de la rutw; 1a cadena puede contener caracteres comodin que localiza una coincide lena el DTA de 43 byies BH) OH-14H —Reservado por DOS para bulsquedas sub ISH Atributo del arch 16H-I7H Hora det archiv ISH-I9H Fey archive AH-IDH Tama del archivo: palabra baja y después pal EH-2AH Nombre y extensidn como una cadena ASCIIZ, se de acarreo y regress el cédigo 2H inico para Ia funcién 4EH es determinar si una referencia c archivo 0 a Por ejemplo, si el atributo represado es 10H, la referencia bdirectorio, T cin regresa el tamafo del archivo, Por tanto, ancion 4EH para de ar el tamafio de un archivo y la funciGn 36H p INT IIH, funciin 4F1: Encontrar el siguiente archivo que coincida poés la funciéa 4FH para continuar Ia bisqued ambi DTA (véase la funcién 4EH para ¢ nto en disco: Il—Operaciones de! DOS para soporte de disco Una operacién exitosa pone en cero la bandera de acarreo y regress al AX de archivo encontrado) 0 18 (no hay ms archivos). Un error pone en uno fa bandera de a eeress el cédig 30 12H em el AX La figura 18-3 ilustra las fueciones 4EH y 4FH. INT 21H, funcién S6H: Renombrar archivo o directorio Este servicio puede renombrar un archi esde un programa. ¢ direceién de una cadena ASCIIZ con la unidad, ruta y nombre anteriores que seri re >. Cargue el DI mn Ia direccidn d a unid ¥y fombre nuevos odines. $i ambas cadenas, Ya g necesitan ser nel AX el eédigo 2, 03, 05 u 11H. én STH: Obtener/poner la fecha y hora del archivo BITS PARA LA HORA BITS PARA LA FECHA OBH-OFH Horas )9H-OFH Ato (relatv ISHOAH Minutos OSH-O8H_ Mes OOH-OSH = Segundas —-«OOH-O4H_ Dia del me estén en Ja forma de! niimero de incrementos cada dos segundos, 0- ene poner) en el AL. y el manejador de archivo en el BX. Pi la bora en el CX el DX. A PROGRA’ igo 00 (nombre era de grama: Borrar archivos de forma select — ‘Unk operacién valida pone en cero la handera de acar ie lc ay de hora para cl archiva. Una opera: sida pe INT 21H, funcién SAH: Crear un archivo temporal X com el atrib , 5). Cargue et DX ¢ a unidad a hay), una diagonal inversa y OOF. seguida por 13 bytcs p br afiade el ne hivo ala cadena ASCIIZ, i ne OOH. Un er INT 21H, funciin SBH: Crear un archivo nuev funckin 3CH (crear archivo). Usted debe utiticar a f BH que no quiera sobre . Una opsracisn > la bandera de a a Pe en un Je acarreo y regr i HH en el A: PROGRAMA: BORRAR ARCHIVOS DE FORMA SELECTIVA El programa 8-3 alos 4EH y 4FH del DOS para encontrar od rmbre en el di a funcidn 41H Fehvo leccionados. El prog ec acedimientos siguiente MAI Llama a los procedimienios BIOFIRST, C1ONEXT, D: LODELET BIOFIRST ablece el D’ EH mt entra CIONEXT — Encuen rad en eld que coinciden. DIODISPL — Muestra los nom ki 2s que coine guna $i seri bo ELODELET Acepta una acién ¥ (sf) para borr iva, N (no) pserv Jo, 0 Emter para terminar el proceso b archivos requeri 348 Procesamianto on ai wiclones dal DOS pata soporte de dace rama: Borra Figura 18-3 Scleccions y barre los a Figura 18:3 Figura 18-3 2 PUNTOS CLAVE chives Capitulal a 351 18-4, Escriba un pequeto programa desde e| DEBUG. que simplemente cjecute a funcidin 29H de! DOS FCB en SCH: ambos estén en of PSP, inmediatamente a ama, Introdusca vat ifieaciones de archivo, coin D:PROGA.DOC. PROGE, C:*.ASM. Desputs d disco yal FAT incluyen crea ner el directorial rear, abrir, leet ontrar coincidencta dil ctl dco RAM CAPITULO 19 ————— Procesamiento en disco: [1l—Operaciones del BIOS para disco BYTE DEL FUNCIONES: PARA DISCO DURO DOH Ri 4 OH Lee Establecer tipo de medio 5 a disco BYTE DEL ESTADO DEL BIOS clones de Ja INT 13H mostrado en la figura 19-1 refleja bos bits indicads Bios 41H para el rea de datos de datos de disco duro, (Véase el capitul Si una operacién regresa wn ern ncidn OOH) y reintentar la operacin tre amiento de dis a Laope ~ del BIOS pueds 4 puRO a‘abte - un cédigo de € de cad ost oH OAH BH CH DH oEH OFH isi oH Es Buscar ci Restauracidin Leer baie Eseribie bal Estaci 353 indo del but 354 Procesamianto on disco: I—Ope dol BIOS para OPERACIONES BASICAS DEL BIOS PARA DISCO funciones basicas para disco de Al. INT 13H, Cada una necesita de funcidn INT 13H, funcién OOH: Restablecer el sistema de disco Nexible 1 controlador de disco flexible 0 de mero xe coloca en el cilindro 0. En A, etc.). En disco du 9 (80H = la primera unidad. 81H = la segu sdmero de 80H o super 4a, etc.). Unejem 330 de la funcidn OOH es como sigue: {Una operacién villa pone en cero la bandera de acarreo; wn ertor la pone ¢n uno y ebdigo de estado en el AH. La funcidn ODH es una operacién relacionada, “ca cab INT 13H, funciéa 01H: Leer estado del disco Esta operacion Je da otra eleccién para examinar el estado de la mayoria de las més te ra yperaciones en disco. (Véase byte de estado en la figura . al cédig Un (0 = unidad A, etc.) para disco Mexible y un niimero de 8H o mi primer unidad se para disco duro, Esta ope gresa al AL cl cédigo de estado que la ditima operacién 0 disco habria regresado al AH. La operacidn siempre deberia ser valida, y pone en cero la ba “ dde acarreo y regresa enel AH ros INT 13H, funcidea 02H: Leer sectores Esta operacién lee un ti > expecificado de sectores en la misma pista y de manera direc: AL Niimero de sectores, hasta el maximo por pista CH Ndmero de pista (los nikmeros inician eon cero) cl Bits 7-6 nemero de pista (bits superiores) Bits $-0 mximero de » niimeros inician con uno) Nidmero de cabeza (lado) (0 0 1 para disco flexible) duro (80H Direceién de un bifer de E/S en el rea de datos, debe ser suficientemente g Nilmero de unidad para disco flexible (0 = A) 0 unidad de disce ara todos los sectores que sean leldos. (En este caso BX exth sujeto al ES. un sector y lo envia a un area llamada INSECT El ejemplo siguient duro, Esto € disco flexible ablezca el DL & Un ejemplo del ancra directa lot 80H o mye ujeto al ES raciones bisicas del BIOS para disco 388 Al regresar Ia operacin ha lek CX y DX se preservan. Une! oF pone en ino la AH; restablece la unidad (funciéa OOH! icalice el CH y CL e increméntelos para leer los sectores de fort Pista, tiene que re 10 de pista en el mismo lado del disco o bien incrementar 0 abeza par Prucha si un disco flexible esté preparado grams puede emitir una petic m para accesar un disco flexib rao haya sdk 2H de Ie INT 13H en un usuario. El eer ctor de datos. Prue 1c sigue utiliza la func utiizando DEBUG ros) y prucbe el c6digo con y sin un disco flexible en la unidad A. Para un disco flexible en a operaciom debe leer el contenido del registro de arrangue del disco, $12 (20H) by Ia posicién DS:200H . El eédigo 356 INT 13H, funcién 03H: Escribir sectares USO DEL BIOS PARA LEER SECTORES ta figura 19-2, que usa la INT 13H del BIOS para | desde el disco y env jemoria. Obscrve que no existe operacién para angjador di Lis se p CURADR — Contiene ta p tor inicial programa a) ENDADR — Contiene la pista y sector finale Je mejorar el progra CIOADDR — Calcula cada dire 0 en termi pista y sectot. ( ol in ctor liega a 10, la rutina ni Sc €l sect 1, el programa incremen de pista; e1 nimero 4 x és 4 Este proces . FIOREAD 1 € increments el nimero de sector para wna operacién d Proce ar este programa bajo DEBUG. Rastree las instrucciones que inicia jepmento, Para la operacién de entrada, ajuste los sectores acidn de la FAT del disco. (V pitulo- 16.) Utilice G (g p Como una alter ygrama convertiria los Garacteres ASCH en cl & nrada a sus equivat ¥ desplicga los ndimeras hexadecimales ig I DEBUG. (Véase tamb Ja figura 15-6,) C manera, podria exam de cunlquier sector —aun los ocultos— y podria permitir al usuario ingresar camb es cambiados de regre 7 Ybserve que cuando el DOS crea un archivo, gistros en grupos dispe ae

Vous aimerez peut-être aussi