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

You might also like