Está en la página 1de 283
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 Mateméticas Coordinador Matematicas Aplicadas Escuela de Actuaria - Universidad Anéhuac REVISION TECNICA: Prof. Raymundo Hugo Rangel Gutiérrez UNAM México * Argentina + Brasil » Colombia + Casta Rica + Chile + Ecuador Espaiia + Guatemala * Panama + Pera * Puerto Rico * Uroguay * Venezuela EDICION EN INGLES PRE-PRESS/MANUFACTURING BUYER: BILL SCAZZERO- ACQUISITIONS EDITOR: MARCIA HORTON EDITORIAL/PRODUCTION SUPERVISION AND INTERIOR DESION RICHARD DeLORENZO COPY EDITOR; BRIAN BAKER EDITORIAL ASSISTANT: DOLORES MARS SUPLEMENT EDITOR: ALICE DWORKIN ABEL: LENGUAJE ENSAMBLADOR Y PROGRAMACION PARA IBM PC ¥ COMPATIBLES (3a. ed.) ‘Traducida del inglés de ta obra; IRM®-PC ASSEMBLY LANGUAGE. AND PROGRAMMING. All Rights Reserved. Authorized translation from English language edition published by Prentice Hall Inc, A Simon & Shuster Company. ‘Todos los derechos reservados, Traduccién autorizada de la edici6n en inglés publicada por Prentice Hall Inc, ‘All Rights Reserved. No part of this hook may be reproduced or transmitied in any form or by any means, electrowie or mechanical, including photocopying, recording or by any information storage and retrieval system, ‘without permission in writing from the publisher, Prohibids La reproduccién total o parcial de esta obra, por cualquier medio 0 método, sin la autorizaci6n escrita del editor Derechos reservados © 1996 respecto la primera edicisn en espanol publicads por PRENTICE-HALL HISPANOAMERICANA, S.A Atlacomiuleo Naga. 500-5" Piso ‘Col. Industral Atoto 53819, Nouenlpan de }irer, Edo, de México ISBN 968-380-708-7 ‘Miembro de la Cimara Nactonal de la Industria Editorial, Reg. Mim. 1524 ‘Original English Language Edicion Published by Prentice Hall Inc. ‘Conyrigth @ MCMXCV ISBN 0-13-124603-8 IMPRESO EN MEXICO/PRINTED IN MEXICO PARTE A — Fundamentos del hardware y software de la PC CAPITULO 1 Introduccién al hardware de la PC OBJETIVO Explicar las caracteristicas basicas del hardware de la micto- computadora y la organizacién de programas, INTRODUCCION Excribir un programa en lenguaje ensamblader requiere de comocimientos acerea de! hardware {arquitectara) de Ja computadora, su conjunto de instrucciones y sus reglas de uso. En este capi tulo sc ofrece una explicacién del hardware basico: bits, bytes, registros, el procesador y el bus de datos. El conjunta de instruceiones y su usa son desarrollados a la large del libra, Los bloques fundamentales de informacion. de sna computadora son los bits y los bytes. Estos proporeionan los medios por los cuales la computadora puede representar datos e instruccio- cnes en [a memoria Los elementos principales de hardware interno de la computadera son un micropracesador, la memoria y los registros: los elementos de hardware externo son los dispositives de entrada! salida, como el teclado, el monitor y el disco, El software consta de diversos programas y archi: vos de datos (ineluyendo al sistema operativo) almacenados en el disco. Para ejecutar (0 correr) un programa, el sistema lo copia del disco a la 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 ejccuta las instrucciones del programa, y los registrox manejan la aritmetica, movimiento de datos y el direceionamiento. 2 Introduccién al hardware dela PC Capitulo 1 Un programa en lenguaje ensamblador consiste en uno o més segmencos para definis datos y almacenar instrucciones de maquina y un segmento Hamada stack (@ pila) que Contiene direccio- es almacenadas, BITS Y BYTES La unidad més pequefia de informaci6n en la computadora es el dit. Un bit puede estar no magne- tizado, 0 apapado, de modo que su valor es cero, o bien, magnetizado, o encendido, de modo que su valor es uno. Un solo bit no proporciona mucha infarmacién, pero es sorprendente lo que un conjunto de ellos puede hacer Bytes ‘A.un grupo de nueve bits se le Hama dyze, el eual representa locatidades de almacenamiento, tanto en memoria interna como en discos externos. En memoria, cada byte tiene una direccién nica, que inicia con cero para el primer byte. Cada byte tiene ocho bits para datos y un bit de paridad wpe fefeloefeleslel. (+s tas | paridss | Los acho bits de datos proporcionan la base para la aritmética binarla y para representar caracte- res come la letra A oel simbolo de asterisco (*). Ocho bits petmiten 256 combinaciones diferentes de condiciones de apagado-encendide (off-on), desde todas los bits apagados (00000000) hasta todos los bits encendidos (11111111). Por ejemplo, una representacidn de los bits para la letra A ¢s 01000001 y para el asterisco es 00101010, aunque no tenemos que memorizarlas, La paridad requiere que el nimero de bits encendidos en cada byte siempre sea impar Puesto que la letra A contiene dos bits encendides, para forzar Ia paridad impar el procesador establece de forma automitica su bit de paridad en encendide (01000001-1). De forma similar, puesto que el asterisce tiene ires bits encendides, para mantener 1a paridad impar el procesador establece el bit de paridad en apagado (00101010-0}. Cuando una instruccién hace referencia a un byte en memoria interna, el procesador verifica 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 ¢l hardware o un trastorno eléctrico; de cualquier forma, ¢s un acontecimiento raro. Puede preguntarse c6mo es que In computadora “sabe™ que e] valor de los bits 01000001 representa 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 el contenido de este byte de un lugar a otro de la memoria y aun imprimirio o mostrarlo en Ia pantalla como la letra A. Para propiisitos de referencia, los bits en el byte se numeran del (al 7 de derecha a izquier- da, como se muestra aqui para Is letra A (ya no nos preocuparemos por el bit de paridad) Naimero de bit 7 540 Coneadioen bis pila: | @ | 9 9 0 @ Nimeros binarios 3 Bytes relacionadas Un programa puede tratar a un grupo de bytes como una unidad de informacién, como tiempo © distancia. A un grupo de uno-o mas bytes que definen un valor particular se le-conoce cominmente como canpo. La computadora también emplea ciertos tamafios que le son naturales: + Palabra. Un campo de 2 bytes (16 bits). Los bits en una palabra son numerados desde 0 hasta 15, de derecha a izquierda, como se muestra a continuacidn para las letras Naimern debit ‘Coatenides.ca hits (PC) + Palabret doble. 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 cual pasa a ser el valor de K, por kilobytes. Por tanto, una computadora con una memoria de 640K tiene 640 x 1024, 0 655,360 bytes. + Megabyte (MB). El nimero 2” ¢s igual a 1,048,576, o un megabyte. IMEROS BINARIOS Puesto que la computadora slo puede distinguir entre bits 0 y 1, trabaja con un sistema de numeracién de base 2 conocido.camo binario. De hecho, la palabra “bit” es una.contraccién de las palabras inglesas “binary digit” (digito binario). Una coleceién de bits puede representar cualquier valor numérico. El valor de un niimero binario depende de las posiciones relativas de cero a uno de los bits. Al igual que en los nimeros decimales, las posiciones de derecha a izquierda representan potencias ascendentes (pero de 2, no de 10). En el siguiente oamero de ocho bits, todos los bits se toman como uno (encendido}: Posicién: 7 6 5 4 3 2 1 0 Valor del bit: 1 1 1 1 i 1 1 1 Valor dela posicin: 1286432 16 8 4 2 1 E] primer bit de la derecha toma el valor 1 (2%) ¢l que sigue a la izquierda toma el valor 2 (2'); ef siguiente el valor 4 (2°), y asi sucesivamente. En.este caso el valor del ndmero binario-cs | + 2 + 4b a + 128 = 255 2"= 1, En forma similar, el valor del mimero bi ‘Valor del bit: 0 1 a 0 0 a o 1 Valorde la posicign: 128 6432. 16 8 4 2 1 Pero, no es 01000001 Ia letra A? En realidad, si, Los bits 01000001 pueden representar ya sea el mimero 65 0 bien la letra A, como a continuacién se indica: Introduccién al hardware de laPC Capitulo 1 + Siun programa define los dates para propésitos aritméticos, entonces 01000001 es un.rximero binario equivatente al mimero decimal 65 * Si un programa define los datos con propésites descriptives como encabezados, entonces 01000001 representa un cardcter alfabético. ‘Cuando inicie 1a programacién, vera con mas claridad esta distinciOn, puesto que define y utiliza cada elemento de informacién para un propésito especffiea. En la prictica, rara vez los dos usos son fuente de confusidn. Un numero binario no esté limitado a 8 bits. Un procesador que utiliza una arquitectura de 16 bits (0 de 32 bits) maneja de manera automatica miimeros 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,284,967,295, Aritmética binaria La microcomputadora realiza aritmética sélo en formato binario, En consecuencia, el programa- dor de: lenguaje ensamblador tiene que estar familiarizado con el formato binario y Ia suma binaria Los siguientes ejemplos ilustran la suma binaria a 0 1 1 +000 Ht a 1 Io tt "1 Note en los dos ‘iitimos ejemplos un 1 de acarreo. Ahora, sumemos @]000001 a 00101010. Estamos sumando la letra A con el asterisco? No, son las cifras decimales 65 y 42 Decimal Binario 65 ‘01000001 +42 +001 107 OLIOIOL Verifique que la suma binaria 01101011 realmente es 107. Otro ejemplo: sume los valores deci males 60 y 53: Decimal Binario 60 oo1 11100 +53 +001 10101 13 01110001 ‘Niimeros negativos Los niimeros binaries anteriores son todos positives, porque cn cada uno el dltimo bit de la izquierda es un cero. Un nimero binaria negativo tiene un | en el bit de la izquierda. Sin embar go, no ¢s tan simple como cambiar el bit de la izquierda a 1, tal como 01000001 (+65) a 11000001 Un valor negative se expresa en noaciée de complemento a des; esto es, para representar un numero: binario como negativo la regla es: invierta los bits y sume 1. (Se entiende por invertir un bit que sisu valor es 1, lo cambiamos por 0, y $i su valor es 0, lo cambiamos por 1.) Como ejemplo, encontrar el complemento a dos de 01000001 (0 65). Numeros binarios 5 Namero +65: ‘01000001 Invertir los bits: 1OL10 Sumar 1: L Numero 65; Iola Un mimero binario es negativo si su tltimo bit a la izquierda es 1, pero si sum los valores de tos bits que tienen 1, para convertir el némero 10111111 a decimal, no obtendrd 65. Para de- terminar el valor absoluto de un nmero negative binario, simplemente repita la operacién ante rior, esto es, invierta wut 01000000 —1 ‘0100000! La suma de +65 y —65 debe set cero, Pruébelo: +65 1000001 65 +N 69 (00000000 En la suma, el valor de los 8 its es cero, y el acarreo de un | a la izquierda se pierde. Pero coma existe un acarreo hacia ¢l bit de signo y tn acarreo hacia afuera del bit de signo, el resultado es correct. La resta binaria cx simple: convierta cl nimero que sera restado a su complemento a dos y sume los nimeros, Restar 42 de 65, La representackin binaria de 42 es 00101010 y su compie~ mento a dos es 11010110: 65 1000001 +42) 411010110 23 @oooloit El resultado, 23, es correcta. Una vez mis, existe un acarreo valido hacia el bit de signo y un acarreo hacia fuera. Si Ia justificacién para Ia notacién de complemento a dos no es inmediatameme clara, considere la siguiente pregunta: ,Qué valor tiene que ser sumado al nimero binario 00000001 para hacer que la suma sea igual a 00000000? En términos de mimeros decimales, Ia respuesta seria 1. Ei complemente a dos del J es IIIILLI1, Asi sumamos +1 y—1 come sigue: 1 0000001 +-D mw Resultado: (7)00000000 Ignorando el acarreo de 1, puede ver que el niimero binario 11111111 es equivalente al decimal - 1. También puede ver un pattén en la forma en que los niimeros binarios decrecen en valor +3 00000011 +2 09000010 +1 00000001 a 00000000 -1 0 WHMI -2 1LuN10 -3 nor 6 Introduccién al hardware de laPC Capitulo 1 De hecho, en un niimero negative los bits con cero indican su valor (absoluto}: trate el valor posicional de cada uno de los bits con cero come si fueran 1, sume los valores y agregue 1. Este material sobre aritmética binaria y nimeros negativos lo eneantrara 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 o imprimir muchos de elles come caracteres ASCIL comunes. (Bjemplos de tales caracteres son fas configuraciones de bits para Tab, Enter, Form Feed y Escape [tabulador, Intro, Avance de pégina y Escape.) En consecuencia, los disedadores de computaderas desarrollaron un método abreviado para representar informacién binaria. El método divide todo byte en mitades y expresa cl valor para cada medio byte. Como cjemplo, considere los siguientes cuatro bytes: Binnie; [0101 1001 | oof) orm | tor too; | 1100 1110 Decimal: 59 3s} un 9] ew Puesto que los niimeros 11, 12 y 14 necesitan 2 digitos, se extiende ¢l sistema de numera- cidm de manera que 10 = A, 11 = B, 12 = C, 13 = D, 14 = Ey 18 = F. Aqui esté el nimero en forma abreviada que representa el contenido de los bytes dados: 39 35 BS CE Por tanto, el sistema de numeracidn incluye los “digitos” 0 a F, y ya que existen 16 de tales digitos, cl sistema es conocido como representacién, hexadecimal (o hex). La figura 1-1 muestra los niimeros decimales de 0 a 15 junto con sus valores equivalentes en binario y en hexadecimal Binaric Decimal Nexadecimal | Binarig Decimal Hexadecimal onan 0 . Loop a 5 gona, 1 a 1002 3 2 ooo a 2 1019 1 a gona, 3 3 1022 a B 0190 4 4 1109 wz c 0x93 5 5 1192 a 3 Gres 7 7 432 a5 F Figura 1-1 Representacién binaria, decimal y hexadecimal 1 lenguaje ensamblador hace uso considerable del formato hexadecimal. Un listado de un programa ensamblador muestra, en hexadecimal, todas las direcciones, instrucciones de eédigo de maquina y el contenido de [as constantes de datos. Para depurar sus programas, puede usar el programa DEBUG del DOS, cl cual también muestra las direcciones y los contenidos de los bytex en formato hexadecimal Muy pronte staré trabajando en formato hexadecimal. Tenga en mente que él siimera hexadecimal que sigue inmediatamente a F es el 10 hexadecimal, que es el valor decimal 16, Weamos a continuaci6n algunos ejemplos sencillos de aritmética hexadecimal. El procesador 7 6 5 F F 10, FF oo 48 HL SR 04 A D 1 1E 40 100 Note también que el 40 hexadecimal es igual al 64 decimal, el 100 hexadecimal es cl 256 decimal y €l 1,000 hexadecimal es el 4,096 decimal, En un programa para indicar un mimero hexadecimal, se escribe una *H” inmedistamente después de! nimero; asi 25H = 37 decimal. Por convencién, un ndmero hexadecimal siempre empieza con un digito 0-a 9, asi que debe codificar BRH, come OB8H. En este libro indicamos un walor hexade: con la palabra “hex” o una “H™ después del ntimero (como en 4C hex.o 4CH); un valor binario con la palabra “binario” o una “B” a continuackin del aimero (come 01001100 binario.o 01001 100B), y un valor decimal simplemente por un nimero (como. 76). Se exceptian Jos casos en que la base es obvia por el coniexto. En el apéndice A se explica cOmo convertir mimeras hexadecimales a decimal, y viceversa, CODIGO ASCIT Para uniformar Ia representacidn de caracteres, los fabricantes de microcomputadoras han adop: tado el cédigo ASCII (American Standard Code for Information Interchange). Un codigo unifor- ‘me facifita la transferencia de informacién entre los diferentes dispositivos de la computadora, 11 c6digo ASCII extendide de & bits que utiliza la PC proporciona. 256 caracteres, incluyendo simbo- los para alfabetos extranjeros, Por ejemplo, la combinacién de bits 01000001 (41 hex) indica la letra A. El apéndice B tiene una lista de las 256 caracteres ASCII y el capitulo 8 ensefia eémo mostrarlos en la pantalla. EL PROCESADOR ‘Un elemento importante del hardware de la PC es la unidad del sistema, que contiene una tarjeta de sistema, fuente de poder y ranuras de expansién para tarjetas opclonales, Los elementos de la tarjeta de sistema son un microprocesador Intel (o equivalente), memoria de s6lo 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 eapacidad de memoria, registros y bus de datos, Un bus de datos transfiere datos entre el procesador, la memoria y los dispositives externos. En realidad, dirige el tréfico (trénsito) de datos. En seguida se anota una breve descripcién de varios procesadores de Intel: 8088/8018. Estos procesadores tienen registros de 16 bits y un bus de datos de & bits, y pueden direccionar hasta un millén de bytes en memoria interna. Los registros pueden procesar dos 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 insirucciones, Ambos procesadores corren en lo que se conoce como mado real, esto es, un programa a la vez 8086/90186. Estos procesadores son similares « los 8088/80188, pero tienen un bus de daios de 16 bits y corren mas répida, El 80186 es un 8086 més potente con unas cuantas instruc- ciones adicionales. Introduccién al hardware dela PG Capitulo 1 80286. Este procesador puede corter mds répido que los anteriores y direceionar hasta 16 millones de bytes. Puede cotrer en modo real o en mode protegido para multitareas, 80396. Este procesador tiene registros de 32 bits y un bus de datos de 32 bits, y puede ccionar hasta cuatro mil millones de bytes en memoria. Puede correr en moda 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 disehado para mejorar el desem- pefo, 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 ejecuar mis de una instruccién por ciclo de reloj. (Intel adopté el nombre “Pentium” Porque, a diferencia de los nimeros, los nombres pueden tener derechos reservados.) Unidad de ejecucién y unidad de interfaz del bus El procesador se divide en dos unidades logicas; una unidad de cjecucién (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- nies, micniras que la BIU envia instrucciones y datos ala EU, La EU conticne una unidad aritmé- vica-légica (ALU), una unidad de control (CU) y varios registros. Estos elementos ejecutan ins- trucciones y operaciones aritméticas y légicas La funcién mas importante de la BIU es manejar la unidad de control del bus, los registros ide segmentos y la cola de instrucciones. La BIU controla los buses que transfieren los datos a la EU, a la memoria y a los dispositives de entrada/salida externos, mientras que los registros de segmentos controlan el direccionamiento de memoria. BU: Una a tata i ts Figura 1-2 Unidad de ejecuci6n y unidad de imertaz del bus Memoria interna, 9 ‘Otva funcién de la BIU es permitir el acceso a instrucciones. Ya que las instrucciones de un programa en ejecuciGn se encuentran en la memoria, la BIU debe accesar insirucciones desde la memoria y colocarlas en la cola de instrucetones. Puesto que el tamafio de esta cola es de 4 a 32 bytes, dependdiendo del procesador, la BIU es capaz de adelantarse y buscar con anticipacién instruceiones de manera que siempre haya una cola de instrucciones listas para ser ejecutadas La EV y la BIU trabajan en paralclo, si bien Ia BIU se mantiene un paso adelante. La EU notifica a la BIU cudndo necesita acceso a los datos en memoria o a un dispositive de E/S. También, la EU solicita instrucciones de maquina de la cola de instrucciones de la BIU. La instrucciGn que s¢ encuentra adelante de Ia cola ¢s la actualmente ejecutable, y mientras la EU esta ocupada ejecutando una instruceié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 lo que se conoce como iuberia sencilla, la cual los restringe a completar una instruccin antes de iniciar la siguiente. El Pentium y pracesadores. posteriores tienen una duberia doble (0 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 séla lectera (ROM). Los bytes en memoria se numeran en forma consecutiva, ini ciando con 00, de modo que cada localidad tiene un némero de direccidn tnico. La figura 1-3 muestra un mapa fisico de memoria de una PC tipo 8086. Del primer megabyte de memoria, los primeros 640K Ios ocupa la RAM, la mayor parte de la cual esté disponible para su uso. ROM, La ROM es tn chip especial de memoria que (como su nombre lo indica) s6to- puede ser lefda, Ya que las inscrucciones y los datos estiin “grabados” permanentemente en un chip de ROM, no pueden ser alterados. EL. Sistema Basico de Entrada/Salida (BIOS) de ROM inicia en la direccién 768K y maneja los dispositives de entrada/salida, como un controlador de disco duro. La ROM que inicia en 960K controla las funciones basicas de la computadera, como fa autoprueba al encender, patrones de puntos para los gréficos y el auttocargador de disco, Cuan- da se enciende la computadora, la ROM realiza ciertas verificaciones y carga, desde el disco, los daios especiales del sistema que envia ala RAM. Inicie Direceién use Dec Hex 360% F0000 768K coo00 memoria superior sox aggga | Ge video (RAN! memoria 640 K memoria (RAM) convencional cero 90000 Figura 1-3 Mapa de memoria fisiea 10 Introducctén al hardware dela PC Capitulo 1 RAM. Un programador esté preocupado principalmente con la RAM, que seria mejor tla- mada “memoria de lectura-escritura”. La RAM se dispone como una “boja de trabajo” para almacenamiemto temporal y ejecucién de programas. Ya que el contenido de la RAM se pierde cuando se apaga 1a computadora, debe reservar almacenamienio exierno para guardar programas y datos. Si cuando enciende la computadora tiene insertado un disco flexible con DOS o un disco duro instalado, el provedimiento de arranque en ROM carga el programa COMMAND.COM en RAM. Después se le pide s COMMAND.COM ealizar 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 ejecuta en RAM y por lo comvin produce salida a la pantalla. a la impresora.o a un disco. Cuando termina, usted puede pedir al COMMAND.COM cargar otro programa en RAM, una accivin que se escribe sobre el programa anterior. En todo él estudio posterior de la RAM se usaré el 1érmino general “memoria” Dircccionamiento de localidades de memoria Dependiendo del modelo, el provesador puede accesar uno o mis bytes de memoria a la vez. ‘Considere el nimero decimal 1,025. La representacion hexadecimal de esta cifra, O401H , requie- re de dos bytes (o una palabra) de memoria. Consta de un byte de orden alto (mas significativo), 04, yun byte de orden bajo (menos significative), 01. El sistema almacena en memoria estos bytes en Secuencia inversa de bytes: el byte de orden bajo en Ia direecién baja de memoria y el byte de orden alto en la direccién alta de memoria, Por ejemplo, el procesador transferirfa O401H de un registro a las localidades de memoria $612 y 5613 como: regia oa a ——s meemurs o1 o4 locabidad 5612, localidad $613, lnyte menas 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 ¢on esto. Cuando el procesador recupera la palabra de la memoria, ovra vez invierte los bytes, restablecidndolos de manera correcta en el registro como 04 01 bex. Aunque esta caracteristica es enteramemte automitica, usted tiene que estar alerta cuando progra- ‘me y depure programas en lenguaje ensamblador Un programador de lenguaje ensambladar tiene que distinguir claramente entre la direecidn ¥ los contenidos de una localidad de memoria, En el ejemplo anterior, el comtenido de la localidad 5612 es O1 y el contenido de la lovalidad 5613 es 04 SEGMENTOS Y¥ DIRECCIONAMIENTO- Un segmento es un rea especial en un programa que inicia en un démite de un parrafo, esto es, en tuna localidad regularmente divisible entre 16, 0 M0 hex, Aunque un segmento puede estar ubicado casi en cualquier lugar de Ia memoria y, en modo real, puede ser hasta de 64K. silo necesita tanto espacio como el programa requiera para su ejecucién, Segmentos y direccionamiento " Un segment en modo real puede ser de hasta 64K. Se puede tener cualquier mimero de seg- mentos; para direccionar un segmemto en particular basta cambiar la direccidn en el registro del segmento apropiado. Los tres segmentos principales son los segments de cédtigo, de datas y de la pita Segmento de cédigo El segmento de cddigo (CS) contiene las instrucciones de méquina que son ejecutadas, Por lo comin, la primera instruccién ejecutable estd en el inicio del segmento, y el sistema operativo cmlaza a esa localidad para iniciar la ejecucién de! programa, Como su nombre indica, el registro del CS direcciona el segmento de cédigo. Si su drea de cédigo requiere mas de 64K, su programa puede necesitar definir mas 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 regisiro del DS direcciona el segmento de datos. Si su drea de datos requiere de mis de 68K, su programa puede necesitar definir mas de un segmento de datos. Segmento de la En términos sencitlos, la pila contiene los datos y direcciones que usted necesita guardar tempo ralmente o para uso de sus “Iamadas” subrutinas, El registro del segmento de la pila (SS) direcciona l segmento de la pita, Limites de los sepmentas Los registros de segmentos contienen la direcciGn inicial de cada segmento. La figura 1-4 presenta unesquema de los registros CS, DS y SS; los registros y segmentos no necesariamente estiin.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 es una direccidn por to connin divisible entre el 16 decimal, © 10 hex. Suponga que un segmento de datos inicia en Ia localidad de memoria 045 POH. Ya que en este y todos los demas casos €1 dltime digito hexadecimal de la derecha es cero, los diseftadores de computadora decidieron que seria innecesario almacenar el digito cero en el registro del segmento. Asi, (45FOH se almacena como 045F, con el cero de la extrema derecha sobrentendido. En donde sea spropiado, el texto indica al cero de la derecha con corchetes, como en 045F[0} stamens Figura 1-4 Segmentos y registros 12 Intreduceién al hardware dela PC — Capitulo 1 Desplazamientos de segmentos En un programa, todas las localidades de memoria estén referidas a una direccién inicial de segmento, La distancia en bytes desde la direccién del segment se define como el desplazamienta (offset). Un desplazamienio de dos bytes (16 bits) puede estar en el rango de OOOH hasta FFFFH, o bien, desde cero hasta 65,535. Asi, el primer byte del segmemto de cddigo tiene un desplaza. miento-00, el segundo byte tiene wn desplazamiemto Ot, etc. hasta el desplazamiemo 63,335. Para referir cualquier direceién de memoria en un segmento, el procesador combina la direccién del segmento en un regisire de segmento con un valor de desplazamiento En el ejemplo siguiemte, el registro DS contiene la direccidn de segmento del segmento de datos en O4SF[O] hexadecimal y una instruccion hace referencia a una localidad con un desplaza- miemto de 0032H bytes dentro del segmento de datos. EL 7 j ! irecciGn de segmento (4SFOH esplazamiena 32H Por tanto, la localidad real de memoria del byte referido por 1a instruccién es ($4622H. Direccién del segmento DS: G45FOH Desplazamiento: +0032H Direceion real 04622H Note. que un programa tiene uno o mas segmentos, los cuales pueden iniciar casi en cual quier lugar de memoria, variar en tamaio y estar en cualquier orden. Capacidad de direecionamiento La serie de PC ha usade varios procesadores Intel que proporcionan diferentes capacidades de: direceionamiento Direceionamiento de 8086/8088, Los registros de los procesadores 8086/8088 proporcio- nan 16 bits. Ya que una direccidn de segmento esti en el limite de un parrafo, 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 dltimos bits de la derecha como ceros (un digito hexadecimal), como anan[0] hex. Ahora, FFFE[OJH permite direccionar hasta 1,048,560 byies. Si tiene duda, decodifique cada F hex come el 1111 binario, considere los cuatro dltimos bits de la derecha como ceros y sume: los valores de los bits a 1. Direcctonamiento 80286. En modo real, el procesador 80286 maneja ¢l direccianamiemio de la misma manera que lo hace el 8086, En moda protegide, el procesador utiliza 24 bits para direceionamiento, de manera que FFFFF[0] permite diteccionar hasta 16 millones de bytes. Los registros de segmento actéan come seleccionadores para accesar una direccidn de segmento de 24 bits de la memoria y sumar este valor a un desplazamiento de direceién de 16 bits: Regiutra de segment: 16 bits (0000), Direccién det segment: Da bats 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 provegid, tos procesadores utilizan 48 bits para el direccionamiemto, lo que permite direcciones de segmento de hasta cuatro mil millones de bytes. Las registros de segmento de 16 bits actdan como seleocionadores para el acceso a direcciones de segmento de 32 bits de la memoria y para agregar este valor a un despla- zamiento de direeeién de 32 bits Registro de segmenio: 16its [0000] Dareceién del segment 3 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, par convencién, se aumeran de derecha a izquierda, como en: M4 12 12 1 Ww 9876S 4 I2IIO Registros de segmento Un registra de segmento tiene 16>its de longitud y facilita un érea de memoria para direceionamiento conocida come el segmento actual. Como hemos dicho, un segmento se alinea en un limite de pirrafo y su direceién en un registro de seamenio supone cuatro bits 0a su derecha. Registro CS. El DOS almacena la direccién inicial del segmento de cédigo de un progra- ma en el registro CS. Esta direccién de segmento, mis un valor de desplazamiento en ¢l registro de apuntador de instruccién (LP), indica la direccién de una instroccién que es buscada para su ejecuciGn, Para propésitos de programacién normal, no se necesita referenciar el registro CS. Registro DS. La direccitin inicial de un segmento de datos de programa es almacenada en el registro DS. En términos sencillos, esta diteccién, més un valor de desplazamiento en una insiruceién, genera una referencia a la localidad de un byte especifico en el segmemto de datos. Registro SS, El registro S$ permite la colocacién en memoria de una pila, para almacena- miento temporal de dirceciones y datos. El DOS almacena la direccién de inicio del segmento de pila de un programa en el registro SS. Esta direccién de segmento, mis un valor de desplaramien to en el registro del apuntador de Ia pila (SP), indica la palabra actual en la pila que esté siendo direccionada. Para propésitos de programacién normal, no se necesita referenciar el registro SS. Registro ES. Algunas operaciones con cadenas de-caracteres (datos de caracteres) utilizan el registro extra de segmento para manejar el direccionamiento de memoria, En este contexto, el registro ES esti asociado con el registro DI (indice). Un programa que requiere el uso de! registro ES puede inicializarlo con una direcctén de segmento apropiada. Registros FS y GS. Son registros exira de segmento en los procesadores 80386 y poste~ riores. 4 Intraducci6n al hardware dela PC Capitulo 1 Registro de apuntador de instrucciones El registro apuntador de instrucciones (IP) de 16 bis contiene el desplazamicnio de direccién de Ia siguiente instruccién que se ejecuta. El IP esté asociada con el registro CS en el sentide de que el IP indica la instrucci6n actual deniro del segmento de cédigo que se est4 ejecutando actualmente Por lo comin, usted no refiere el registro IP en un programa, pero, para probar un programa, si puede cambiar su valor por medio de! programa DEBUG del DOS. Los procesadores 80386 y posteriores tienen un IP ampliado de 32 bits, llamado EIP. En el ejemplo siguiente, el registro CS contiene 25A4I0}H y el IP contiene 412H. Para encontrar la siguiente instruccién que sera ejecutada, el procesador combina las direcciones en ¢l CS y el IP: Segmento de direccidn en el registro CS: 25A40H Desplazamiento de direccign en el registro IP: + 12H Direccién de la siguiente instreccién: 25E52H Registros apuntadores Los registros SP (apuntador de la pila) y BP (apuntador base) estin asociados con el registro SS y permien al sistema accesar datos en el segmento de Ia pila. Registro SP, Fl apuntador de la pila de 16 bits est asociado con el registro SS y propor ciona un valor de desplazamicnto que sc refiere a Ia palabra actual que esta siendo-procesada en la pila. Los procesaderes 80386 y posteriores tienen un apuntador de pila de 32 bits, el registro ESP. El sistema maneja de manera automatica estos registros. En el ejemplo siguiente, e] registro SS contiene Ia direcciGn de segment 27B3[0]H y el SP, ¢l desplazamiento 312H. Para encontrar la palabra actual que esté siendo procesada en la pila, la computadora combina las direcciones en el SS y el SP: Direcci6n de segmento en el registra SS: 27B30H Desplazamiento en el registro SP: +312H Direceién én la pila: 27E42H LTT LT ‘2783 0)H_ 3H Direccid del sepmenso 8S Desplataieatn det SP Registro BP. E] BP de 16 bits facilita la referencia de pardmetros, los cuales som datos y direcciones transmitidos via la pila, Los procesadores 80386 y posteriores tienen un BP ampliado de 32 bits liamado el registro EBP. Registras de propésite general Los registros de propdésito general AX, BX, CX y DX son los caballos de batalla del sistema. Son tinicos en el sentide de que se puede direccionarlos come una palabra 0 como una parte de un byte. E! ltimo byte de la izquierda es la parte “alta”, y el dltimo byte de la derecha es 1a parte “baja” Por ejemplo, el registro CX consia de una parte CH (alia) y una parte CL (baja), y usted puede referirse a cualquier parte por su nombre. Las instrucciones siguientes mueven ceros a los regis- wos CX, CH y CL, respectivamente, Registros 15 MON CK.O0 ww 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 1a mayor parte de la aritmética. Por ejempio, las instrucciones para multiplicar, dividir y waducir 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 (Taw [a BAX: Registro BX. El BX es conocido como el registro base ya que es el tinico registro de propdsito general que puede ser un indice para direccionamiento indexado. Tambign es comiin emploar ¢l BX para célculos. BX: BH BL EBX: Registro CX. El CX es conocida como el registro contador. Puede contener un valor para controlar el niimero de veces que un ciclo se repite 0 un valor para corrimiento de bits, hacia la derecha © hacia la izquierda. El CX también es usado para muchos eélculos, oe or ECX; Registro DX. El DX es conocido come el registro de datos, Algunas operaciones de entra da/salida requieren su uso, y las operaciones de multiplicacién y divisién con cifras grandes suponen al DX y al AX trabajando juntos. Dx: DH EDX Puede usar los registros de propésito general para suma y resta de cifras de 8, 16 0 32 bits Registras indice Los registras SI y DI estan disponibles para direecionamiemto indexado y para sumas y restas, 16 Introduceién al hardware dela PC Capitulo 1 Registro SI. El registro indice fuente de 16 bits es requerido por algunas operaciones con cadens (de caracteres). En este contexto, el SI estd asociado con el registro DS. Los procesaderes ‘80386 y posteriores permiten el uso de un registro ampliado de 32 bits, el ESI Registro DI. El registro indice destino también es requerido por algunas operaciones con cadenas de caracteres. En este contexto, el DI estd asociado con el registro ES. Los procesadores ‘80386 y posteriores permiten ei uso de un registro ampliado de 32 bits, el EDI. Registro de banderas De los 16 bits del registro de banderas, nueve son comunes a toda la familia de procesadores ‘8086, y sirven para indicar el estado actual de la méquina y el resultado del procesamiemo ‘Muchas instrucciones que piden comparaciones y aritmética cambian el estado de las banderas, algunas de cuyas instrucciones pueden realizar pruebas para determinar la accién subsecuente En resumen, los bits de las banderas comunes son como sigue: OF (overflow, desbordamiento). indica desbordamiento de un bit de orden alto (mas a la izquierda) después de una operacién aritmética DF (direcciém). Designa la direccién hacia la izquierda o hacia la derecha para mover 0 comparar cadenas de caracteres IF (interrupeién), Indica que una incerrupcién externa, como la entrada desde el reclade, sea procesada o ignorada, ‘TF (trampa). Permite 1a operacién del procesadior en modo de un paso. Los programas depuradores, como DEBUG, activan esis banders de manera que usied pueda avanzar en la ejecucién de una sola instruccién a un tiempo, para examinar el efecto de esa instruccién sobre las registrds y la memoria. SF (signo). Contiene el signo resultante de una operacién aritmética (0 = positive y 1 = negativo). ZF (cero). Indica el resultado de una operacién aritmética o de comparacién (0 = resul- tado diferente de cero y 1 = resultado igual a cero) AF (acarreo auxiliar). Contiene un acarrea externo del aritmética especializada. PF (paridad). Indica paridad par o impar de una operacién en datos de acho bits de bajo orden (més a la derecha). 3 en un dato de acho bits, para CF (acarreo). Contiene el acarrea de orden més alto (mais a la izquierda) después de una operacién aritmética; también eva el contenido del ditimo bit en una operacién de corrimiento © de rotacidn. Las banderas estén en ef registro de banderas en las siguientes posiciones: Nim debt: IS72 1 ow 98 8 7 6 8 4 3 2 1 ° vues [T][[Tole[i[rls]z]]allelle] Puntos clave Ww Las banderas mas importantes para la programacién en ensamblador son O, $, Z y C, para operaciones de comparacién y aritméticas, y D para operaciones de cadenas de caracteres. Los procesadores 80286 y posteriores tienen algunas banderas usadas para propésitas internos, en especial las que afectan al modo protegido, Los procesadores 80386 y posteriores tienen un regis- to extendido de banderas conocido como Eflags. El capitulo 8 contiene detalles adicionales acer- ca del registro de banderas. PUNTOS CLAVE ‘» La computadora distingue entre bits 0 (apagado) y 1 (encendido), y realiza aritmética 3610 en formato binario. + El valor de un nimero binario se determina par la ubicacién de sus es igual a? + 240+ 2,013 ‘+ Un mimero binario negative se representa en notacién de complemento a dos: se invierten los bits de su representacién positiva y se suma 1. + Un solo cardcter de memaria es un byte; comprende ocho bits de datos y un bit de paridad. Dos bytes adyacentes comprenden una palabra, y cuatro bytes adyacentes, una palabra doble. + El valor de K es igual a2", 0 1,024 bytes. + El formato hexadecimal es una notacién abreviada para representar grupos de cuatro bits. Los digitos hexadecimales 0-9 y A-F representan los mimeros binarios desde 0000 hasta aL + La representaciGn de datos de caracteres es realizado en el formato ASCII. + El corazén de la PC es el microprocesador. El procesador almacena datos numéricos en palabras de memoria en secuencia inversa de bytes * Los dos tipos de memoria son ROM y RAM. + Un programa en lenguaje ensamblador consiste en uno o mis segmentos: un segmento de la pila para mantener las direceiones de regreso, un segmento de datos para definir éreas de datos y de trabajo y un segmento de oédigo para instrucciones ejecutables. Laé localidades en un segmento son expresadas como un desplazamiento relativo a la direccidn inicial del segment, « Los registros de CS, DS y 8 permiten el direccianamiento de los segmentos de eédigo, datos y de la pila, respectivamente + El registro IP contiene Ia direceiéin de desplazamiento de la siguiente instruccién que es ejecutada, *« Los registros de apuntador SP y BP esuin asociados con el registro 8S y permiten al sistema accesar datos en el segmento de 1a pila. «+ Los registros de prapsito general AX, BX, CX y DX san los caballos de batalla del sistema, El tiltimo byte a la izquierda es 1a parte “alta”, y el dltime byte a la derecha es la parte “baja”. El AX (acumulador principal) se emplea para entrada/salida y para la mayor parte de la aritmética, El BX (registro base) puede ser usado como un indice en direccionamiento extendido. E] CX es conocide como el registro contador y el DX como el registra de datos + Los regisiros SI y DI estin disponibles para direccionamiemo extendido y para sumas y rrestas. Estos registros también se necesitan para algunas operaciones con cadenas de caracteres (cardcter). Asi, 1011 binario 18 Introducci6n al hardware dela PG Capitulo 1 + El registro de banderas indica el estado actual de la computadora y los resultados de ts ejecucién de las instrucciones. PREGUNTAS: 1-1. Determine ta coafiguracin binaria en bits de los siguientes riimeras: (a) 6; (b) 14; (@) 22; (€) 28; (e) 20. 1-2, Sume los siguientes mimeros binarios: (@) 9001010 (&) OOTTIIOL — fe) OOMTTION (ay OON0 ‘0001 101 ‘oo1010r0 000011 oo L 10 13. Halle el complements a dos. de los siguiemes nimeros binaries; (a) OOO10110; (b) OOLII1O1; (c) ooLit 100 1-4, Encuentre el valor positivo (absoluto) de los siguientes nuimeros binarios negativos: (a) 11001000; (b) TOLILLON; (c) LULTLT1O; (@) FELT. 1-8. Determine la represemacién hexadecimal de los valores siguientes: (a) codigo ASCII de la letra Q; (b) cédigo ASCII del ndimero 7; (c) 01011101 binario, (d) 01110111 binari 1-6. Sume los niimeros hexadecimales siguientes (@) 2346 (be) SIED 7779 td) EABE—(@)_:FBAC. +0022 +0003 +0887 $284 +0CBE 1-1. Determine la representacién hexadecimal de los mimeros decimales siguientes. Consulte el apéndice ‘A para ver el métode de conversidin. También debe verificar su resultado al convertir el hexadecimal a binario yal sumar los bits de 1. (a) 19; (b) 33; (¢) 88; (d} 255: (e) 4,095; «f) 63,398 1-4, Proporcione in configuracién ASCH, en bits, de los siguientes caracteres de un byte. Utilice el apéndice B como guia: (a) P; (b) p: (¢) #: (@) 5. {Cust es objetiva del procesador? {Cuiles son las dos clases principales de memoria en la PC y cusles, sus principales uses? Muestre cémo el sistema almacena 012345 hex como un valor en la memoria, Explique lo siguiente: (a) segmento; (b) desplazamiento (offset); (c) Nanite de diveceién, {Cutles son: (a) las tres clases de segmentos; (hb) su tamafio maximo: y (C) ef limite de direceiéa en el que ellos inician? Sefale el objetivo de cada uno de los tres registros de segments, Explique qué registros ve utilizan para los siguientes propésitos: (a) sumar y restar; (b) comar los ciclos; (¢} muliplicar y dividir; (4) segmentos de direccionamiento; (e) indicacidn de un resultado igual a cera; (f) desplazamiento de direccidn de una instruceidn que se va a ejecutar 1A16. Muestre el registro EAX y el tamaiio y posiciin de AH, AL y AX en él. 1.17. Codifique las instrucciones en lenguaje de ensamblador para mover el nidmert 25 a los eegistros femtes: (a) CH; () CL; (6) CX; (@) BCX. CAPITULO 2 Requerimientos de software de la PC OBJETIVO: Explicar et ambiente general de software para la PC. INTRODUCCION En este capitulo describimos el ambiente de software de la PC: las funciones del DOS y sus ‘eomponentes principales. Examinamos el procesa de arrangue (cémo es que el sistema se autocarga cuando usted enciende su computadora) y consideramos cémo el sistema carga un programa para sjecutarlo, cémo utiliza ta pila y emo una instruccién en el segmento de cédigo direcciona datos en el segmento de datos. E} capitulo se completa con Ia explicaciin bisica de! software y hardware de la PC y nos permite continuar con el capitulo 3, en donde cargamos programas clave en la memoria y los ‘¢jecutamos paso a paso. CARACTERISTICAS DEL SISTEMA OPERATIVO El DOS es un sistema operative que proporciona acceso general © independiente de los dis- ‘positives a los recursos de la computadora, Los dispositivos que permite incluyen teclados, panta~ llas y unidades de disco, Por “independencia de dispositivos” debe entender que no es preciso dirigirse especificamente a los dispositivos, ya que el DOS y sus controladores de dispositivos pueden manejar las operaciones a nivel de dispositive. 19 20 Requerimientos de software dela PC Capitulo 2 Entre las funciones del DOS que nos conciernen en este libro, estén las siguientes: + Administracién de archivos. El DOS mantiene los directorios y archivos en los discos de sistema. Los programas crean y actualizan archivos, pero el DOS tiene la responsabilidad de administrar sus ubicaciones en el disco. + Entrada/satida (E/S). Los programas solicitan datos de entrada al DOS o entregan informacion al DOS por medio de interrupciones. E] DOS releva al programador de codificar a nivel de B/S. * Carga de programas, Un usuario 0 programa solicita la ejecucién de un programa; el DOS maneja los pasos necesarios para tener acceso al programa desde el disco, colocatle en la memoria ¢ inicializarlo para su ejecucién. + Administracién de la memoria. Cuando el DOS carga un programa para su ejecucién, asigna suficiente espacio en memoria para el eédiga del programa y sus datos. Los programas pueden procesar datos dentro de su drea de memoria, liberar memoria que no necesiten ¥ solicitar memoria adicional. + Manejo de interrupciones. El DOS permite a Jos usuarios instalar programas residentes ep memoria que se adhieren al sistema de interrupeiones para realizar funciones especiales. Organizackin del DOS Los tres componentes principales de! DOS son 1O.SYS, MSDOS.SYS y COMMAND.COM. EI 10.SYS realize las funciones de inicializacién en el momento del arranque y también contiene importantes funciones de E/S y controladores de dispositives que dan el soporte de E/S bésico en el BIOS de ROM. Este componente esté almacenado en disco como un archivo de sistema oculte y es conocido come IBMBIO.COM en e! PC-DOS. El MSDOS.SY$ actia como el miicleo (kernel) del DOS y se ocupa de ia administracién de archivos, de memoria y de entrada/salida, Este componente esté almacenado en disco como un archivo de sistema y en el PC-DOS se conoce como IBMDOS.COM. (COMMAND. COM és un procesador de comandos shell que actda como la interfaz entre 1 usuario y el sistema operative. Muestra la indicacién del DOS, monitorea el teclado y procesa los:comandos del usuario, como borrado de tn archive o carga de un programa para su ejecucién, EL PROCESO DE ARRANQUE Encender la computadora provoca una “iniclalizacién” (algunos le llaman “arrangue en fio"). El procesador introduce un estado de restauracién, limpia todas las localidades de memoria (es decir, coloca cero en todas ellas), realiza una verificacién de paridad de la memoria y asigna al registro CS la direcci6n del segmento FFFFIOJH y al registro [P el desplazamiento cero, Por tanto, la primera instruccién a ejecutarse esté en la direccién formada por la pareja CS:1P, que es FFFFOH, la cual es el punto de entrada al BIOS en ROM. [La rutina de BIOS que inicia en FFFFOH verifica los diferentes puertos para identificarlos ¢ inicializa los dispositivos que estén conectados a Ia computadora. Después et BIOS establece dos areas de datos: 1. Una tabla de servicios de interrupeién, que en memoria baja en la localidad 0 y contiene las direcciones de las interrupciones que ocurren. 2. Undreade datos de BIOS que inicia en la localidad 40(0), que estd estrechamente relacionada con los dispositivas conectados. Programa cargador del sistema 21 640K — Parte tranaitoria 4el CoMMAND.coM (programas que se estén ejecutande Parte residente dei CommMAND. Com (reside de manera permanente? or Mapa de la memoria convencional A conlinuacién el BIOS determina si est presente un disco que contenga los archivos de sistema del DOS y, en caso de que asi sea, accesa el cargador de arranque desde exe disco. Este programa carga los archivos de sistema I0.SYS y MSDOS.SYS desde e! disco hacia la memoria ¥ transfiere el control al punto de entrada del IO.SYS, el cual contiene los controladores de dispositivos y otro eédigo especificn del hardware, El 10.SYS se reubica él mismo en memoria y transfiere el control al MSDOS.SYS. Este médulo inicializa las tablas internas del DOS y la porcién del DOS de la tabla de interrupciones. También lee el archivo CONFIG.SYS y ejecuta sus comandos. Finalmente, el MSDOS.SYS pasa el control al COMMAND.COM, el cual procesa ¢l archive AUTOEXEC. BAT, muestra su indicaciém y monitorea las entradas dadas desde el veclado. En este punto, Ia memoria convencional hasta los 640K aparece como se muestra en la figura 2-1, Por medio de un administrador de memoria, parte del DOS puede ser reubicado en 1a me- moria alta. INTERFAZ DOS-BIOS. BI BIOS contiene un conjunto de rutinas en ROM para dar soporte a los dispositivos. El BIOS prueba ¢ inicializa los dispositivos conectados y proporciona los servicios que son usados para la lectura y escritura desde los dispositivos. Una tarea del DOS es hacer interfaz con el BIOS cuando cexista una necesidad de accesar estas facilidades ‘Cuando un programa usuario solicita un servicio det DOS, éste podria transferir la solicitud al BIOS, el cual a su vez accesa el dispositive solicitado. Sin embargo, algunas veces un programa hace la peticién directamente al BIOS, especificamente para servicios del teclado y de la pantalla Y en otras ocasiones -aungue es raro y no recomendable- wn programa puede pasar por alto tanto al DOS como al BIOS para accesar un dispositive direetameme, La figura 2-2 muestra estas trayectorias altcrnas. PROGRAMA CARGADOR DEL SISTEMA EL DOS da soporte a dos tipos de programas ejecutables: COM y .EXE. Un programa .COM ‘consta de un segmento que contiene eédigo, datos y la pila. Si se necesita un pequetio programa de utileria oun programa residente en memoria (un programa que es instalado permanentemente y estd disponible mientras otros programas estin ejecutandose), se escribe un programa COM. Un programa .EXE consta de segmentos de eédigo, datos y de la pila separados y es el método usado por la mayorfa de los programas serios, Este libro usa. ambos tipos de programas. 2 Requerimienios de software de laPG Capitulo 2 Programas de usuarios Hardvare/Dispositivos Figura 2-2 Interfax DOS-BIOS ‘Cuando usted le solicita al DOS cargar un programa .EXE desde el disce a la memoria para su ejecucién, ef cargador realiza las siguientes operaciones: 1. Accesa el programa .EXE desde el disco. 2. Construye un prefijo de segmento de programa (PSP) de 256 bytes (100H) en un limite de parrafo en memoria interna disponible. 3. Almacena el programa en memoria inmediatamente después del PSP. 4. Carga la direccién del PSP en los registros DS y ES. 5. Carga la direccién del segmento de cidigo en el CS y establece el IP al desplazamiento de la primer instruccién (por lo comin cero) en el segmento de cédigo. 6, Carga la direccisn de Ia pila en el SS y establece el SP al tamatio de la pila. Transfiere el control al programa para ejecucién, iniciando (por lo comin) con La primer instracciGn en el segmento de cédigo. En.esta forma, el cargador DOS inicializa correctamente los registros CS:IP y SS:SP. Pero note que el programa cargador almacena la direccién del PSP tanto en el registro DS como en el ES, aunque su programa normalmente necesita la direccién del segmento de datos en estos regis- tros. Como consecuencia, sus programas ti¢nen que inicializar el DS con la direccién del segmen- to de datos, como se verd en el capitulo 4, Ahora examinaremos la pila y después los segmentos de cédigo y datos LA PILA (STACK) Los programas .COM y EXE, requieren un rea en el programa reservada como una pila (stack), El propésito de la pila es mantener un espacio para el almacenamiento temporal de direcciones y datos. E} DOS define de manera automdtica la pila para un programa .COM, mientras que para un programa .EXE usted debe definir en forma explicita la pila. Cada elemento de dato en la pila es una palabra (dos bytes). El registro SS, como es inicializado por el DOS, contiene la direccién del inicio de 1a pila. Inicialmemte, el SP contiene ef tamafio de la pila, un valor que apunta al byte que est pasando ¢! final de la pila. La pila difiere de otros segmentos en su método de almacenar los datos: empieza en Ia localidad més alta y almacena los datos hacia abajo por la memoria. a pila (stack) 2 | \ ss sP dlreceid del segmento-de ta pila tope oe ia pita La instruceién PUSH (entre otras) disminuye el SP en 2 hacia abgjo, hacia la siguieme palabra almacenada de la pila y coloca (0 empuja, push) un valor abi. La instruccién POP (entre otras) regresa el valor de la pila © incrementa el SP en 2 hacia arriba, hacia la siguiente palabra almacenada. El ejemplo siguiente ilustra como meter el contenido de los registros AX y BX a la pila y la subsecuente extraccién de ellos. Suponga que el AX contiene 015AH, el BX contiene 03D2H y el SP contiene 28H (aqui no nos concierne la direceién en el SS), 1. Al comienzo, la pila esta vacia y se ve asi: [ I I I 1 1 88 SP =28 direcctéa del segmento de la pila tope de Ia pila 2. PUSH AX: disminuye el SP en 2 (2 26H) y almacena el contenido del AX, O1SAH, en la pila. Observe que la operacién invierte la secuencia de bytes almacenados, de modo que O15A se convierte en SAO1 I I [Tan 1 I ss sP=36 Atirescidn det segment deta pla tape de a pila 3. PUSH BX: disminuye el SP en 2 (a 24H) y almacena el contenido del BX, 03D2H, en la pila: [ I onan ! 1 ss sP=26 siresciin det sapmentoe a pits tope deta pla 4, POP BX: regresa la palabra que se encuentra en la pila, en donde apunta el SP, y la envia al registro BX ¢ incrementa el SP en 2 (a 26H). El BX ahora contiene 03D2H, con los bytes correctamente invertides: i . | pana | SA01 ss SP= 26 Mireceiia del segmente de In. pila ope de ta pala Requerimientos da software de laPC Capitulo 2 5. POP AX: regresa la palabra que se encuentra en la pila, en donde apunta el SP, y la envia al registro AX ¢ incrementa el SP en 2 (a 28H), El AX ahora contiene O1SAH. con los bytes correctamente invertidas: I I bam [sani | 1 | ss SP =28 direcetin del segmento de ta pila tope de la pila ‘Note que las instrucciones POP son codificadas en secuencia inversa a las instrucciones PUSH. Asi, en el ejemplo se guardaron AX y BX, pero se sacaron el BX y AX, em ese orden, Ademés, Jos valores sacados de la pila atin estén alli, aunque cl SP ya no apunta a ellos Siempre debe asegurarse que su programa coordine los valores que guarda en la pila con los valores que saca de ella, Como éste es un requisito directo, un error puede causar que un progra- ma no funcione. También, para un programa .EXE usted tiene que definir una pila que sca suficientemente grande para contener todos los valores que podrian ser guardados en ella, Onras instrucciones relacionadas con los valores que guarda y saca de la pila son: + PUSHF y POPF: Guarda y restablece el estado de los banderas. + PUSHA y POPA (para el 80286 y posteriores): Guarda y restaura el contenido de todos los registros de propésito general DIRECCIONAMIENTO DE PROGRAMAS Normalmente, los programadores escriben.en codigo simbdlico y utilizan ensamblador para tradu- cirlo a cédigo de mdguina. Para ejecutar un programa, el DOS carga slo cédigo de miquina en la memoria. Cada instruccidn consta de al menos una operacién, como mover, sumar 0 regresar. Dependiendo de la operacién, una instruccién también puede tener uno o més operandos que referencian los datos que la operacién procesa. ‘Como se estudié en el capitulo 1, el registro CS proporciona la direceién de inicio de un segmento de cédigo de programa y ¢l registro DS ofrece la direcein de inicio del segmento de datos, El segmento de cédigo contiene instrucciones que serin ejecutadas, mientras que el seg- mento de datos contiene los datos que las instrucciones referencian. El registro IP imdic direc- cidm de! desplazamiento de la instruccién actual, en el segmento de cOdigo, que es ejecutada, Un operando de Ia instruccién indica una direcciGn de despiazamiento en el segmento de datos que es referenciada ‘Considere un ejemplo en el que c] DOS ha determinada que se carga un programa EXE en memoria, iniciando en la localidad O4A POH. El DOS, de acuerdo con esto, asigna el registro CS Ja direccién del segmento 04AF[OJH y al DS con, digamos, la direccién de segmento-04B1[0]H. El programa ya ha iniciado su ejecucién, y el IP actualmente contiene el desplazamiento (023, La pareja CS:IP determina la direccién de la siguiente instruceién a ser ejecutada, como sigue: Direcci6n del segmento CS: 4AFOH Desplazamiento IP: +0013H Direccién de !a instruccién: © 4BO3H Direceionamiento de programas 25 Digamos que la instrucciGn que inicia en 04B03H copia los contenidos de un byte en memoria al registro AL; el byte esti en el desplazamiento 0012H en el segmento de datos. Aqui estén tanto el, Codigo de maquina como el cédigo simbdlico para esta operacion nowzoo Mov AL, [00321 1 Localidad o4no3H La localidad de memoria 04B03H contiene l primer byte (AQ) de la instruccién que el procesador accesa. El segundo y tercer bytes contienen el valor del desplazamiento, en secuencia invertida de bytes (0012 se convierte en 1200). Para accesar el elemento de dato, el procesador determina su localidad de la direccién def segmento en el registro DS més el desplazamiento (0012H) en el operando de la instruccién. Ya que el DS contiene 04B1[0]H, la localidad actual del elemento de dato referenciado es: Direccién del seamento DS: 4BI0H Desplazamiento del segmento: — +0012H Direceién del dato: 4B22H Hagamos que la localidad 04B22H contenga 1BH. Entonces el procesador extrac el 1BH de la localidad 04B22H y la copia en el registra AL, como se muestra en la figura 2-3 Cuando el procesador busca cada byte de la instriccién, incrementa el registro IP de manera que éste contenga el desplazamiento (0016H) para la siguiente instruccidn. El procesador ahora esté preparado para ejecutar la siguiente instruccién, la cual se deriva otra vez de la direccién del segmenio enel CS (04APOH) mis el desplazamiento actual en el IP (0016H) —de hecho, O4BO6H, Una instruceidn también puede accesar mis de un byte ala vez. Por ejemplo, supongamos que una instruccién es almacenar los contenidos del registro AX (0567H) en dos bytes adyacentes en el segmema de datos empezanda en el desplazamiento OO12H. El cédigo simbélico es MOV [0012], AX. El operando [0012] entre corchetes (un operador de indice) indica una localidad de memoria para distinguirlo del simple mimero 12, El procesador carga los dos bytes en el AX en secuencia inversa de bytes como Comenide de los bytes: 7 os | Desplazamiento en el segmento de datos: 0012 0013, ‘Otra instruccién, MOV AX,[0012}, puede recuperar subsecuentemente esios bytes para copiarlos de Ja memoria de regreso al AX. La operacién invierte (y corrige) los bytes en el AX como 05 67 ‘Segmante oe tates Figura 2-3. Segmentos y desplazamientos 26 Requerimiontos de software de laPC — Capitula 2 REFERENCIAS A MEMORIA Y A REGISTROS Una caracteristica para obtener claridad en las instrucciones es ¢| usa de nombres de operandos, de nombres entre corchetes y de mimeros. En los ejemplos siguientes, WORDA esta definida como una palabra (dos bytes) en memoria: WoRDA DW ° sDefine una palabra Mov Ax, BK iMueve low contenido de Bx a AX mov AX, WORDA :Mueve los contenidos de WORDA a AX mov AX, 28 runve el valor 28 3 Ax now Ax, [8] ;Mueve los contenidos de la localidad especificads por BX Los corchetes en el cuarto ejempla definen un operador de indice que significa: wilizar una direecién de desplazamiento en el BX (combinada con la direccién del segmento en el DS, como 1DS:BX)-para tocalizar una palabra en memoria y mover su contenido al AX, Comparese el efecto de esta instruceién con aquella del primer ejemplo, 1a cual simplemente mueve los contenidas del BX al AX. PUNTOS CLAVE ‘+ Los tres componentes principales del DOS son 10,SYS, MSDOS,SYS y COMMAND.COM. + Al encender la computadora $e provoca una inicializacién, también Hamada “arrangue en frio”. El procesador introduce un estado de restauracidm, limpia todas las localidades de memoria poniéndolas en cero, realiza una verificacién de la paridad de la memoria y establece Jos registros CS e IP al punto de entrada del BIOS en ROM. + Los dos tipos de programas del DOS son .COM y .EXE. + Cuando usted solicita al DOS cargar un programa .EXE para su ejecucién, el DOS construye un PSP de 256 bytes (00H) en vn limite de pérrafo en memoria y almacena el programa inmediatamente después del PSP. Después carga la direccién del PSP en los registras DS y ES, carga la diréccién del segmento de cddigo en el CS, establece el IP al desplazamiento de la primera instruccién en el segmento de cédigo, carga la direccién de la pila en el 58 y establece el tamafio de la pila. Finalmente, el cargador transfiere el control al programa por ejecutarse. + El propésito de la pila es proporcionar un espacio para el almacenamiento temporal de direeciones y datos. Cada dato en la pila es una palabra (dos bytes) + El DOS define la pila para un programa .COM, mientras que para un programa .EXE se debe definir de manera explicita la pil + Cuando el procesador busca cada byte de una instruccidn, incrementa el regisiro IP de manera que el IP contenga él desplazamiento para la siguiente instruceisn. Pregumtas 2 PREGUNTAS 241. ;Cuales son las cinco funciones principales del DOS? 2.2, (,Cudles son las tres componenies principales del DOS y cuil es. propssito de cada tuno-de ellos? 2-3. ,Qué pasos realiza el sistema en una inicializacisn (arranque en frio)? 2-4. (a) {Qué drea de datos construye el DOS y almacena en frente de un médulo ejecutable, cuando el modulo es cargado para su ejecucién? (b) {CuAl es el tamafio de esta drea de datos? 2-5, ELDOS realiza ciertas operaciones cuando carga un programa .EXE para su ejecucién, Qué valores inicializa ef DOS (a) en los registeos CS e IP? (b) jen las registros SS y SP? (e} gen los registras DS yES? 2-6. (Cudl es el objetivo de la pila? 2-7, De qué forma se define Ia pila pars (a) un. programa .COM y (b) un programa .EXE? (Esto es, {quién 0 qué define ta pila?) 2-8. (a) {Cuil es el tama de cada entrada de la pila? (b) jin dénde se encvenira inicialmente la parte superior de la pila y c6mo es direccionada? 2.9, Durante la ejecucion de un programa, el CS contiene SA2B(0), el SS contiene SBS3{0), el IP contiene 52H y el SP contiene 48H. (Los valores se muestran en secuencia normal, no en secuencia invertda de bytes.) Calcule las direcciones de (a) la instrucciGm a ejecutarse y (b) Ia parte superior de a pls (Gocalidad actual), E1 DS contiene 5B24{0)] y una instruccién que mueve datos de-la memoria al AL €s ADAOI (donde AO significa “mowver"). Caleule la direccidn de memoria referenciada 210 CAPITULO 3 Ejecucion de instrucciones ‘OBJETIVO -Dar a conocer cémo introducir y ejecutar programas en la me~ moria INTRODUCCION Este capitulo utiliza un programa del DOS llamado DEBUG, que permite visualizar la memoria, introducir programas en ella y rastrear su ejecucién, El texto explica cémo se pueden introducir estos programas directamente en. la memoria en un segmento de cédigo y da una explicacion de cada paso ejecutado, Algunos lectores pueden tener acceso a depuradores sofisticados, como CODEVIEW © TurboDebugger; sin embargo, usaremos DEBUG, ya que es sencillo de usar y esti disponible en cualquier parte. En los ejercicios iniciales se inspeccionan los contenidos de areas particulares de la memo- ria. El primer programa de ejemplo utiliza datos “inmediatos™ definidos dentro de las instruccio- nes para catgar datos en registros y realizar aritmética, El segundo programa de ejemplo utiliza datos definidos de forma separada en el segmento de datos. El rastreo de emo se ejecutan estas instrucciones da una idea de la operaciOn de una computadora y la funcisn de los registras. Usted puede empezar sin el conocimiento previe de un lenguaje ensamblador o de uno de programacién. Todo lo que necesita es una IBM PC o compatible y un disco que contenga el sistema operative DOS. Ne obstante, asumimos que esti familiarizado con el arrangue de la computadora, manejo de discos flexibles y la seleccién de discos y archivos. El programa DEBUG 29 EL PROGRAMA DEBUG E] DOS viene con un programa llamado DEBUG que es utilizado para probar y depurar progra- mas ejecutables, Una caracteristica de DEBUG es que despliega todo el exdtigo del programa y los datos en formato hexadecimal, y cualquier date que se introduzca a ia memoria también estd en formato hexadecimal. Otra caracteristica es que DEBUG permite ejecutar un programa en modo de paso sencillo (un paso a la vez), de manera que se pueda ver el efecto de cada instruccién sobre las localidades de memoria y los registros. Comandos de DEBUG DEBUG proporciona un conjunto de comandos que permiten realizar diferentes operaciones iti- les, Los comandos que nos interesan en este momento son los sigitientes: Ensambiar instrucciones simbélicas y pasarlas a cédigo de miquina. Mostrar el contenido de un area de memoria Introducir datos en memoria, iniciando en una localidad especifica, Correr el programa ejecutable que se encuentra en memoria Nombrar un programa, Proceder o ejecutar un conjunic de instrucciones relacionadas. Salir de la sesién con DEBUG. Mostrar el concenide de uno o mas registras, Rastrear la ejecucién de una instruccién. “Descnsamblar” oddigo de miquina y pasarlo # codigo simbético Escribir 0 grabar un programa en disca BCAMOVZOMOy Reglas de los comandos de DEBUG Para sus propésitos, DEBUG no distingue entre letras minisculas-y maydsculas, de manera que se pueden introducir comandos de cualquier forma, También se introduee un espacio séla en donde sea necesario separar pardmetros en un comando. Los tres ejemplos siguientes utilizan cl coman- do D de DEBUG para mostrar la misma area de memoria, iniciando en el desplazamiento 200H en el segmento de datos (DS): Bb Ds+200 (comando en mayleculas, con un espacio en blanco después de #1) pps: 200 (comando en sayiisculas. con un espacio en blanco después de é1) dds-200 (comando @n sindsculas, sin espacio en blanco después de 61) Note que especifica segmentos y desplazamientos con dos puntos (:), en la forma segmento:desplazamiento. Ademés, DEBUG supone que todos los mimeros estén en formato hexadecimal. El despliegue de DEBUG El despliegue de DEBUG consiste en tres partes. A la izquierda esid la direccién hexadecimal del tiltimo byte de la izquierda que se despliega en la forma segmento:desplazamiento. El dea amplia del centro ¢s la representacién hexadecimal del rca desplegada. A la derecha esta la. representa cién en ASCII de los bytes que contienen caracteres desplegables, los cuales pueden ayudarlo a interpretar el area hexadecimal, En forma de diagrama tenemos: 30 Ejecucién de inst Capitulo 3 Pireccién | rooms om - wo Bt Rene wenni20 se OE eee x yoom:80 2 ceeeess OK “ Cada linea despliega 16 bytes de memoria. La direcciém de la izquierda se refiere sélo al ltimo byte de la izquierda, en la forma segmento:desplazamiento; puede contar atravesando la linea para determinar la posicién de cada byte. El drea de representacién hexadecimal muestra dos caracte~ res bexadecimales por cada byte, seguides por un espacio en blanco por legibilidad. Ademds, un guidn separa a los segundos ocho bytes de los primeros ocho, otra vex por legibilidad. Asi, si Usted necesita localizar el byte en el desplazamiento xx13H, inicie con xxlOH y cuente tres bytes sucesivos a la derecha, Este libro hace un uso considerable de DEBUG y explica en detalle sus comandes conforme se necesitan. El apéndice E proporciona una descripcién completa de los comandos de DEBUG. Inicio con DEBUG Para empezar con DEBUG, cologue el sistema en el directorio del disco duro que contenga DEBUG 0 bien inserte un disco flexible con e] DOS que contenga el DEBUG en la unidad por omisién, Para iniciar el programa, (eclee la palabra DEBUG y presione 1a tecla Enter. DEBUG debe cargarse del disco a la memoria. Cuando el indicador de DEBUG, un guién (.), aparezea en la pantalla, DEBUG esta listo para recibir sus comandas (esto es un guidn, aunque parezca el cursor). Ahora usemos DEBUG para curiosear por ls memoria VISUALIZACION DE LAS LOCALIDADES DE MEMORIA En nuestro primer ejercicio, usted usar DEBUG para ver el contenido de localidades selecciona- das de Ia memoria. El inico comando por el que estard interesado en este ejercicio es D (Display. el cual lista ocho Ifneas de 16 bytes cada una y muestra su representacién hexadecimal Yerificacién del equipo del sistema Primero veamos qué es lo que ha determinada el BIOS que tiene instalado su equipo. Una palabra del estado del equipo en el area de datos del BIOS, ofrece una indicacién rudimentaria de los dis- positivos instalados. Esta palabra esté en las localidades 410H-411H, que puede ver desde DEBUG por medio de una direceidin de dos partes: 40 para la direccidn del segmento (se sobrentiende el {timo cero) y 10 para el desplazamiento desde la direccién de! segmento. Lea la direceién 40:10 coma segmento 40{0]H mis un desplazamiento de 10H, Teclee de manera exacta lo siguiente: 40:19 [y presione 1a teela Eaterl El despliegue debe empezar con algo como esto: ouao:og10 63 46 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 comviérialos a binario: Visualizaci6n de las localidades de memoria at Bit Is 14 13 12 nm 1 9 8 7 6 5 4 3 Binrio: 0 1 09 © O TF 09 0 O FT 1oo 0 1 1 A continuacién est una explicacién del cédigo hexadecimal: BITS DISPOSITIVO 15,14 Niimero de puertos paralelos para impresora conectados = 1 (binario 01) 11-9 Niimero de puertos seriales conectados = 2 (binario 010) 7,6 ‘Nuimero de dispositivos de disco flexible = 2 (donde 00 = 1,01 = 2,10 =3 y 1L=4) 5.4 Mode inicial de video = 10 (donde 01 = 40 x 25 encolor, 10 = 80 x 1225 en color y 11 = 80 X12 25 monocromatico) 1 1 = coprocesador matemtico est4 presente o 1 = unidad de disco flexible esta presente Los bytes no citados no son usados, Puede permanecer en DEBUG para el siguiente ejercicio o introduzea Q para salir. ‘Verificacién del tamafio de Ia memoria El siguiente paso es examinar la cantidad de memoria que ef DOS “piensa” que tiene instalada. Dependienda del modelo de su computadora, el valor puede estar basado en interruptores internos puede indicar menos memoria de la que realmente csté instalada. El valor esté en el drea de ‘datos del BIOS en las localidades 413H y 414H. Teclee lo siguiente exactamente coma lo ve! 2 40:23 fy pregione Enter] Et despliegue debe empezar con algo como es sosa:cora . ee FOR Los primeros dos bytes mostrados en el desplazamiento 0013H son los kilobytes de memoria en hexadecimal, com los bytes en secuencia inverts. Aqui estén dos ejemplos que muestran hexade- scimaies en orden inverso, hexadecimales corregidos y el equivalente en decimal HEXADECIMAL INVERSO HEXADECIMAL CORREGIDO DECIMAL (K) op 02 02.00 512 80 02 02 80 640 ‘Verificacidn del ntimero de serie y de la nota de derechos reservados El mimero de serie de Ia. computadora est4 alojado en cl ROM de BIOS en la localidad FEOOOH, Para verlo, teclee D PRoO:D [y presione Rater] La pantalla debe mostrar un miimero de serie de siete digitos seguido, en méquinas convenciona- Jes, de una nota de derechos reservados. El nimero de serie se muestra como niimero hexadecimal, mientras que la nota de derechos reservados es ms reconocible en el drea ASCII a la derecha. La 32 Ejecucién de insirucciones Capitulo 3 nota de derechos reservados puede continuar pasando sobre lo que ya esté mostrado; para verla, basta con presionar D, seguida de la tecla Enter, VerificaciGn de la fecha en el ROM BIOS La fecha de fabricacién de su ROM BIOS inicia en la localidad FFFFSH, registrada come mm/ dd/aa. Para verla, teclee D PFFF:S [y presions Enter) El conocimiento de esta fecha puede ser wtil 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 esté la identificacin del modelo en la localidad FFFFEH, o FFFF:E. Aqui estén varias identificaciones de modelos conIco. MODELO FB PS/2 modelos 70 y 86 Fo 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, etcétera FE PC-XT (1982), portitil (1982) FF Primera IBM PC Ahora que ya sabe cOmo usar el comande para desplegar informacién, puede ver el conteni- do de cualquier iocalidad de almacenamiento. También puede avanzar por Is memoria con slo presionar D de forma repetida: DEBUG muestra de manera sucesiva ocho Ifneas, continuando a partir de la hima operacién D. ‘Cuando haya terminado de curiosear, introduzca Q (por Quit), para salir de DEBUG 0 continie con el ejercicio siguiente EJEMPLO I DE LENGUAJE DE MAQUINA: DATOS INMEDIATOS Ahora usemos DEBUG para introducir el primero de dos programas directamente en memoria y rastrear su ejecucién. Ambos programas ilustran un sencillo cédigo de lenguaje de maquina y cme aparece en el almacenamiento principal y tos efectos de su ejecucién. Para este propésito, empe- zaremos con el comando DEBUG E (Enter, introducir). Sea muy cuidadoso en su uso, ya que introducir datos incorrectos o en una localidad equivocada puede causar resultados impredecibles. No es probable que cause daftos, pero puede sorprenderse y perder datos que haya intraducido durante la sesién de DEBUG. El primer programa utiliza daias inmediaios, datos definidos como parte de una instruccidn, Mostramos el lenguaje de maquina en formato hexadecimal y para legibilidad en cédtigo simboli- co, junto con una explicacién. Para la primera insiruceidn, el eddigo simbélico es MOV AX0123, la cual mueve (0 copia) el valor 0123H al registro AX (no tiene que definir un valor inmediato en Ejempio | de lenguaje de maquina: datos inmediatos 33 secuencia inversa de byte). MOV es la instruccién, e1 registro AX es ¢l primer operando y el valor inmediato 0123H es el segundo operande. INSTRUCCION DE conico MAQUINA ‘SIMBOLICO EXPLICACION Baa30a MOV AK, 0123 Mover el valor 03238 a Ax. osasoo ABD Ax, 9025 Sumar el valor 0025 a Ax sane MOV Bx, AX Mover el contenide de AK a BX. oana ADD BX, AK Sumar el contenide de A a BE epee MOY Cx, Bx Mover el contenido de BX @ OX ance SB Cx, Ax Restar e1 contenido de AY del de Cx. 2uce SUB AK, AX Resuar Ax de AK (Limpiar AX) 80 nop No eperacion (no hacer nada). Puede haber notada que las instrucciones de maquina pueden tener uno, dos o tres bytes de longitud. El primer byte es la operacién real y cualesquiera otros bytes, si estén 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 méquina y avanza por cada instruccién, una después de otra, Al llegar a este punto no esperamos que tenga mucho sentido el eddigo de maquina, Por ejemplo, cn un caso €l cOdigo de méquina (el primer byte) para mover es BS hex y en otro caso el cédigo para mover es BB hex. (Cémo introducir instruceiones de programa Iniciamos este ejercicio como lo hicimos con él 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 Ia parte de lenguaje de méquina, pero no-€l c6digo simbdlico o la explicaciéa. Teclee el siguiente comando E (Enter), incluso los espacios en blanco en dénde se indican: B CS;1000 BB 23 01 05 25 00 [presions Enter) C5:100 indica la direccién de memoria inicial en la que los datos se almacenardn ~100H (256) bytes siguiendo al inicio del segmento de cédigo (la direccién de inicio usual para €l c6digo de maquina con DEBUG). El comando E hace que DEBUG almacene cada par de digitos hexadecimales en un byte de memoria, desde C5:100 hasta C5:105, El siguiente comando E almacena seis bytes, empezando en CS:106.a 107, 108, 109, 10A-y 108; E C8.106 wa Da 03 DE 6B CB [eeguido por Enter] El Ultimo comando E almacena cinco bytes, iniciando en CS:10C a 10D, IE, 10F y 110: BCS:10C 28 CB 2B CO 50 [sequido por Enter} ‘Si teclea un comando de manera incorrecta, sélo repitalo con los valores. correctos. Ejecucién de Instrucciones Capitulo 3 pesaicr CL 21Ci:0100 882301 7 AX=0123 BN=D000 DS=21C1 Esa21C1 21ei 0103 a52500 7 AKsO149 Bx=0000 Ds-21cl aang 1C1 Bich o108 T Akeo148 pxa0146 DS221C1 BS=21C1 2LCL 0108 0308 a AK-O148 Bx~0290 Ds=21c1_Eg-21¢2 21011910 @BCB t A048 BXROZIO Bge2ici #62101 wei oie 2ace t Axe0148 ax.0290 DSe2iC1 ES.23c1 2LC1:O108 2BCe T Ax-cou9 ax-0290 Ds-21¢1 gs-21¢1 zicl:9110 99 Figura 3-1 0000 Dx-0009 SP+PFEE $86210L_cS+21c1 1p-0100 Mov AK,0323, ©X-0008 Dx-0000 SPAFFEE S8=21C1_ CS=21C1 _TP=0103 ADD A, 0025. exe0005 Dx-0000 SP+FFEE 88-211 cS-21e1 IP=0106 Mov BEAK Cked000 Ox0000 SP PUNTOS CLAVE + Un comentario esté precedido por punto y coma ( Las palabras reservadas en lenguaje ensamblador son usadas para propésitos especiales, hajo condiciones especiales. + Un identificador es un nombre que se aplica a elementos en sus programas. Los dos tipos de identificadores son nombres, que se refieren a direcciones de datns, y etiquetas, que se refieren a la direccién de una instrucei6n. * Una operacién es usada, por io comiin, para definir dreas de datos y codificar instrucciones. ‘Un operando proporciona informacién para la informacién que acttia sobre é + Un programa consiste en uno o més segmentos, cada uno de los cuales: empieza en un limite de pirrafo. + La directiva ENDS finaliza cada segmento, ENDP termina cada procedimiento y END termina un programa, « La directiva ASSUME asocia los registros de segmentos CS, DS y SS con sus nombres de segmento apropiados. + Los programas .EXE (pero no los .COM) deben proporcionar al menos 32 palabras para el direceionamiemo de la pila. + Para un programa .EXE, por le general se inicializa el registro DS con la direccién de! segmento de datos. + Para las directivas simplificadas de segmentos, antes de definir algin segmemio, se inictaliza el modelo de memoria. Las opciones son SMALL (un segmento de cdigo y un segmento de datos), MEDIUM (cualquier nimero de segmentos de cédigo y un segmento de datos), ‘COMPACT (un segmento de cédigo y cualquier miimero de segmentos de datas) y LARGE (cualquier niimero de seementos de datos y de cédigo). + INT 21H, funcidn 4CH, es la instruccién estindar para la salida de programas + Los nombres de los elementos de datos deben ser sinicos y descriptives. Por ejemplo, un ‘elemento para el salario de un empleado podria ser SAL_EMP. + DB es el formato preferido para la definicién de cadenas de caracteres, ya que permite ccadenas de més de dos bytes de longitud y las convierte a la secuencia normal de izquierda a derecha. + Constantes decimales y binarias (hexadecimales) generan diferentes valores. Considere el ‘efecto de sumar ef 25 decimal en contra de sumar 25 hex: ADD AR.2S :Suma 25 ADD AK,25H 0 sSuma 37 70 Requerimientos de lenguaje ensamblader Capitulo 4 + DW, DD y DQ almacenan valores numéricos en cédigo objeto, con los bytes en orden inverso. ‘+ Los clementos DB son usados para procesar Ia mitad de registros (AL, BL, etc.), DW para registros completos (AX, BX. etc.), y DD para regisiros extendidos (EAX, EBX, etc.). Elementos numéricos mas largos necesitan de manejo especial PREGUNTAS rh teget . Seflale lus diferencias entre un compilador y un ensamblador . Qué es una palabra reservada enti lenguaje ensamblador? De dos ejemplos, . {Cudles son los dos tipos de identificadores? Determine cusiles de tos nombres siguientes son vitidos: (a) PC_AT: (b) $80: (¢) @S_Z: (@) 3487: (e) AX. {Cudles son las diferencias entre una directiva y gna instruccidn? . {Qué comandes hacen que el ensamblador (a) imprima un encaberade en la parte superior de tna ‘pagina en el listado de un programa y (b) salte a una mieva pagina? 47, {Cuil es el objetivo de cada uno de los tres segmentos descritos en este capitulo? 48, El formato de la directiva SEGMENT es nombre SEOMENT alineaciGn combinar ‘clase’ Explique el objetivo de (a) alineacién; (b) combinar; (c) ‘clase’, 4-9. (a) ,Cudl es el objetivo de-un procedimiento? (b) ;Cémo define et inicio y el final de un procedimiento? (c} {Cudndo definiria un procedimieato corso FAR y cuindo como NEAR? 4-10, Explique qué enunciados END particulares tratan la finalizacién de (a) un programa; (6) un rocedimienta: (c) un segment. 4-11, Establezca las diferencias entre Jos enuociados que finalizan un enssmblado y los eounciados que finalizan una ejecuciéa, 4-12, Dé los nombres STKSEG, DATSEG y CDSEG a tos segmentos de la pila, de los datas y del c6digo, respectivamente, y codifique el ASSUME necesaria, 4613, Considere la insirucein MOV AX 4CODH utilizada con INT 21H. (a) ,Qué hace Ia instruccién? (b) {Cull es la finalidad del 4C y ol OO? 4-14, Para las directivas simplificadas de segmentos, la directiva .MODEL proporciona los masleins TINY. SMALL, MEDIUM, COMPACT y LARGE. ;Bajo qué circunstancias se utilizaria cada uno de ‘estos modelos? 4-15, Dé las longitudes, en bytes, generadas por las siguientes directivas de datos: (a) DD; (b) DW; fc) DT; (4) DQ; ¢e) DB. 416, Defina una cadena de carscteres con nombre TITLE! que contenga la constante: RGB Electronics. 417, Defina los valores numéricos siguientes en elementos de datos FIELDA. a FIELDE, respectivamente: fa) Un elemento de cuatro bytes con el equivalente hexadecimal del 215 decimal. (b) Un elemento de un byte con ef equivalente: hexadecimal de! 35 decimal, Preguntas n (e) Un elemento de dos bytes con un valor no-definiso. (d) Un elemento de wn byte con el equivalente binario del 25 decimal {e} Un DW con tos valores consecutives 17, 19, 21, 26 y 31 4-18, Muesire el cédigo objeto hexadecimal generado por (a) DB: "24"; (&) DB 28. 419, Determine el cidigo objeto hexadecimal ensarmblado para (a) DB 28H; (b) DW 2845H; (6) PD: 28733AH; () DQ 28733AH. CAPITULO 5 Cémo ensamblar, enlazar y ejecutar un programa OBJETIVO ‘Analizar los pasos para ensamblar, enlazar y ejecutar un progra- ma en lenguaje ensamblador INTRODUCCION Jo explica el procedimiento para teclear un programa en lenguaje ensamblador y para imbélicas que codifica en lenguaje ensam- blador, son conocidas como el programa fuente. Se utiliza el programa ensamblador para traducir cl programa fuente en cédigo de miquina, conocido como el programa objeto. Por ultimo, se emplea un programa enlazador para completar el direccionamiento de maquina del programa objeto, generando un mddulo ejecutable. Las secciones sobre el ensamble explican cémo solicitar la ejecucién del programa ensam- blador, el cual prover de diagnésticos (incluyendo mensajes de error) y genera el programa objeto. También se explican los detalles del listado del ensamblador y, en términos generales, cémo el ensamblador procesa un programa fuente Las seceiones sobre el enlace explican c6mo solicitar Ia ejecucién del programa enlaza- dor de manera que pueda generar un médulo ejecutable, También son cxplicades los detalles del mape de enlace generado, asi como los diagnésticos, Por Ultimo, una seccién explica emo soli- citar Ja ejecucion de un médulo ¢jecutable, Cémo ensamblar un programa fuente 73 COMO PREPARAR UN PROGRAMA PARA SU EJECUCION La figura 4-2 sélo ilustr6-el e6digo fuente de un programa, todavia no en formato ejecutable. Para teclear este programa, se puede usar un programa editor, tal como el proporcionade con el DOS. En Jos ejemplos siguiemes de comandos DOS, sustinya lo apropiado para su sistema. También puede aumentar mucho la productividad cargando sus programas y archives en. un disco RAM (disco virtual), Llame a su programa editor, teclee los enunciados del programa en la figura 4-2 y al archivo resultante péngale por nombre POSASMI.ASM. ‘Aunque para ¢l ensamblador no es importante el espaciamiento, un programa seré mis egible si mantiene alineados por columnas y de manera consistente el nombre, operacién, operandas y comentarios. La mayaria de los editores tienen marcas de tabulacién eada acho posicianes para ‘facilitar ‘Una vez que ha introducido todas los enunciades del programa, revise el cddigo para ver si es correcto, La mayorfa de los editores tiene una facilidad para imprimir, pero si no la tiene, encicnda su impresora y utilice ¢] programa PRINT del DOS: alineacién de columnas. PRINT 1: POSASML ASM [Enter] Tal como esti, el programa es sélo un archivo de texto que no puede ejecutarse: primero debe ensamblarlo y enlazarlo, 1. El paso de ensamble consiste en la traducciéin del eédigo fuente en eddigo abjew y la gencracién de un archivo intermedio .OBJ (objeto), 0 médulo (en capitulos anteriores ya ha visto ejemplos de eddigo de maquina y de cédigo fuente). Una de las tareas del ensamblador es calcular el desplazamiento de cada elemento en el segmento de datos y de cada instruccién en el segmenta de eédigo. El ensamblador también crea un encabezado al frente del médulo .OBJ generado; parte del encabezado tiene informacién acerca de direcciones incompletas. El médulo .OBY atin no estd en forma ejecutable. 2. El paso de enlace implica convertir el médulo .OBJ en un mddulo de cédigo de méquina -EXE (cjecutable). Una de las tarcas del enlazador es combinar los programas ensamblados en forma separada en un médulo ejecutable. 3, El iltimo paso es cargar el programa para su ejecucién, Ya que el cargador conoce en. d6nde esté el programa a punto de ser cargado, puede completar las direcciones indicadas en el encabezado que estaban incompletas. El cargador desecha el eneabezado y crea un PSP inmediatamente antes del programa cargado en memoria. La figura $-1 proporeiona un diagrama de los pasos implicades al ensamblar, enlazar y ejecutar un programa. COMO ENSAMBLAR UN PROGRAMA FUENTE El programa ensamblador de Microsoft (hasta la version 5.x) ¢s MASM.EXE, mientras que el programa de Borland es TASM.EXE. El ensamblador de Microsoft por lo general utiliza el co- mando ML, pero también acepta MASM por compatibilidad con versiones anteriores. Puede teclear el comando para ejecutar MASM o TASM en una linea de comando 0 por medio de peticiones. Esta seccidn muestra cémo utilizar la linea de comando; véase en el apéndice D el métodg con indicacién. El formato general para un comando de linea para ensamblar un programa es: Cémo ensambiar, enlazar y ejecutar un programa Capitulo 5 Gena wn ogi uit ronmeninse (ABS) Enews st Deograma tent ae Ga nia al ropa (ome. an ch rae lao fete cara yaa Figura S-1 Pasos paca ensamblar, Segoe cenlazar y ejecutar MASH/TASM [opciones) fuente(,cbjeto) [,lietado] [,refcruzedes) + Opciones estipula caracieristicas como configuracién del nivel de mensajes de advertencia y se explican en el apénadice D. Ya que los valores por omisién del ensamblador por lo regular son los adecuados, rara vez necesitard utilizar opciones, + Fuente identifica el nombre del programa fuente, como POSASMI. El ensamblader asume la eXtensién .ASM, de modo que no necesita introducirla. Sino quiere aceptar la unidad de disco por omisién, también puede dar Ia especificacién de una unidad de disco. + Objeto estipala un archivo .OBY generado. La unidad, subdirectorio y nombre de archivo puede ser el mismo o diferente del fuente + Listado estipula un archivo .LST generado que contiene tamo el cédigo fuente como el La unidad, subdirectorio y nombre de archivo puede ser el mismo o diferente del fuente. Listado del ensamblador de las definiciones convencionales de segmentos 75 + Referwcadas genera un archivo de referencias cruzadas con los simbolos usados en el programa, que puode usar para un listado de referencias cruzadas. Para MASM, la extensi6n es CRF y para TASM la extension es .XRF. La tinidad, subdirectorio y nombre de archive puede ser el mismo o diferente del fuente. El nombre del archivo fuente siempre lo debe introducir, y por lo general solicita un archivo OBJ, que es necesario para enlazar un programa en forma ejecutable, Tal vez en algunas ocasio- rcs solicitard archivos .LST, en especial cuando quiers cxaminar el eédigo de maquina generado, Un archivo .CRF es stil para programas grandes en donde quiera ver qué instrucciones hacen referencia a qué datos. También la peticién de un CRF hace que el ensamblador genere nimeros de lineas para tos enunciados en ¢l archive .LST a las cuales el archive CRF se refiera. Secciones posteriores cubren en detalle los archivos .LST y .CRF Ejemplo 1: Especifique el archivo fuente, POSASM1, en la unidad Dy genere archivos objeto, de listado y de referencias cruzadas. $i el nombre de un archivo es el mismo que el del archivo fuente, no necesita repetirlo: basta con la especificacién de la unidad para solicitar un archivo: MASK /TASH D:POSRSML,D: ,Cr,D= Ejemplo 2: Sélo genere un archivo objeto. En este caso, puede omitir Ia referencia a los archivos de listado y de referencias cruzadas: sdlo introduzca el comando MASM/TASW A: POSASML,D: El ensamblador convierte sus enunciados fuente en cédigo de maquina y despliega, si hay, errores en la pantalla. Los errores comunes ineluyen un nombre que viola las convenciones para ja formacién de nombres, una operaci6n que se escribié de forma incorrecta (como MOVE en lugar de MOV) y un operando con un nombre que no est definide. Existen alrededor de 100 mensajes de error, explicados en ei manual del ensamblador. Ya que hay muchas versiones dife- rentes de cnsamblador, no trataremos de listar los ervores. El ensamiblador intenta corregir algu- nos errores, pero de cualquier forma usted debe volver a cargar su editor, corregir el programa fuente ASM y reensamblarlo, LISTADO DEL ENSAMBLADOR DE LAS DEFINICIONES CONVENCIONALES DE SEGMENTOS LLa figura 5-2 proporciona el listado que produce el ensamblador con el nombre POSASMI.LST. Por la entrada PAGE, el ancho de la linea es. de 132 posiciones. Si su impresora puede comprimir Ja linea de impresién, entonces también puede imprimir este listade. Muchas impresoras de im- pacts tienen un interruptor que fuerza la impresién comprimida, o podria solicitar al editor 0 procesador de textos imprimir en modo comprimido, Otra manera es usar ¢l comando MODE del DOS; encienda su impresora, teclee el comando MODE LPT:132,6 para 132 caracteres por linea y seis lineas por pulgada y utilice PRINT del DOS. Note cémo han actuado las directivas PAGE y TITLE en la parte superior de! listado. Ninguna de las directivas, incluyenda SEGMENT, PROC, ASSUME y END, generan cédigo de maquina, ya que slo san mensajes al ensamblador. En el extremo izquierdo esta el nimero de cada linea. La segunda columma muestra, en hexadecimal, las direcciones de los campos de datos y de las instrucciones, La tercera columna muestra el cédigo de maquina traducido en formato hexadecimal. A la derecha se encuentra el cédigo fuente original, 76 Cémo ensamblar, enlazar y sjecutar un programa Capitulo & POSASHI (EXE) Operaciones de mover y sumar Page a-1 1 page 60,132, 2 TrTue —POSASWL' {EIE) operaciones de mover y sumar 3 a aay 7 = 4 ovae BTACKSG SEGMENT PARA STACK ‘Stack’ 5 0000 goz0t ow 32 DUPLO) € 9000 3 1 a 3 op4s eTAcKse ENDS 10 : - 31 sooo DRTASG SEGMENT PARA ‘Data 32 0009 OOeA 13 0002 0970 14 908 9900 as 0006 17 9900 ak 0800 us 20 0000 BB 21 0053 BE DB. 2 23 0005 An 9000 B 34 0908 93 96 opd2 35 0000 AB 9004 36 OODF BB $c0 27 0012 cD 21 2e one 25 0016 30 FLD Dat 350 PLDB Det 135 FLDC be ? DATASG ENDS GODESG SEGMENT PARA ‘Cede! BEGIN © PROC. FAR ASSUME $5: STACKSG, DS ;DATASG, CB: CODESS Mov AK,OATASG " jgatablecer la direccisn de mov Bsa } DATASG en'el registra OS Mov AX, LDA Mover 0250 a AX R ADD AK, FLOB Sumar 0125 a Al Mov FLOC,AK Almacenar suma en FLOC MOY AK,ACDON «Salida a DOS Int 21H Brome = ENDP iFin de procedimiente copesa = ENDS 1Pin de segmente EXD BEGIN iFin de programa Segments and Groups cong... parass | | stacesa’ 2) 1 ‘Synbole eee FUDA ee FUOB poe tt WU serLmoe || Align Combine Claas PARA oN *cone* PARA NONE “DATA PARA STACK “STACK! Type. Value Acer F'BROC 0000, COUESG «= Length = 00nd . 54. L WORD 9900 DATASS. Sif) p worp caez PATASS Si. TE WORD 9904 DATASG ce TEE | OLDZR Cll mxr posaem St Df mmer S20 27 Source Lines 27 Total. Lines 15 Syubols 0 Warning! Error: 0 Severe Errors Figura 5-2 Programa ensambiado con segmentos convencionales Para cada uno de los tres segmentos, ia directiva SEGMENT avisa al ensamblador alinee el segmento a una diteceién que sea divisible entre 10 hex —el enunciado mismo no genera cOdigo de maquina. De forma tedrica, cada direccién de segmento inicia en Ia localidad con desplaza- Listado del ensamblador de las definiciones convencionales de segmentos 7 mienio 0000, En realidad, cuando el programa inicia su ¢jecucidin, el segmento es almacenado en memoria de acuerdo con una direccidn que el DOS carga en el registro del segmenta y es despla- zado cero bytes a partir de esa direccisn, Note que la pila, el segmento de dates y el segmento de cédiga son dreas separadas, cada una con su caracieristico valor de desplazamierto para dalos € instrucciones. Segmento de Ia pila El segmento de la pila contiene una directiva DW (definir palabra) que define 32 palabras, que genera cada una un valor cero designado con (0). Esta definicién de 32 palabras ¢s un tamafo realista para una pila, ya que un programa grande puede necesitar muchas interrupciones para lamadas de entrada/salida a subprogramas, y todas implican el uso de la pila. El segmento de Ja pila termina en el desplazamiento 0040H, que es el equivalente al valor decimal 64 (32 palabras x 2 bytes). Si el tamaio de la pila es demasiado pequefo para contener a todas los elememias que se guardan en clla, ni el ensamblador ni el enlazador le advertiran de esto, y 1a ejecucién del progra- ma puede sufrir una detencién total de una manera impredecible, Segmento de datos El programa define un segmento de dstos, DATASG, con tres valores definidos, toxios en formato DW (definir palabra). FLDA define una palabra (dos bytes) inicializada con el valor decimal 250, que el ensamblador traduce 3 OOF AH (mostrado a la izquierda). FLDB define una palabra inicializada ‘con. el valor decimal 125, ensamblada como 007DH. Los valores reales. almacenados de estas dos constantes son FAOO y 7D00, respectivamente, lo cual puede verificar con DEBUG. FLDC es codificada como una DW con ? en el operando para definir una palabra con una constante no inicializada. Segmenta de cédigo El programa define un segmento de cédigo, CODESG, que contiene et cédigo del programa ejecutable, todo en un procedimienta (PROC). ‘Tres enunciados establecen el direccionamiento del segmento de datos: wow aot, DATASDG booa aE De wow Ds, Ax + La directiva ASSUME relaciona DATASG con el registra DS. Note que el programa no requiere él registro ES, pero como practica usual, algunos programadores lo definen ASSUME slo proporciona informacién al ensamblador, lo que no genera cédiga de maquina. + La primera instruccién MOV “almacena” DATASG en el registro AX. Ahora bien, en realidad una instruccién no puede almacenar un segmento en un registro —e] ensamblador s6lo-reconoce un intento.de cargar la direccién de DATASG. Observe cl cédigo.de maquina ala izquierda: BS —~R. Los cuatro guiones significan que en este punto el ensamblador no puede determinar la direccién de DATASG; el sistema determina esta direccién s6lo cuando sl programa objeto esta enlazado y cargado para su ejecucién. Ya que el cargador del sistema puede ubicar un programa en cualquier parte de la memoria, el ensamblador deja abierta la 76 ‘Céme ensamblar, enlazar y ejecutar un programa Capitulo direceién e indica este hecho con una R; el programa cargadot DOS es para reemplazar (0. reubicar) las direcciones incompletas con las reales. + La segunda instruceién MOV mueve el contenide del registre AX al regisiro DS. Ya que no existe wna instrucei6n vélida para mover de forma directa de la memoris al registro DS, tiene que codificar dos instrucciones para inicializar ef DS. El cargador DOS inicializa de forma automética el 8S y el CS cuando carga un programa para ejecucién, pero es su responsabilidad inicializar el DS y, si se necesita, el ES Para las ditectivas simplificadas de segmentos, la inicializaciGn del DS es como sigue: MOV Ax, edates Mov. Ds, AK ‘Aunque todo estas acciones parecen ser demasiado complicadas, en este momento en reall dad no tiene que entenderlo, Todos los programas en este libro utilizan una definicién e inicislizacién esténdar, y usted s6lo tiene que reproducir el cédigo para cada uno de sus programas, Para este fin, almacene en disco una estructura de un programa ensamblado, y para cada programa nuevo que quiera crear, COPIE Ia estructura del programa en un archivo con su nombre correcta y use su editor para completar las instrucciones adicionales La primera instruccién después de inicializar el DS es MOV AX, FLDA, que empieza en la localidad con desplazamiento O05 y genera el cOdigo de maquina A1 0000. El espacio entre Al (la operacién) y 0000 (el operando) es slo por legibilidad, La instrucelén siguiente es ADD AX, FLDB que empieza en a localidad con desplazamiento 0008 y genera cuatro bytes de c6digo de maquina. En este ejemplo, la longitud de las instrucciones de méquina son dos, tres y cuatro bytes El tiltimo enunciado en el programa, END, contiene ¢] operando BEGIN, que relaciona al nombre del PROC en el desplazamiento 0000, Esta es la localidad en el segmento de cédigo donde el cargador de programa transfiere el control para la ejecucién. ‘A continuacién del listado del programa estin una tabla de segmentos y grupos y una tabla de simbolos. Tabla de segmentas y grupos La primera tabla al final del listado del ensamblador muestra todos los grupos y segmentos defini- dos. Note que los segmentos no estén listades en el mismo orden en que fueron codificados; el ensamblador los tista en orden alfabético por nombre (este programa no tiene grupos, que es un tema posterior). La tabla proporciona la longitud en bytes de cada segmento, la alineacim (ambos son parrafos), el tipo combinar y la clase. El ensamblador ha convertido los nombres de clase a maytsculas, Tabla de simbolos La segunda tabla proporciona los nombres de Jos campos de datos en el segmento de datos (FLDA, FLDB y FLDC) y las etiquetas aplicadas a instrucciones en el segmemo de eddigo, Para BEGIN (la tnica entrada en el ejemplo), Type F PROC significa procedimiento Icjano. La columna vale da el desplazamiento para el inicio del segmento de nombres, ctiquetas y procedimientos. La columna cncabezada con Attr (atributo) proporciona el segmento en el que el elemento esté. definide. Ensamblador de dos pasadas 79 El apéndice D explica todas las opciones de estas tablas, Para que el ensamblador omita las tablas, cadifique la epeiin /N después del comando MASM, esto es, MASM/N. En cuanto a las diltimas tres entradas, @CPU identifica al procesador, @FILENAME da cl nombre del programa y @VERSION muestra la versiGn del ensamblador en la forma n.nn. LISTADO ENSAMBLADOR DE DIRECTIVAS SIMPLIFICADAS DE SEGMENTOS: La figura 4-3 mostré eémo codificar un programa que usa las directivas simplificadas de segmen. tos, La figura 5-3 proporciona el listado ensamblado de ese programa. La primera parte de la tabla de simbolos bajo “Segments and Groups” muestra los tres segmentos renombrados por ¢1 ensamblador y listados de forma alfabética: + _DATA, con una longitud de 6 bytes » STACK, con una longitud de 40H (64 bytes) + TEXT, para el segmento de cédigo, con una longitud de 14H (20 bytes) Bajo el titulo “Symbols* hay nombres definidos.en el programa o nombres por omisién. Las directivas simplificadas de segmentos proporcionan varias equivalencias predefinidas, que empie~ zan con el simbolo @ y que usted tiene libertad de referenciar en un programa. Igual que @datos ellos son: @CODE Igualada al nombre del segmento de oédigo _TEXT @CODESIZE Establece a cero para los modelos pequefio y mediano @cPU Modelo de procesador @DATASIZE Establece a cero para los modelos pequefio y mediano- @FILENAME Nombre del programa @VERSION —_Versién del ensamblador (n.nn) Puede usar @cédigo y @datos en enunciados ASSUME y ejecutables, tal como MOV AX.@datos. . ENSAMBLADOR DE DOS PASADAS Muchos ensambladores dan dos pasadas al programa fuente a fin de resolver referencias hacia adelante (o posteriores) a direcciones que atin no se encuentran en el programa. Durante la pasada 1, el ensamblador lee todo el cédigo fuente y construye una tabla de simbolos de nombres y etique- tas usadas en el programa, esto es, nombres de campos de datos y etiquetas del programa y sus localidades relativas (desplazamiento} dentro del segmento. Usted puede ver tal tabla de simbolos a continuacién del programa ensamblado en la figura 5-3, en donde los desplazamientos de FLDA, FLDB y FLDC son 0000, 0002 y 0004 bytes, respectivamente. Aunque el programa no define eti- quetas de instrucciones, ellas aparecerian en el segmento de cddigo con sus propios desplazamien- tos. La pasada I determina fa cantidad de cédigo que es generado por cada instruccion. MASM inicia la generacién del cédigo objeto en la pasada 1, mientras que TASM lo hace en la pasada 2. Durante la pasada 2, cl ensamblador usa la tabla de simbalos que construyé en la pasada 1. Ahora que “conoce” la longitud y posiciones relativas de cada campo de datos ¢ instruccién, Cémo ensamblar, enlazar y ejecutar un programa Capitulo 5 POSAgM2 (EXE) Operaciones de mover y gumar Page 1-2 page 60,232 TITLE —-POSASM2 (EXE) STACK 54 1Se define le pila SATA 1Se definen datos oaoa ogA FuDA M50 0002 cov FLOR OM A25 ones 008 Pope 188 define cesnente de cOdigo ace ame ® 0a00 Be --- R Rkedata — jEatablecer la direceiéa de oa03 BE De wow DSLAK } DATASG en el registro DS ogos An ooo & Nov AK, PLA Mover 0250 a AK aos 03 G6 Oo0z R ROD AXLPLOB uma 0128 2 AK ogee as pod mov PUbC.Ae = Almacenar suma en PLDC aor Bs 4co0 MOY AK,ACOOH Salida a nos oaa2 ep an mr alt oat secre EDP iFin de procedimiente ED BEGIN irin de programs Seqnents and Groups wane Length Align Combine Cl DOROUP. ono SOMA SS. 2s coaee” = wo PUBL = BATAY Brack 20211. 2 1 lomo | Fame 0 GTACR. © ‘STACK amr Dit Teale = WORD. PUBLIC = “CODE symbole: wane Tyre value actrr BEGIN |e P'PRoc 008 JEXr bength = oid LDA : : Lwoep 9900, BATA, rug : Lword 9002 “DATA, mpg tle worn gece Zp ecoue : Text _vexr ecopestze 211)! mr ery ‘wexr = u01m eoaragize” DD) 2) eer evrnemaee | | : TEXT = posawna 0 Warning Errore 4 Severe Errors Figura 5-3 Programa ensamblado con directivas simplificadas de segmentos puede completar el cédigo objeto para cada instruccién. Después produce, si se solieita, los diferentes archivos objeto (.OBJ), de listado (.LST) y de referencias cruzadas (REF) Un problema potencial en la pasada 1 es una referencia hacia adelanie: Una instruccién de salto en el segmenio de cSdig puede referenciar a una etiqueta, pero ¢! ensamblador ain no ha encontrado su definicién. MASM construye el e6digo objeto con base em lo que supone es la longitud de cada instruccién generada en lenguaje de méquina. Si existen diferencias entre la pasada 1 y la pasada 2, con respecto a la Tongitud de una instruccién, MASM envia un mensaje de Cémo enlazar un programa objeto a1 error “Phase error between passes”. Tales errores son relativamente raros, y si aparecen usted debe buscar su causa y corregirla. Desde la versidn 6.0, MASM hace un manejo mis eficaz de la longitud de las instrucciones, dando tantas pasadas al archivo como sean necesarias, COMO ENLAZAR UN PROGRAMA OBJETO Una vez que su programa queda sin mensajes de error, ¢l siguiente paso ex enlazar ¢l médulo objeto, POSASM!.OBJ, que fue producide por el ensamblador y que contiene sélo cédigo de miquina, El enlazador realiza las funciones siguientes: «Si se pide, combina més de un médulo ensamblado de forma separada en un programa gjecutable, como dos o més programas en ensamblador o un programa en ensamblador con un programa en C. + Genera un médulo .EXE y lo inicializa con instrucciones especiales para facilitar su subsecuente carga para ejecucion, ‘Una vez que ha enlazado uno mis médulos .OBJ en un médulo .EXE, puede ejecutar el médulo EXE cualquier ntimero de veces. Pero siempre que necesite realizar un cambio al progra- ma, debe corregir el programa fuente, ensamblarlo en otro médulo .OBY y enlazar el modulo OBJ en un médulo -EXE. Aunque al principio estos pasos no sean por completo claros, encon- tard que con un poco de experiencia se vuelven automiticos. Puede convertir muchos programas .EXE a programas .COM, Para detalles, véase el cap(- malo 7 La versi6n del enlazador de Microsoft es LINK, mientras que la de Borland es TLINK. Puede teclear LINK 0 TLINK en una linea de comando o por media de peticiones (a partir de MASM 6.0, ¢! comando ML proporciona tanto ¢l ensamble como el enlace). Esta seccién muestra como enlazar usando la linea de comando; para el uso de peticiones véase el apéndice D. La linea de comando para enlazar es LINK/TLIME archobj, archeje, + Archoby identifica al archivo objeto generado por el ensamblador, El enlazador supone la extensién .OBJ, de modo que no tiene que introducirla. Unidad, subdirectorio y nombre de archivo pueden ser iguales o diferentes del archivo fuente. + Archeje estipula que se genere un archiva .EXE, Unidad, subdirectorio y nombre de archivo pueden ser iguales o diferentes del archive fuente * Archmapa estipula que se genere un archivo con extensién .MAP que indica la ubicacién relativa y el tamafo de cada segmento y cualquier error que LINK haya encontrado. Un error comin es el fallo al definir un segmento de pila. Introducir CON (por consola) le indica al enlazador que muestre el mapa en la pantalla (en lugar de escribirlo en tn disco) de forma que se pueda ver el mapa inmediatamemte para los errores. « Archbibi estipula la opcion de bibliotecas, que no necesita én estos primeros pasos de programaciéa en lenguaje ensamblador. ‘Céma ensamblar, enlazar y ejecutar un programa Capitulo § Este ejemplo enlaza el archivo objeto POSASM|.OBJ que fue generado por un ensamble amerior. Al enlazador se le pide escribir el archivo .EXE en la unidad D, desplegar el mapa e ignorar la opcitn de biblioteca: LEME D:POSASHA,D;, CON Si el nombre del archive es el mismo que el del fuente, no necesita repetirlo: basta con la iden- -acién de la unidad para indicar la peticién del archivo. El apéndice D porporciona otras opeiones. Mapa del enlace para el primer programa Para el programa POSASM1, LINK produce este mapa: START = STOP LENGTH «NAME = CLASS OOCH «ODDS «ODOR | STACKSG © STACK Donec © OOBKSH © ODEHEATASG = BATA, copse# © ooDEa © OLEH CODESS cane Punto de entrada del programa en 0003;0000 + La pila es el primer segmento ¢ inicia con un desplazamiemto de cero bytes desde el inicio dei programa. Como estd definida como 32 palabras, es de 64 bytes, como lo indica su longitud (40H). + El segmento de datos inicia en el siguieme limite de pirrafo, desplazamiento 40H + El segmento de cédigo inicia en el siguiente limite de paérrafo, desplazamiento SOH. Algunos ensambladores acomodan los segmentos en orden alfabética + El punto de entrada al programa es 0005:0000, que esté en la forma “relativa (no absolutay segmento:desplazamiento”, se refiere a la direccién de la primera instruccién ejecutable En realidad, la direcciém relativa de inicio es en el segment 5{0], desplazamiento de 0 bytes, que corresponde al Limite del segmento en SOH. El programa cargador utiliza este valor cuando carga el programa en memoria para ejecucién. Eh esta etapa el nico error que puede encontrar es introducir de manera errénea los nom- bres de los archivos, La solucién es reiniciar el comando de enlace. Mapa del enlace para el segundo programa EI mapa de enlace para el segundo programa, que utiliza las directivas simplificadas de segmen tos, muestra una configuracién un poco diferente a la del programa anterior. Primero, el ensamblador ha reacomodade de manera fisica los segmentos en orden alfabético, y segundo, los segmentos sucesivos estin alineados por I{mites de palabras (no de parrafo): START STOP LENGTH NAME CLASS coodge 00013 Ola TEXT cube ooo1gH pon1sH oat SATA DATA 0020H | ODOSFH = OADM STACK STACK. Punto de entrada del programa en 0000:0000 Gémo ejecutar un programa 83 + El segmento de cédigo ahora ¢s el primer segmento ¢ inicia en un desplazamiema de cero bytes desde el inicio del programa. + El segmento de datos inicia en el siguiente limite de palabra, desplazamiento 14H. + La pila inicia en el siguiente limite de palabra, desplazamiento 20H. + El punto de entrada al programa ahora s 0000:0000, lo cual significa que la ubicacién relativa del segmento de cédigo inicia en el segmento 0, desplazamiento 0. COMO EJECUTAR UN PROGRAMA. ‘Una vez ensamblado y enlazado un programa, ahora puede (jal fin!) ejecutarlo. Si el archivo EXE esté en la unidad por omisién, podria usar el DOS para cargarlo para su ejecucidn introdu. siendo: Si omite La exiensidn del archivo, el DOS supone que ¢¢ EXE (0 .COM)}. Sin embargo, ya que este programa no produce resultados visibles, se sugiere que lo ejecute con DEBUG y avance paso Por paso en su ejecucién con comandos de rastreo (T). Teclee lo siguiente, incluyendo la exten- sién EXE: DEBUG D:POSASML.EXE DEBUG carga ¢l médulo del programa .EXE y muestra su indicacién (un guién). Para ver el segmento de la pila, teclee D ssio La pila contiene slo ceros ya que fue la forma de inicializarla. Para ver el segmento de datos, teclee D ps:a La operacién muestra tres elementos de datos FA 00 7D 00 00 00, con los bytes de cada palabra en orden inverso. Para ver el segmento de oddigo, teclee Best Compare el e6digo de maquina mostrado con el del segmento de cédigo en ¢l listado def ensam- blado: Ba----aEDeALO000 .,. En este caso, el listado del ensamblado no muestra de manera precisa el cédigo de maquina, ya ‘que el ensamblador no conoce la direccidn del operando de la primera instruccién. Abora puede determinar esta direccidn examinando el cédigo desplegado. Teclee R para ver los registros, y rastree la ejecucién del programa con sucesivos comandos TA medida que avance por el programa, fijese en el contenido de los registros. Cuando legue ala tltima instruccién, puede utilizar L para volver a cargar y correr el programa o Q para salir de la sesién con DEBUG. a4 Céma ensamblar, enlazar y sjecutar un programa Capitulo § LISTADO DE REFERENCIAS CRUZADAS: El ensamblador genera un archive opcional .CRF o .XRF que puede usar para producir un listado de referencias cruzadas de los identificadores o simbolos del programa. Sin embargo, atin tiene usted que convertir este archivo a un archivo de referencias cruzadas, ordenado de manera ade- cuada, Esta funcién la realiza un programa en cl disco del ensamblador: CREF para Microsoft o CREF para Borland. Puede teclear CREF 0 TCREF con una linea de comando © por media de indicaciones, Esta seccidn utiliza una linea de comando; véase el apéndice D para usar indicacio- nes, El comando para convertir el archivo de referencias cruzadas es CREE /TCREE + archivorefx identifica el archivo de referencias cruzadas generado por el ensamblador. El programa supone la extensién, asi que no necesita inteoducirla. También puede dar una identificacién de la unidad de disco + archivorey estipula que se genere un archivo REF. Unidad, subdirectorio y nombre de archivo pueden ser iguales o diferentes de! archivo fuente. El listado Lafigura 5-4 contiene el listado de referencias cruzadas producido por CREF para el programa de la figura 5-2. Los simbolos en la primera columna estén en orden aifabético. Los nimeros en Ia segunda columna, mostrados como nf, indican la linea en que estén definidos los simbolos en el archivo .LST. Los mimeros a la derecha de esta columna son los niimeros de linea en donde los simbolos estin referenciados. Por ejemplo, CODESG esté definido en Ia linea 17 y se hace rele rencia.a él en las lineas 19 y 29, FLDC esti definido en la linea 14 y referenciado en Ia linea 25-+, en donde “+” significa que su valor es Modificado en esta linea. POAASMI (EXE) Operaciones de mover y sunar Symbol Cross-Reference {W definition, + modification) ecro ns avension oe Bem ee te cone... congsd | Celi i blame as ae DATA... . hh BATASG : Dill lane as ae ae Figura $-4 Tabla de referencias cruzadas Diagnéstico de errores Archivos generados ‘Al ensamblar varios programas puede usar mucho espacio en disco. Es posible, de manera segura, borrar los archives .OBJ, CRF y .LST, Guarde los programas fuente .ASM en caso de cambios futuros y también guarde los archivos .EXE para la ejecucién del programa, DIAGNOSTICO DE ERRORES El ensamblador proporciona un diagnéstico de cualquier error de programacién que viole sus reglas, El programa en la figura 5-5 ese! mismo que el de la figura 5-2, salvo que tiene insertados varios errores intencionales con fines ilustratives. El programa fue corrido con MASM; TASM genera un listado parecido de errores. Aquf estén los crrores, como se codificaron: UNE, EXPLICACION ir) FLDC necesita un operando. 19 ASSUME no relaciona el $5 a STACKSG, aunque el ensamblador no ha detectado esta omisién, 20 DATSEG debe ser escrito coma DATASG. 1 page £0,132 2 TITLE —_-POSASMS' (EXE) Zlustra errores de ensamblade 4 2000 STACKSG SEGMENT PARA STACK ‘Stack’ 5 0000 a020L De 32 DUP (Oy é ‘do00 7 1 a 9 oa40 stages uw re 11 cone ATASG SEGMENT FARA ‘Data’ 42 0000 DOFA PLEA. be 250 23 0902 9070 FLEB ow 128 44 0008 FLDC ow poSaam3 ASML): error A2027; Operand expected 45 0004 DATASG | ENDS 16 ra - 17 0009 GoDESG “SEGMENT PARA ' Code" 48 sano BEGIN © PROC FAR 19 ASSUME C5:CONBSG,DS:DATASG 290000 AL apoo MOV AK, DATEEG' Direccién de BATASG POSaan3.ASWIL7} 1 error A2009: Symbol not defined: DATSEG 210003” a8 DD mov DKA } en el registro Bg 22 a Moy AS, PLDA iMover 0250 = AX PoSasn3.ASMI20): error Az009: Symbol mot defined: AS 24-0005 93 06 902 & 40D AK, FLDB sSumar 0125 a AK 35 0009 A3 900 0 MOV PLBD,AK idmacenar guna en FLOC pOSecs3 .ASM{22): error A2009: Symbol not defined: PLOD a6 000C° BB acco Moy AK, 4cocH +Salida a pos 37 000F cD 2a INT 21H 28 0011 BEGIN ENDP pOSasn3 .ASM(35); error AZ00S: Phase error between passes 35 00! ‘cODESG —BKDS, 30 EXD = BEGIN Figura 5-5 Diagndstico del ensamblado 2 23 25 28 ‘Céme ensamblar, enlazar y ejecutar un programa Capitulo § DX debe ser cadificade como DS, aunque el ensamblador no sabe que éste es un error, AS debe se codificade como AX. FLDD debe se codificado como FLDC. La correecién de los otros errores hard que este diagnéstico desaparezca. El Gltimo mensaje de error, “Phase error between passes”, ocurre cuando las direcciones generadas en la pasada | difieren de aquellas en la pasada 2 en un ensamblador de dos pasadas. Para aislar un error desconacido, utilice 1a opeién /D para que MASM liste un archivo para la pasada | y otro archivo para la pasada 2, y compare los desplazamientos, PUNTOS CLAVE + MASM y TASM proporcionan una linea de comando para ensamblar, incluyendo (al menos) cl nomibre del programa fuente, MASM también proporciona indicaciones para introducir opciones. + Elensamblador convierte un programa fuente a un archivo .OBJ y genera archivos opcionales para el listado y las referencias cruzadas, + La tabla de segmentos y grupos que sigue a un listado de ensamblador muestra los segmentos ¥¥ grupos definidas en el programa. La tabla de simbolos muestra todos los simbolos (nombres de datos y etiquetas de instruccién). + El enlazador (LINK 0 TLINK) convierte un archivo .OBJ en un archivo .EXE. Usted puede enlazar usando una linea de comando o por medio de indicaciones (sélo LINK). + Las directivas simplificadas de segmentos generan los nombres _DATA parael segmento de datos, STACK para cl segmento de la pila y_TEXT para el segmento de cédigo. También ‘generan varias equivalencias predefinidas. + El programa CREF (o TCREF) produce un util listado de referencias cruzadas. PREGUNTAS SL, Couifique la linea de comandos: para ensamblar el programa fuente llamado DISCOUNT. ASM con archivos .LST, .OBJ y .CRF. Suponga que ef programa fuente y e! ensamblador estén en la unidad C, 5.2. Codifique la linea de comando en LINK o TLINK para enlazar DISCOUNT.OBI de la pregunta $-1 5-3, Codifique fos comandos para DISCOUNT EXE de la pregunta 5-2 para hacer lo siguiente: (a) ejecueién por medio de DEBUG: () ejecuci6n directa desde et DOS. $4, Dat el objetivo de cada uno de los archives siguientes: (a) archivo ASM: (b) archivo «CRP: (c) archivo .LST; (4) archivo .EXE; (e) archive .OBI; (1) archive MAP. 5:5, Codifique las dos instrucciones para inicil x el registro DS, Supongs que el nombre del segment de datos es DATSEG. 5-6, Escriba un programa cn ensarmblador usando las definiciones coavencionales de segmentos para lo siguiente: (a} Mover el valor inmediato 40 hex al registro AL; (b) recorrer el contenido.de AL un bit hacia la izquierda (codigo SHL AL.1); (c) mover el valor inmediato 22-hex al BL; (d)-multiplicar AL por BL (cixligo MUL BL). Recuerde las instrucciones necesarias para finalizar la ejecuciéa de un Pr luna estructura de programa y Usitice DEBUG para rastrear y verificar el segmemto de eSdigo y los re ama. El programa no necesita definir o inicializar el segmento de datos. Asegiirese de COPIAR su editor para desarrollar el programa. Ensimblelo y enlicelo. Preguntas a7 5-7. Corrija el programa de la pregunta 5-6 para directivas simplificadas de segmestos. Enséablelo y cenlicelo, y compare el cédigo objeto, las tablas de simbolos y el mapa de enlace con aquellos del programa original 5-8. Agregue un segmento de datos al programa de la pregunta 5-6, para lo siguiente: + Defina un elementa de un byte (DB) Hamado FIELDA con 40 hex y otto con nombre FIELDB con 22 hex. + Defina un elemento de dos bytes (DW) con nombre FIELDC sin constante, + Mueva ef contenido de FIELDA al registro AL, y reodrralo un bit a la izquierda, ‘+ Multiplique ef AL por FIELDB (o6digo MUL FIELDB), + Mueva ef producto en-el AX a FIELDC. Ensamble, enlace y utilice DEBUG para prabar et programa 5-9, Corrija el programa de la pregunta $-8 para directivas simplificadas de sepmentos, Ensimblelo y enlécelo, y compare el cOdigo objeto, las tablas de simbolos y el mapa de enlace com aquetios del programa original. CAPITULO 6 Instrucciones y direccionamiento del procesador OBJETIVO Proporcionar los fundamentos del conjunto de instrucciones de len- guaje ensamblador y los requisitos para el direccionamiento de datos. INTRODUCCION Este capitulo imroduce el conjunto de instrucciones del procesador y enseguida describe tos formatos biisicos de direccionamiento que son usados en el resto del libro. Formalmente, las instrucciones que se tratan en este capftulo son MOV, MOVSX, MOVZX, XCHNG, LEA, INC, DEC e INT. También se puede definir como un valor inmediato una constante en el operando de una instruccion. Por iltimo, el capitulo explica la alineacién de direccitin y el prefijo que invalida el segmento, EL CONJUNTO DE INSTRUCCIONES DEL PROCESADOR La siguiente es una lista de las instrucciones para la familia de procesadores 8086, clasificadas por categorias. Aunque la lista parece enorme, muchas de las instrucciones rara vez se necesitan, Aritméticas » ADC: Suma con acarreos + ADD; Suma nimeros binarios El conjunto de instrucciones del procesador « DEC: Decrementa en 1 + DIV; Divisidn sin signo « IDIV: Divide con signo (enteros) + IMUL: Multiplica con signo (enteros) + INC: Incrementa en 1 + MUL: Multiplica sin signa + NEG: Negacién + SBB: Resta con cl bil prestado + SUB: Resta valores binarios Conversién ASCII-BCD: + AAA: Ajuste ASCII despaés de sumar » AAD: Ajuste ASCII antes de dividir + AAM: Ajuste ASCII después de multiplicar + AAS; Ajuste ASCII después de restar = DAA: Ajuste decimal después de sumar * DAS: Ajuste decimal despues de restar Corrimiento de bit + RCL: Rota a la izquierda a través del acarreo + RCR: Rota a la derecha a través del acarreo + ROL: Rota a la izquierda » ROR: Rota a la derecha * SAL: Corrimiento algebraico a la izquierda + SAR: Corrimiento algebraico a ta derecha + SHL: Corrimiento légico a la izquierda + SHR: Corrimiento légico a la derecha + SHLD/SHRD: Corrimiento en doble precision (80386 y posteriores) Comparacién + BSFIBSR: Exploracién de bit (80386 y posteriores) » BT/BTC/BTR/BTS: Prueba bit (80386 y posteriores) = CMP: Compara + CMPS: Compara cadenas de caracteres + TEST: Prueba bits ‘Transferencia de datos * LDS; Carga el registro del segmento de daios + LEA: Carga una direccién efectiva Instrusciones y direecionamienta dol procesador + LES: Carga el registro de segmento extra + LODS: Carga una cadena + LSS: Carga el registro del segmente de la pila * MOV: Mueve datos + MOVS; Mueve cadenas + MOVSX: Mueve con signo-extendido + MOVZX; Mueve con cero-extendido + STOS: Almacena una cadena + XCHG; Intercambia * XLAT: Traduce Operaciones con banderas CLC: Limpia la bandera de acarreo * CLD: Limpia la bandera de direccién + CLI: Limpia la bandera de interrupeién + CMC: Complements la bandera de acarreo + LAHF: Carga AH de las banderas + POPF: Remueve banderas de Ja + PUSHF: Agrega banderas a la pila + SAHE; Almacena el contenido de AH en las banderas + STC: Establece 1a bandera de acarreo + STD; Establece la bandera de direccisn + STI: Establece 1a bandera de interrupcién Entrada/Salida + IN; Introduce un byte 0 una palabra + OUT: Sac un byte 0 una palabra Operaciones légicas + AND: Conjunei6a l6gica (y) + NOT: Negacién légica (n0) + OR: Disyuncién logica (o) + XOR: Disyuncign exclusiva Cielos + LOOP; Repetir el ciclo hasta que se complete + LOOPE/LOOPZ: Repetir el ciclo mientras sea igual/mientras sea cero Capitulo 6 + LOOPNE/LOOPNZ: Repetir el ciclo mientras no sea igual/mientras no sea cero E1 conjunto de instruccicnas del procesador Control del procesador + ESC: Escape » HLT: Introduce un estado de deteneién + LOCK: Bloquea el bus + NOP: No operar + WAIT: Pone al procesador en estado de espera Operaciones con la pil, + POP: Remueve una palabra de la pila + POPA: Remueve todos los registros generales (80286 y pasteriores) + PUSH: Agrega a la pila + PUSHA: Agrega todos los registros generales (80286 y posteriores) ‘Operaciones con cadenas + CMPS: Compara cadenas + LODS: Carga cadena + MOVS: Mueve cadena + REP: Repite una cadena + REPE/REPZ: Repive mientras sea igual/mientras sea cera + REPNE/REPNZ; Repite mientras no sea igual/mientras no sea cero + SCAS: Explora una cadena + STOS: Almacena una cadena ‘Transferencia (condicional) + INTO: Interrumpe si hay desbordamiento « JA/INBE: Bifurca (salta) si es mayor o salta si no es menor o igual + TAEVINB: Salta sies mayor @ igual o salta si no es menor + JB/JNAE: Salta si es menor o salta si no es mayor o igual + IBE/INA: Salta si es menor o igual o salta si no ¢s mayor + ICIINC: Salta si hay acarreo o salta si no hay acarreo + JCXZ; Salta si CX es cero + JE/IZ: Salta si es igual o salta si es cero + JG/INLE: Salta si es mayor o salta si no es menor o igual + JGE/INL: Salta si es mayor o igual 0 salta si no es menor + ILJINGE; Salta si es menor o salta si no es mayor o igual + JLEVING: Saita si es menor o igual o salta si no es mayor + JNE/INZ: Salta si no es igual o salta si no es cero 92 Instrucciones y direccionamiento del procesador Capitulo & + SNP/JPO: Salta si no hay paridad o salta si la paridad es impar + JO/JNO; Salta si hay desbordamiento o salta si no hay desbordamiento + IP/IPE: Salta si bay paridad o salta si la paridad es par + BS/INS: Salta si el signo es negativo o salta si el signo es positive ‘Transferencia (incondicional) + CALL: Llama a un procedimiento INT; Interrupeién + IRET: Inierrupcién de regreso + IMP: Salto incondicionat + RET: Regreso + RETN/RETF: Regreso cercano o regreso lejano. ‘Conversién de tipo + CBW: Convierte byte a palabra + CDQ: Convierte palabra doble a palabra cuédruple (80386 y pasteriores) + CWD: Convierte palabra a palabra doble + CWDE: Convierte una palabra a una palabra doble extendida OPERANDOS ‘Un operando es una fuente de datos para una instruccién, Algunas instrucciones, como CLC y RET, no necesitan un operanda, mientras que otras pueden tener una o dos operandos, Donde existan dos operandos, él segundo es el fuente, que contiene ya sea datos que s¢rdn cntregados (inmediatos) o bien la direccién (de un regisiro o en memoria) de los datos. El dato fuente no es eambiado por la operacidn. El primer operando es el destino, que eomicne datos en un registro o en memoria y que sera procesado. Examinemos ahora cémo los operandos pueden afectar el direccionamiento de datos. ‘Operandos registro Para este tipo, el registro proporciona el nombre de alguno de los registros de 8, 16 0 32 hits Dependiendo de 1a instruccién, el registro puede codificarse en ¢l primero o segundo operandos, 9 en ambos: WORD DW 7 MOV CX,WORDX Registro en el primer cperando MOV WORD, BX Registro en el segundo operando MOV cL, Alt sRegistros en amboa operandos Operandos 93 El procesamiento de datos entre registros ¢s el tipo de operaciin més rapida, ya que no existe referencia a memoria, Operandos inmediatos En formato inmediato, el segundo operando contiene un valor constante © una expresién constan- te. El campo destino en el primer operando define la longitud de los datos y puede ser un registro 6 una localidad de memoria. A continuacién se dan algunos ejemplos: swe DBO? ABD CK, 12 Suma 22 al Cx Mov SAVE, 25 jMueve 25 a SAVE ‘Una seccién posterior estudia los operandos con mayor detalle, Operandos de memoria directa En este formato, uno de los operandos hace referencia a una localidad de memoria y el otro a un registro, Note que no existen instrucciones que permite que ambos operandos sean direcciones de memoria. Para ef direccionamiento de datos en memoria, el registro DS es el registro por omi: sidn. Aqui estin algunos ejemplos: wonpa om 9 MOY Ax, WORD iCarga WORDL en AX Apb byTEL, cL ;Suma Ch a 8YTEI MOV BY,DS: [3550] ;Mueve una palabra desde la nenoria al desplazamiento 35BOH INC BYTE PTR (2FOH] jtncrementa el byte en el desplazamiente 2F0% LLos ultimes dos ejemplos utilizan corchetes como especificadores de indice para indicar una referencia a memoria (el desplazamiento 8 combinado con la direceién en el DS). La omision de los corchetes, como en MOV BX,38BOH, indica un valor inmediato: note la gran diferencia. El Gitimo ejemplo inerementa el byte en memoria en el desplazamiento 2FOH (el desplaza- miento combinado con la direccién DS), Ya que el operando sélo indica la localidad inicial de memoria, aqui necesitamos el modificador BYTE PTR para definir la longitad. A continuacién, un elemento de dato actiia coma una direccién de desplazamiento en un operando de instruceidn: TABLEX DE 25 DUP{?? MO AL,TABLEX(4] ;Obtiene el cuarto byte de TABLEX MOY AL, FABLEX+4 ;La misma operacién Instrucciones y direccionamiento del pracesador Capitulo 6 El primer MOV usa un especificador de indice para accesar el cuarto byte de TABLEX. El segundo MOV usa un operador + para tener exactamente el mismo efecto. Operandos de memoria indirecta Direccionamienta indirecto es una técnica sofisticada que hace use de las capacidades de la compu- tadora para el direccionamiento de segmento:desplazamiento. Los registras utilizados para este ‘propésito son BX, DI, SI'y BP, codificados con.corchetes como un operador de fndice. BX, Diy SI estdn asociados con el registro DS come DS:BX, DS:DI y DS:SI, para procesamiento de datos ‘en el segmento de datos. El BX, DI y SI estan asociados con el registro DS como DS:BX, DS:DI -y DS:SI para procesamiento de datos en el segmento de datos, El BP esti asociado con el registro SS como SS:BP, para manejo de datos en fa pila, lo cual haremos en el capitulo 23 cuando llamemos subprogramas y pasemos parimetros. ‘Cuando el primer operando contiene una direccidn indirecta, el segundo se refiere a un registro o a un valor inmediato; cuando él segundo operando contiene una direccién indirecta, el primero se refiere a un registro. Una direccién indirecta tal como [BX] le indica al ensaniblador que la direccién de memoria a usar estard en el registro BX cuando el programa la ejecute poste- riormente. Enel ejemplo siguiente, el primer MOV inicializa el BX com la direccion con desplazamien- to de DATAFLD. El segundo MOV utiliza la direcein en el BX para almacenar cera en la localidad de memoria a la cual apunta, en este caso, DATAFLD: DATAFLD DR? MOU BX, OFFSET DATAPFLD ;Carga BX con el desplazaniento wov (Bx), 0 sMueve 0 a DATAFLD El efecto de los dos MOV es el mismo que codificar MOV DATAFLD,0, aunque el uso de direccionamiento indexado por lo comdn no es tan trivial. La siguiente instruccidn mueve cero a la lovalidad que se encuentra dos bytes después de DATAFLD: Mov [BK62),0 Mueve @ & DATAFLD+2 ‘También puede combinar registros en un direccionamiento indirecto, Asi [BX +51] significa la direcciGn en BX més la diteccién en el SI. ‘Note que cualquier referencia en corchetes a los registros BX, Dl, SI o BP implican un operando indirecto, y él sistema trata los contenidos de los registros como una desplazamiento de direeeién, A continuacién estin algunos ejemplos mis: mov BL, [Bx] #08 +Bx SUB BYTE PTR [DI], [81] ;08-p1 y os:81 mov (BP), AL J88-BP Desplazamiento de direccién. Este método utiliza un desplazamiento de direccién para un operando, El cédigo siguiente mueve el contenido del CL a TABLEX (una tabla 26 bytes); exactamente en donde TABLEX est determinada por el contenido de DI cuando el programa est en ejecucion: La instrucei6n MOW 95 TABLEX DB 2S _DUP(2 MOV TABLEX(DT}, CL Indexactén en el 80386 y procesadores posteriores. Estos procesadores permiten una di- reccién que sea generada a partir de cualquier combinaciém de uno o més registros generales, un desplazamiento y un factor de escala (1, 2, 4 u 8) asociado con el contenide de uno de tos registros. Por ejemplo, la instruccién Mov EBX, [ECR*2+ESPea] mueve tna direccién al EBX, la direccién consiste en el contenido de (el ECX por 2) mis el contenido de (el ESP mas 4). LA INSTRUCCION MOV La instrucci6n MOV transfiere (esto es, copia) los datos referenciados por la direccién del segun- do operando a !a direccién del primer operando, El campo que se envia permanece sin cambios. Los operandos que hacen referencia a memoria 0 registros deben coincidir en tamafo (es deci ambos deben ser bytes, ambos deben ser palabras o ambos deben ser palabras dobles). El formato general para MOV es wow | (registro/memoria}, (registro/mesoria/ineediato) Aqui estén cuatro ejemplos de operaciones MOV validas, por categorias, dados los siguien- tes elementos de datos: BYTEVAL DB ? WORDVAL DW ? 1, Mueve datos inmediatos Mov Ax, 25 fInmediate a registro MOV BYTEVAL, 25 iTnmediato a menoria, directo MOV WORDVAL (BXI, 25 rInmediate a memoria, indirect 2, Mueve registros. Mov #AX, Bex iegistre a registro MOV BS ,ax pRagistra a registro 4e segmento MOV BYTEVAL, BH ;itegigtro a memoria, directo mov [sz], ax iRegistre a memoria, indirecto 96 Instrucciones y direccionamiento del procesador Capitulo 6 3. Mueve memoria directa Mow Bi, BYTEVAL Menoria a regiatro, directo MOV AX,MORDVAL [nx] Memoria a registro, indicecto 4. Mueve registro de segmento mov Ax.D5 ‘Registro de seguento a restetre MOV WORDVAL, 05 Registro de sequento a memoria Puede mover a un registro un byte (MOV AH, BYTEVAL), una palabra (MOV AX, WORDWAL} una palabra doble (MOV EAX,DWORDVAL), El operando sélo afecta la parte del registro referenciado: por ejemplo, mover un byte al AH no afecta el AL. Las operaciones MOV que no son permitidas son de memoria a memoria (tenga esto en mente}, inmediato a regisiro de segmento y de registro de segmento a registro de segmento. Para manejar estas operaciones, tiene que codificar mus de una instruccién, INSTRUCCIONES PARA MOVER Y LLENAR Una limitacién de la instrucein MOV es que el destino debe ser de la misma longitud que el fuemte, tal como un byte a byte y una palabra a una palabra. En el 80386 y procesadores posterio- res, las instrucciones MOVSX y MOVZX (mover y Henar) facilitan la transferencia de datos de un byte o palabra fueme 2 una palabra o palabra doble de destino. Aqui esté el formato general de MOVSX y MOVZX: Teciquetal | movsx/mowux | {registro/memoria), (reg MOVSX, para uso con valores aritméticos con signo, mueve un byte o palabra a una palabra © palabra doble de destino y lena con el bit de signo (e] dltimo bit a la izquierda del origen) tos bits de més.a la izquierda del destino. MOVZX, para uso con valores numéricos sin signo, mueve un byte o palabra a una palabra. palabra doble de destino y Ilena con bits cero los bits de mis a Ia izquierda del destino. Como ejemplo, considere mover un byte con 1011 0000 una palabra; el resultado en la palabra destino depende: de la elecci6n de 1a instruccién: MOVSx: 1131 122, 1013 coe Movex: Goo goo 2012 9008 ‘Aqui estin algunos ejemplos del uso de MOVSX y MOVZX WORDVAL DH MOVSX AX, EYTEVAL ;Byte a palabra Cperandos inmediatos. 97 MOVSX BAX, WORDVAL Palabra a palabra dable MOVZx WORDVAL, AH jByte a palabra MOVEX EAX, WORDVAL ;Palabra a palabra deble Los capitulos 8 y 13 cubren con todo detalle los datos con y sin signo. OPERANDOS INMEDIATOS En el ejemplo siguiente de un operando inmediato, la instruccidn mueve la constante inmediata 0123H al registro AX. El cédigo de tres bytes para esta instruccién es BR2301, en donde B8 significa “mueve un valor inmediato al registro AX” y los dos bytes siguientes contienen el valor (2301H, en orden inverso de bytes). Muchas instrucciones estipulan dos operandos; el primero puede ser un registro o localidad de memoria y ef segundo puede ser una constante inmediata. El uso de un operando inmediato da procesamiento més eficiente que definir una constante numérica en el segmento de datos y referenciarla en el operando del MOV, como en el ejemplo siguiente: Segnento de datos: AMT. DW 1228 Define AMT? come palabra Segnente de cédigo; MOV AX, AMT2 Mtueve a AMTL a A Longitud de los operandos inmediatos La longitud de una constante inmediata no puede exceder la longitud definida por el primer ‘operando, En el ejemplo siguiente, no valide, el operando es de dos bytes, pero el registro AL. es de slo un byte: Mov AL,0123H rlongitud as valida Sin embargo, si un operando inmediato es més corto que el operando receptor, como en ABD AX,25H —pLongitud valida ‘el ensamblador expande el operando a dos bytes, O025H, y almacena el cfdigo objeto como 2500H. E1 80386 y procesadores posteriores. permiten operandos inmediatos de cuatro bytes (pale bra doble), tal como en MOV EAX,12345678H © Muove palabra doble Formatos inmediatos Una constante inmediata puede estar en cualquier formato definido vélido, Aqui estin algunos ejempios: 98 instrucciones y direccionamiento dal procesador Capitulo 6 PAGE 60,432 TITLE POSINNED! (EXE) Sjeuploa de operandos inmediatos (Coded for assembly only, NOF for execution) MODEL SMALL STACK 64 1S define 1s pila DATA }Se definen lon dace FLOR DB 2 Fuso ; 306 coon BEGIN PROC PAR MOV AK, 275, sMover innediato ADD AK 125 [Suma insediste suB AK, 200, jResta innediata MOV ERX, 0 iMover inmediats (#0386) ADD BK, 20H jSuma tamedsata (hex) END Figura €-1 Opersciones inmediaus Hexadecimal: 01231 Decimal: 292 (que el ensamblador convierte en 0123H) Binarior 31901000128 (que convierte en 01230) MOY, ADD y SUB son tres de las muchas instrucciones que permiten operancios inmed tos. La figura 6-1 da ejemplos de estas instrucciones. La directiva 386 permite al ensamblador reconocer Ia referencia al registro EBX. No se necesita un 80386 0 procesador posterir para ensamblar este enunciado, pero si para ejecutarlo. Ya que el ejemplo no tiene La intencién de ejecutarse, no se define una pila ni se inicializa el registro DS. Procesar elementos més largos que la capacidad de un registro e tratada en, capitulo posteriores. LA INSTRUCCION XCHG La instruccién XCHG realize otro tipo de transferencia de datos, pero en lugar de copiar tos datos, de una localidad a otra, XCHG intercambia los datos. El formato general para XCHG es (eegleee/ieamareee] [etigueta:i] xCHG] [registro/senori Operaciones vilidas con XCHG implican intercambio de datos entre dos registros y entre un registro y la memoria. Aqui estén ejemplos: woRD OM > HONG AL, AH vintereanbia los contentdes de los dos registros XONG AX, MORDE ;Intercanbia los contenidos del registro y 1a menoria Instrucciones de movimiento extandide 9 LA INSTRUCCION LEA La instruecién LEA es util para inicializar un registro con una direccién de desplazamiento. De hecho, un nombre mas descriptive para esta instruccién seria “Load Offset Address, carga una ireccién de desplazamiento”. El formato general para LEA es Tetiqueca:l | Bh | [registre/menoria} Un uso comin de LEA es para inicializar un desplazamiento en el registro BX, DI o SI para indexar una direccién de memoria, Haremos mucho de esto a lo largo de este libro. Aqui estd un ejemplo: DATABLEDS 20 DUP (7) SAVEYTEDB 7 LEA UX, BATASLE Carga la dizecsidn del desplazamients Mov EAVBYTE, [K) ;Mueve @1 primer byte de DATABLE Una operacién equivalente a LEA o MOV con desplazamiento, se codifica ast: Mov BX, OPESRT DATABLK Carga 1a direceién del desplazamiente LAS INSTRUCCIONES INC ¥ DEC INC y DEC:son instrucciones adecuadas para aumemtar y disminuir en 1 los contenidos de regis- tros y localidades de memoria. El formato general para INC y DEC es fetiqueta:| | INc/oBc | {registro /mamoria) Note que esas instrucciones slo necesitan de un operando, Dependiendo del resultado, la opera~ cin apaga o prende tas banderas OF, SF y ZF, a las que las instrucciones de salto: condicional ‘pueden verificar para menos, cero o mis. INSTRUCCIONES DE MOVIMIENTO EXTENDIDO ‘Los programas anteriores mavieron datos inmediatos a un registro, movieron datos de una locali- dad de memoria definida a un registro, movieron contenidos de registros a memoria y movieron el contenido de un registro a otro, En todos los casos, la longitud de los datos estaba limitada a uno © dos bytes y ninguna operacién movié datos de un area de memoria directamente a otra rea de memoria, Esta seccién explica cémo mover datos que exceden los dos bytes, Otro método, el uso de instrucciones de cadenas de earacteres, es estudiado en el capitulo 12. En el programa de la figura 6-2, el segmento de datos contiene dos campos de nueve bytes definidos como NAME! y NAME2. El objetivo del programa es mover el contenido de NAMEI a NAME2;

También podría gustarte

  • Objetivos de Los Cursos de Tesis
    Objetivos de Los Cursos de Tesis
    Documento33 páginas
    Objetivos de Los Cursos de Tesis
    Jean Carlo Canevello
    Aún no hay calificaciones
  • Taller Metodologia Agil 01
    Taller Metodologia Agil 01
    Documento3 páginas
    Taller Metodologia Agil 01
    Jean Carlo Canevello
    Aún no hay calificaciones
  • Semana10 Memoria03
    Semana10 Memoria03
    Documento20 páginas
    Semana10 Memoria03
    Jean Carlo Canevello
    Aún no hay calificaciones
  • Clase04 SMC N Aleatorios
    Clase04 SMC N Aleatorios
    Documento40 páginas
    Clase04 SMC N Aleatorios
    Jean Carlo Canevello
    Aún no hay calificaciones
  • Foro de Redacción Colaborativa.
    Foro de Redacción Colaborativa.
    Documento1 página
    Foro de Redacción Colaborativa.
    Jean Carlo Canevello
    Aún no hay calificaciones
  • Informe APEI Sobre Usabilidad
    Informe APEI Sobre Usabilidad
    Documento74 páginas
    Informe APEI Sobre Usabilidad
    Logisman. Custodia Documental
    Aún no hay calificaciones
  • Ensamblador
    Ensamblador
    Documento35 páginas
    Ensamblador
    Carlos Andres Islas Maldonado
    Aún no hay calificaciones
  • E10 CicloUp 12
    E10 CicloUp 12
    Documento12 páginas
    E10 CicloUp 12
    Jean Carlo Canevello
    Aún no hay calificaciones
  • Ensamblador
    Ensamblador
    Documento35 páginas
    Ensamblador
    Carlos Andres Islas Maldonado
    Aún no hay calificaciones
  • Curso OO Con UML
    Curso OO Con UML
    Documento213 páginas
    Curso OO Con UML
    Jean Carlo Canevello
    Aún no hay calificaciones
  • E5 Micro13 2
    E5 Micro13 2
    Documento6 páginas
    E5 Micro13 2
    Jean Carlo Canevello
    Aún no hay calificaciones
  • E5 PLAs13 2
    E5 PLAs13 2
    Documento27 páginas
    E5 PLAs13 2
    Jean Carlo Canevello
    Aún no hay calificaciones
  • SDF
    SDF
    Documento1 página
    SDF
    Jean Carlo Canevello
    Aún no hay calificaciones
  • Pruebas Funcionales
    Pruebas Funcionales
    Documento6 páginas
    Pruebas Funcionales
    Julio Chavez
    Aún no hay calificaciones
  • Examenes2011 1
    Examenes2011 1
    Documento1 página
    Examenes2011 1
    joseph2701
    Aún no hay calificaciones