La utilidad DEBUG includa en los sistemas MS-DOS, es una herramienta para
depuracin de programas muy interesante ue permite desensam!lar los mdulos y, adem"s, e#ecutar programas paso a paso, $iendo las modi%icaciones ue su%ren los registros y !anderas& Se trata de un programa menos comple#o, cmodo y potente ue depuradores de cdigo como 'ur!o De!ugger (de Borland) o *ode$ie+ (Microso%t), pero en algunos casos es m"s ,til& -eremos ahora los principales comandos del DEBUG, los cuales tam!i.n son admitidos en su mayora por *ode$ie+, por lo ue el tiempo in$ertido en aprenderlos ser" ,til no slo para conocer el cl"sico y mtico DEBUG& Sinta/is general0 DEBUG 1programa&e/t 1par"metros2 2 Los programas pueden ser de tipo E3E o *OM4 en el caso de los primeros se les cargar" ya montados y con los registros iniciali5ados, listos para su e#ecucin& Se pueden cargar otros %icheros de cualuier e/tensin o simplemente entrar en el programa sin cargar ning,n %ichero& 6l entrar, aparecer" el prompt particular del DEBUG0 un guin (-)& Entonces se pueden teclear rdenes ue constar"n generalmente de una sola letra& La mayora de las mismas admiten par"metros, ue normalmente ir"n separados por comas& Estos par"metos pueden ser n,meros he/adecimales de hasta dos o cuatro dgitos, registros y, adem"s0 - *adenas de caracteres0 Encerradas entre comillas simples o do!les& El te/to puede a su $e5 encerrar %ragmentos entrecomillados, empleando comillas distintas a las m"s e/teriores& E#emplo0 7*adena de caracteres7, 7Otra 8cadena8 m"s7, 8*urso de 79:9;78 - Direcciones0 <ueden e/presarse con sus correspondientes $alores num.ricos o !ien apoy"ndose en alg,n registro de segmento, aunue el o%%set siempre ser" num.rico0 =E>?06D@=, *S0=::, ES0=>6* - Aangos0 Son dos direcciones separadas por una coma4 o !ien una direccin, la letra 8L8 y un $alor num.rico ue indica el n,mero de !ytes a partir de la direccin& - Listas0 Son secuencias de !ytes yBo cadenas separadas por comas0 6*, 7'e/to de e#emplo7, :D, :6, 8C8 El DEBUG del MS-DOS D&: posee una ayuda in$oca!le con el comando E, en la ue se resumen las principales rdenes& 6 continuacin se listan las m"s interesantes0 * Q (Fuit)0 permite a!andonar el programa y $ol$er al DOS& * D 1GdireccinH 1num!ytes22 (dump)0 $isuali5a el contenido de la memoria& SIMDEB permite adem"s $isuali5arla en pala!ras (DJ), do!les pala!ras (DD), coma %lotante &&& * A 1GdireccinH2 (assem!le)0 permite ensam!lar a partir de *S0K< si no se indica una direccin concreta& Se admiten las directi$as DB y DJ del ensam!lador& Las instrucciones ue reuieran indicar un registro de segmento, con DEBUG hay ue ponerlas en una sola lnea& <or e#emplo0 * E GdireccinH 1GlistaH2 (enter)0 permite consultar y modi%icar la memoria, !yte a !yte& <or e#emplo, con E @?: =,@,? se introduciran los !ytes =, @ y ? a partir de DS0@?:& Si no se indica GlistaH, se $isuali5ar" la memoria !yte a !yte, pudi.ndose modi%icar los !ytes deseados, a$an5ar al siguiente (!arra espaciadora) o retroceder al anterior (signo -)& <ara aca!ar se pulsa AE'UAL& * U 1GdireccionH 1GrangoH22 (unassem!le)0 desensam!la la memoria& *omo e#emplos $"lidos0 U ES0=::, U E:::0=>M: &&& si se indica rango, DEBUG desensam!lar" ese n,mero de !ytes y SIMDEB ese n,mero de lneas& <or de%ecto se emplea *S0 como registro de segmento& * R 1GregistroH2 (register)0 permite $isuali5ar y modi%icar el $alor de los registros& <or e#emplo, si se e#ecuta la orden 8rip8, se solicitar" un nue$o $alor para K<4 con AN se muestran los %lags y se permite modi%icar alguno0 Flag Activo Borrado Des!ordamiento O- L- Direccin DL ($) U< (O) Knterrupcin EK DK Signo LG (G:) <L (H:) *ero PA (Q:) LP (RQ:) 6carreo au/iliar 6* L6 <aridad <E (par) <O (impar) 6carreo *I L* * G 1QGdireccinH 1,GdireccinH,&&&22 (go)0 e#ecuta cdigo desde *S0K< (a menos ue se indiue una direccin concreta)& Si se tra!a#a so!re memoria AOM no de!e indicarse la segunda direccin& <ara ue el %lu#o del programa se detenga en la @S direccin o posteriores de!e pasar necesariamente por ella(s)& Se puede indicar hasta =: direcciones donde de!e detenerse& * T 1G$ecesH2 (trace)0 Aastrea la e#ecucin de una instruccin, e#ecuta una instruccin del programa (a partir de *S0K<) mostrando a continuacin el estado de los registros y la siguiente instruccin& E#ecutar '=: eui$aldra a e#ecutar =; $eces el comando '& Si la instruccin es *6LL o KL', se e#ecutar" como tal introduci.ndose en la su!rutina o ser$idor de interrupciones correspondiente * P 1G$ecesH2 (proceed)0 similar al comando ', pero al encontrarse un *6LL o KL' lo e#ecuta de golpe sin entrar en su interior * N Gespeci%icacionT%icheroH (name)0 se asigna un nom!re al programa ue est" siendo creado o modi%icado& Se puede indicar la trayectoria de directorios& * L 1GdireccinH2 (load)0 carga el %ichero de nom!re indicado con el comando L& Si es e#ecuta!le lo prepara adecuadamente para su inmediata e#ecucin& En B30*3 ueda depositado el tamaUo del %ichero (B3Q: para %icheros de menos de ;M V!)& <or de%ecto, la direccin es *S0=::h& * L GdireccinH GunidadH GprimerTsectorH GnumTsectoresH (load)0 carga sectores de la unidad :, =, &&& (6, B, &&&) a memoria& Se trata de sectores lgicos del DOS y no los sectores %sicos de la BKOS& Las $ersiones antiguas de SIMDEB dan errores en particiones de m"s de ?@ M!& * W 1GdireccinH2 (+rite)0 gra!a el contenido de una 5ona de memoria a disco& Si no se indica la direccin, se gra!a desde *S0=::h hasta *S0=::hWn,meroT!ytes4 el n,mero de !ytes se indica en B30*3 (no es una direccin segmentada sino un $alor de ?@ !its)& Si se trata de un E3E no se permitir" gra!arlo (para modi%icarlos, hay ue renom!rarles para cam!iarles la e/tensin, aunue de esta manera no ser"n montados al cargarlos)& * W GdireccinH GunidadH GprimerTsectorH GnumTsectoresH (+rite)0 gra!a sectores de la memoria a disco en la unidad :, =, &&& (6, B, &&&)& Se trata de sectores lgicos del DOS y no los sectores %sicos de la BKOS& Las $ersiones antiguas de SIMDEB dan errores en particiones de disco duro de m"s de ?@ M!& * S GrangoH GlistaH (search)0 !usca una cadena de !ytes por la memoria& <ara !uscar la cadena 7<E<E7 terminada por cero en un "rea de D=@ !ytes desde DS0=:: se hara0 S =:: L @:: 7<E<E7,: (por de%ecto se !usca en DS0)& Lo se encontrara sin em!argo 7pepe7 (en min,sculas)& X F GrangoH GlistaH (%ill)0 llena la 5ona de memoria especi%icada con repeticiones de la lista de !ytes indicada& <or e#emplo, para rellenar cdigos :66h =::h !ytes a partir de >9::h0: se e#ecutara N >9::0: L =:: 664 en $e5 de 66 se podra ha!er indicado una lista de !ytes o cadenas de caracteres& * C GrangoH GdireccinH (compare)0 compara dos 5onas de memoria mostrando las di%erencias& <or e#emplo, para comparar D !ytes de DS0=:: y DS0@:: se hace0 * =:: L D @::& * M GrangoH GdireccinH (mo$e)0 M"s ue mo$er, copia una 5ona de memoria en otra de manera inteligente (controlando los posi!les solapamientos de los !loues)& * I GpuertoH (input)0 $isuali5a la lectura del puerto de EBS indicado& * O GpuertoH G$alorH (output)0 en$ia un $alor a un puerto de EBS& * G$alor=H G$alor@H (he/aritmetic)0 muestra la suma y resta de $alor= y $alor@, am!os operandos de un m"/imo de =; !its (si hay des!ordamiento se trunca el resultado, ue tampoco e/cede los =; !its)& 'am!i.n e/isten comandos en DEBUG para acceder a la memoria e/pandida0 3S (o!tener el estado de la memoria e/pandida), 36 npag (locali5ar npag p"ginas), 3D handle (desalo#ar el handle indicado) y 3M paginaTlogica paginaT%isica handle (mapear p"ginas)&