Академический Документы
Профессиональный Документы
Культура Документы
1/10
2/10
respectivamente, el nombre que tendr el fichero objeto resultante, un nombre para crear un fichero de listado que muestra el cdigo mquina generado tras el ensamblado y, por ltimo, el nombre de un fichero de referencias cruzadas, el cual contiene todos los smbolos que aparecen en el programa, as como todos los nmeros de lnea que hacen referencia a cada uno de ellos. El listado contiene el cdigo mquina asociado a cada instruccin, posicin en que se encuentra y una tabla en la que se indica que corresponde a cada nombre simblico. Este listado sirve para facilitar el seguimiento del programa durante la fase de prueba. El listado de referencias cruzadas contiene informacin referente a cada smbolo y las sentencias donde se hace referencia al mismo. Existen tambin una serie de opciones de ensamblado compuestas por el smbolo slash (/) seguido de una letra, y que modifican algn aspecto del ensamblado del programa. Generalmente no es necesario indicar ninguna, pero en el caso de que sea necesario utilizar alguna de ellas, hay que colocarlas entre el nombre del programa ensamblador y el fichero fuente. Por tanto el formato general de llamada al programa ensamblador es:
3/10
MASM [opciones] fuente [,objeto] [,listado] [,refcruzada] En caso de que no se especifique nombre para el fichero objeto se tomar el mismo que para el fuente. Si escribimos (TASM /H) (MASM /HELP) obtendremos un listado de ayuda con las opciones posibles para nuestro ensamblador. A continuacin se comentan algunos de estos parmetros. /a y /s = Selecciona orden alfabtico o secuencial de los segmentos. /c = Genera un listado de referencias cruzadas en un fichero de extensin .CRF, aadiendo nmeros de lnea al listado o bien incluye el listado de referencias cruzadas directamente dentro del listado del programa (caso del TASM) /iruta = Permite indicar el directorio donde el ensamblador debe buscar los ficheros indicados en el fichero fuente con la directiva include. /l = Con /l genera un listado de ensamblaje, con /la genera un listado expandido. /n = Suprime las tablas de smbolos en el listado. /p = Verifica que el cdigo generado para el modo protegido es correcto /t = Suprime los mensajes si el ensamblado es correcto. /w = Indica el nivel de advertencias: /w0 ninguna, /w1 slo las serias, /w2 slo consejos. /X = lista condiciones falsas (ensamblaje condicional) /z Visualiza la lnea de error y no slo el nmero de la misma.
4/10
necesarias entre ellos. Convierte los mdulos objeto en un mdulo ejecutable tipo .EXE
TLINK a diferencia de LINK, permite generar un fichero de tipo COM directamente desde un OBJ si se indica el parmetro /t, lo que agiliza an ms el proceso. Puede obtenerse ayuda escribiendo TLINK sin parmetros LINK /help, donde podemos obtener el listado de opciones aceptadas por cada linkador. El formato general del enlazador ser: LINK [opciones] mdulos objeto [,librera] [, ejecutable] [,mapa]. TLINK fich_obj,f ich_map, fich_librera, fich_def Si nuestro programa necesita montar varios mdulos objeto, estos se separarn por el smbolo +. Si nuestro programa necesita montar varias libreras, estas se separarn por el smbolo +. El fichero mapa es un archivo de texto que contiene informacin acerca de los mdulos que se han unido y que posicin dentro del programa se ha asignado a cada uno de ellos. Ejemplos: LINK m1+m2,,Prog.exe, monta los ficheros m1.obj y m2.obj en prog.exe sin usa librera alguna. TLINK prog1+prog2,,,math monta los mdulos objeto prog1.obj y prog2.obj y la librera math.lib
5/10
6/10
Por el contrario los ficheros .COM son mucho ms limitados y las condiciones que debe cumplir son las siguientes: Debe ocupar un nico segmento, por lo que su tamao no puede superar los 64Kbytes. No debe especificar una posicin para la pila, pues el S.O. les asigna como segmento de pila el mismo que el del cdigo, e inicializa el puntero de pila al final de dicho segmento, por tanto contra mayor sea el espacio ocupado por el cdigo, menor capacidad de pila tendremos. Deben reservar los primeros 256 bytes (0 al 255) para que el MSDOS guarde sus datos. La ejecucin de estos programas comienza con la primera instruccin situada en el segmento, es decir, en la posicin 100h (256). Adems, el proceso de creacin de este tipo de programas es ms complejo, variando segn el ensamblador que utilicemos. Para el MASM se generar un programa EXE que generar un mensaje de error al no haber especificado la pila. A continuacin se utiliza el programa EXE2BIN para convertir el programa .EXE a .COM. Para el TASM basta con indicar la opcin /t al enlazador.
7/10
numricos o bien apoyndose en algn registro de segmento, aunque el offset siempre ser numrico: 1AB4:AC54, CS:200 Rangos: Son dos direcciones separadas por una coma; o bien una direccin, La letra L y un nmero que indica el nmero de bytes a partir de la direccin. Listas: Son secuencias de bytes y/o cadenas separadas por comas.
8/10
Sintaxis general: DEBUG [programa.exe[parmetros]] Los programas pueden ser de tipo EXE o COM; los parmetros no son los del debug, sino los que normalmente se suministraran al programa a la hora de depurar. Tambin se pueden cargar ficheros de otra extensin o simplemente no indicar fichero. Una vez dentro del DEBUG, podemos invocar la ayuda escribiendo el comando ? en el prompt. A ! ! ! continuacin explicaremos algunos de los comandos ms
interesantes: Q (QUIT): Permite abandonar el programa y volver al DOS D [Direccin[numbytes]] (dump): visualiza el contenido de la memoria. A [Direccin] (Assemble): Permite ensamblar a partir de CS:IP si no se indica una direccin concreta. Se admiten las directivas DB y DW del ensamblador ! E Direccin [Lista] (Enter): Permite consultar y modificar la memoria byte a byte. Por ejemplo E 230 1,2,3 se introducen los bytes 1, 2 y 3 a partir de DS:23. Si no se indica la lista, se visualizar la memoria byte a byte, pudindose modificar los bytes deseados, avanzar al siguiente con la barra espaciadora o retroceder con el signo (-). Para salir pulsaremos enter. ! U [Direccin [rango]] (Unassemble) Desemsambla la memoria, por
9/10
R [Registro] (Register): Permite visualizar y modificar el valor de los registros. Escribiendo slo R nos muestra el estado de los registros, si se escribe R seguido del nombre de un segmento no permitir cambiar su valor. Con RF se muestran los flags y se permite modificar alguno.
FLAG Desbordamiento Direccin Interrupcin Signo Cero Acarreo auxiliar Paridad Acarreo !
G [Direccin [,Direccin]] (go): Ejecuta cdigo desde CS:IP a menos que se especifique una direccin completa. Para que el flujo del programa se detenga en la segunda instruccin, es necesario pasar por ella. Se pueden indicar hasta 10 direcciones donde debe detenerse.
T [veces] (Trace): Ejecuta una instruccin del programa mostrando a continuacin el estado de los registros y la siguiente instruccin. T10 equivale a ejecutar 16 veces el comando T.
P [veces] (proceed):Similar al anterior pero al encontrarse con un CALL o INT lo ejecuta de golpe sin mostrarnos las instrucciones dentro del CALL o del INT.
! !
N [especificacin fichero] (name): Se asigna un nombre al fichero que est siendo creado o modificado. L [direccin] (load): Carga el fichero indicado en la instruccin N. En BX:CX queda depositado el tamao del fichero (BX = 0 para ficheros menores de 64K). Por defecto la direccin es CS:100h.
L<direccin><unidad><primer sector><num_sectores>:Carga sectores de la unidad 0,1 ... (A,B,...)a memoria. Se trata de sectores lgicos del DOS, y no fsicos de la BIOS.
10/10
W [direccin] (write): Graba el contenido de una zona de memoria a disco. Si no se indica la direccin se graba desde CS:100h hasta CS:+num_bytes; el nmero de bytes se indica en BX:CX (no es una direccin segmentada, sino un valor de 32 bits). Si se trata de un fichero EXE no dejar grabarlos, los debemos de renombrar previamente.
W<direccin><unidad><primer sector><num_sectores>:Graba sectores de la unidad 0,1 ... (A,B,...)a memoria. Se trata de sectores lgicos del DOS, y no fsicos de la BIOS.
! !
S <rango><lista> (search):Busca una cadena de bytes por la memoria. F <rango><lista> (fill): Llena la zona de memoria especificada con repeticiones de la lista de bytes indicada, por ejemplo para rellenar cdigos 04Bh 100hbytes a partir de 9800h:0 se ejecutar F 9800:0 L 100 4B. En vez de 4B, se podra haber usado una lista de bytes o cadena de caracteres.
C <rango><direccin> (compare):Compara dos zonas de memoria mostrando las diferencias. Por ejemplo para comparar 5 bytes de DS:100 a DS:200 se hace: c 100 L 5 2000.
! ! ! !
M <rango><direccin> (move): Copia una zona de memoria en otra controlando los posible solapamientos de los bloques. I <puerto> (input):Visualiza la lectura del puerto E/S seleccionado. O <puerto> (input):Enva un valor al puerto E/S seleccionado. H <valor1><valor2> (hexaaritmetic): Muestra la suma y la resta de los valores 1 y 2, ambos operados con un mximo de 16 bits.
Tambin existen comandos de DEBUG para acceder a la memoria expandida, XS (obtener el estado de la memoria expandida), XA npag (localizar npag pginas), XD handle (Desalojar el handle indicado)...