5
COMPUTACION TRABAJO PRACTICO Nº 1 Página 1 de 5 TRABAJO PRACTICO Nº 1: DEBUG El DEBUG es una utilidad del MS-DOS que permite tanto la depuración de un programa, como el ensamble de pequeños programas mediante un rudimentario editor, la depuración es lograda mediante distintas funciones que provee esta herramienta: Ejecución paso a paso Verificación y/o modificación de banderas y registros Modificación de código Desensamble de código Si bien es muy poco potente en sus prestaciones, su facilidad de uso en la escritura de pequeños programas, y su posterior depuración, lo hace ideal para los primeros pasos en Assembler. El debug esta presente en cualquier maquina que posea el DOS, aun sistemas operativos como Windows 95, Windows 98, Windows NT, Windows 2000, Windows XP lo poseen como utilidad. Como primer paso, para correr el DEBUG, en el símbolo del sistema, escribimos DEBUG y oprimimos enter, La pantalla quedará como sigue: C: \>debug - El signo "-"es el prompt del DEBUG, pudiendo escribir entonces a continuación los comandos de esta utilidad. Lista de Comandos A [dirección] Ensamblar: permite ensamblar código assembler, es el editor de programas que posee el debug. Para su utilización se le debe agregar la dirección de comienzo de nuestro programa, caso contrario comenzará después de la ultima línea de código ingresada por otra instrucción A. C [Com1] [Fin1] [Com2] Comparar: realiza una comparación byte a byte entre dos bloques de memoria. Se le deben ingresar 3 parámetros, dirección de comienzo primer bloque, dirección de final del primer bloque y dirección de comienzo segundo bloque. D [Comienzo] [Final] Volcar: realiza una muestra o volcado de memoria, mostrando byte a byte lo que se encuentra en un sector de la memoria. Puede prescindir de parámetros, en cuyo caso comenzara a partir de la dirección h0100 mostrando en cada instrucción D bloques sucesivos de memoria. Otra forma de utilizar la instrucción es agregando la dirección de comienzo del bloque a ver y pudiendo agregar también la dirección final. E dirección [lista] Introducir: permite modificar el valor de una posición de memoria. Se debe especificar una dirección y como segundo parámetro puede ir una lista de valores por ejemplo 12, 13, 14 o una cadena de caracteres "hola". En caso de no ingresar un segundo parámetro mostrará la posición a modificar luego el valor de esa posición de memoria y a continuación permitirá ingresar el nuevo valor. Para avanzar al próximo valor se utiliza la barra espaciadora y para retroceder el signo -. F lista de rango Llenar: esta función llena una porción de memoria con la lista de bytes indicada. Se le deberán pasar los siguientes parámetros: dirección de inicio, dirección final y carácter o lista de caracteres. G [=dirección][direcc.] Ir: ejecuta código a partir de la dirección CS:IP o en caso de haber puesto una dirección a partir de esta. La dirección debe estar precedida de un signo =. Puedo cargar una segunda dirección donde quiero que el programa se detenga H valor1 valor2 I puerto Aritmética Hexadecimal: devuelve el resultado de sumar y de restar los dos valores pasados como parámetro. L [dirección] Entrada: permite leer la dirección de I/O indicada, devolviendo su valor. Cargar: se utiliza junto con la instrucción N, y carga en memoria el programa especificado en la misma, si no se especifica la dirección por defecto cargara el programa a partir de la dirección h0 100. La longitud del programa queda guardada en los registro BX:CX. M [inicio] [final] [destino]

Debugger Ms Dos

  • Upload
    lalo

  • View
    12

  • Download
    2

Embed Size (px)

DESCRIPTION

marco teorico y ejemplos del programa debug

Citation preview

Page 1: Debugger Ms Dos

COMPUTACION TRABAJO PRACTICO Nº 1

Página 1 de 5

TRABAJO PRACTICO Nº 1: DEBUG

El DEBUG es una utilidad del MS-DOS que permite tanto la depuración de un programa, como el ensamble de pequeños programas mediante un rudimentario editor, la depuración es lograda mediante distintas funciones que provee esta herramienta:

Ejecución paso a paso Verificación y/o modificación de banderas y registros Modificación de código Desensamble de código

Si bien es muy poco potente en sus prestaciones, su facilidad de uso en la escritura de pequeños programas, y su posterior depuración, lo hace ideal para los primeros pasos en Assembler.

El debug esta presente en cualquier maquina que posea el DOS, aun sistemas operativos como

Windows 95, Windows 98, Windows NT, Windows 2000, Windows XP lo poseen como utilidad. Como primer paso, para correr el DEBUG, en el símbolo del sistema, escribimos DEBUG y oprimimos

enter, La pantalla quedará como sigue:

C: \>debug - El signo "-"es el prompt del DEBUG, pudiendo escribir entonces a continuación los comandos de esta utilidad. Lista de Comandos A [dirección] Ensamblar: permite ensamblar código assembler, es el editor de programas que posee el debug. Para su utilización se le debe agregar la dirección de comienzo de nuestro programa, caso contrario comenzará después de la ultima línea de código ingresada por otra instrucción A. C [Com1] [Fin1] [Com2] Comparar: realiza una comparación byte a byte entre dos bloques de memoria. Se le deben ingresar 3 parámetros, dirección de comienzo primer bloque, dirección de final del primer bloque y dirección de comienzo segundo bloque. D [Comienzo] [Final] Volcar: realiza una muestra o volcado de memoria, mostrando byte a byte lo que se encuentra en un sector de la memoria. Puede prescindir de parámetros, en cuyo caso comenzara a partir de la dirección h0100 mostrando en cada instrucción D bloques sucesivos de memoria. Otra forma de utilizar la instrucción es agregando la dirección de comienzo del bloque a ver y pudiendo agregar también la dirección final. E dirección [lista] Introducir: permite modificar el valor de una posición de memoria. Se debe especificar una dirección y como segundo parámetro puede ir una lista de valores por ejemplo 12, 13, 14 o una cadena de caracteres "hola". En caso de no ingresar un segundo parámetro mostrará la posición a modificar luego el valor de esa posición de memoria y a continuación permitirá ingresar el nuevo valor. Para avanzar al próximo valor se utiliza la barra espaciadora y para retroceder el signo -. F lista de rango Llenar: esta función llena una porción de memoria con la lista de bytes indicada. Se le deberán pasar los siguientes parámetros: dirección de inicio, dirección final y carácter o lista de caracteres. G [=dirección][direcc.] Ir: ejecuta código a partir de la dirección CS:IP o en caso de haber puesto una dirección a partir de esta. La dirección debe estar precedida de un signo =. Puedo cargar una segunda dirección donde quiero que el programa se detenga H valor1 valor2 I puerto Aritmética Hexadecimal: devuelve el resultado de sumar y de restar los dos valores pasados como parámetro. L [dirección] Entrada: permite leer la dirección de I/O indicada, devolviendo su valor. Cargar: se utiliza junto con la instrucción N, y carga en memoria el programa especificado en la misma, si no se especifica la dirección por defecto cargara el programa a partir de la dirección h0 100. La longitud del programa queda guardada en los registro BX:CX. M [inicio] [final] [destino]

Page 2: Debugger Ms Dos

COMPUTACION TRABAJO PRACTICO Nº 1

Página 2 de 5

Mover: copia una porción de memoria a otra. Se debe especificar un intervalo compuesto por una dirección de inicio y otra de final y una dirección de destino. N [ruta y nombre] Nombre: Se ingresa el nombre a utilizar luego por una instrucción de W o L. O [puerto] [byte] Salida: envía un byte al puerto especificado de I/O. P [=dirección] [número] Continuar: permite ejecutar un programa paso a paso, saltando las llamadas Call o Int. Se puede saltar a una dirección especificada y luego ejecutar un número de líneas. Q Salir: sale del debug R [registro] Registro: si no se especifica registro se mostrara el estado general de todas las banderas y registros de microprocesador., en caso de especificar registro muestra su valor y permite modificarlo. S [rango] [lista] Buscar: busca la lista especificada dentro de un rango de memoria. Con el parámetro rango se especifica la dirección de comienzo y dirección final a buscar y en el parámetro lista se especifica el byte o los bytes a buscar. T [=dirección] [valor] Seguir: funciona de manera similar a P con la diferencia que entra a las llamadas Call o Int U [rango] Desensamblar: desensambla un rango de memoria. El rango se especifica con un comienzo y un final, se puede no indicar final, con lo que mostrará una serie de líneas hasta completar los 16 bytes de incremento de memoria, y también se puede no indicar ningún parámetro para mostrar bloques contiguos. W[dirección] Escribir: escribe en el disco el archivo indicado con la función N a partir de la dirección especificada, en caso de no indicar dirección de comienzo la dirección por defecto será la h0100. La función W guardará desde la dirección de comienzo hasta la dirección de comienzo + N bytes. Donde N Bytes se especifica en BX:CX. Banderas Las banderas del microprocesador, pueden ser vistas a través del comando R C:\>debug -r AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=1A06 ES=1A06 SS=1A06 CS=1A06 IP=0100 NV UP EI PL NZ NA PO NC 1A06:0100 0000 ADD [BX+SI],AL DS:0000=CD

Page 3: Debugger Ms Dos

COMPUTACION TRABAJO PRACTICO Nº 1

Página 3 de 5

Ejercicio Nº 1 Indicar varios ejemplos de segmento y corrimiento de la siguiente posición de memoria absoluta D34Abh. D34A:000B D000:34AB D333:017B C34B:FFFB Los números en formato Segmento: Corrimiento corresponden a la misma dirección física. Ejercicio Nº 2 Mostrar el estado de todos los registros y banderas.

Ejercicio Nº 3 Realizar la suma y resta de los siguientes pares numéricos. .

100 108 108 100

-h 108 100 0208 0008 -h 100 108 0208 FFF8 realiza la suma y luego la resta de los dos números ingresados. Ejercicio Nº 4 Asignar al registro AX el valor 34A3 y BX el valor 33DA, verificando luego el resultado.

Ejercicio Nº 5 Realizar un programa que cargue los registros con los siguientes valores. AX = 10 , BX = 20 , CX = 30 , DX = 40 Luego ejecutar los siguientes comandos: u100, d100, g=100, q

Page 4: Debugger Ms Dos

COMPUTACION TRABAJO PRACTICO Nº 1

Página 4 de 5

Ejercicio Nro 6 Realizar un programa que escriba un asterisco en la pantalla, grabar ese programa en el disco y luego ejecutarlo desde el prompt del DOS.

Ejercicio Nº 7 Cargar el programa anteriormente grabado y verificar si el programa se encuentra en la memoria.

Ejercicio Nº 8 Mover el programa anterior a la posición 010C.

Page 5: Debugger Ms Dos

COMPUTACION TRABAJO PRACTICO Nº 1

Página 5 de 5

Prácticos de laboratorio no Desarrollados Los programas pedidos deberán figurar en la carpeta con su código completo. Ejercicio Nº 9 Se habló de que varios pares [segmento :corrimiento] podían direccionar a la misma posición de memoria. Determinar en las siguientes posiciones de memoria, los segmentos extremos o sea el menor segmento y el mayor segmento con el que se pueden direccionar esas posiciones de memoria, aclarando también su corrimiento u offset. A23B4h B3A47h Ejercicio Nº 10 Utilizando las instrucciones del Debug, comparar el bloque de memoria 100-110 con el bloque 200-210, mostrando el resultado. Ejercicio Nº 11 Sabiendo que el buffer de video comienza en la dirección B800:0000 realizar un fill que llene la pantalla de asteriscos, utilizando para ello la instrucción F del debug, calcular previamente cual será la última posición de memoria correspondiente al último carácter de la pantalla. Ejercicio Nº 12 Realizar un programa que cargue dos números cualquiera en los registros AX y BX, y luego que sume y reste esos dos números guardando el resultado de la suma en AX y la resta en BX. Ejercicio Nº 13 Ingresar con el comando a el siguiente código:

mov ax,15 6 add ax,100 add ax,100 int 3

Luego mediante el debug copiar las últimas 3 instrucciones a la posición donde se encuentra la int 3, de tal modo que el programa sume ahora 400 al AX. Ejercicio Nº 14 Realizar un programa ejemplo para cada tipo de direccionamiento, este programa ejemplo debe sumar dos números.

Direccionamiento por registro Direccionamiento inmediato Direccionamiento directo Direccionamiento base más índice Direccionamiento relativo por registro Direccionamiento relativo base más índice

Ejercicio Nº 15 Realizar un programa que imprima un asterisco en el centro de la pantalla y que realice un scroll de una línea hacia arriba en un ventana de coordenadas (8,10), (16,70). Para el scroll podemos utilizar un servicio de la BIOS BIBLIOGRAFIA Abel, Peter (1997). Lenguaje ensamblador y programación para PC IBM y compatibles. USA. Ed. Prentice Hall. Ginzburg, Mario Carlos (2003). Assembler desde cero e interrupciones. Buenos Aires. UBA Murray, William H. Pappas Chris H.(1987). Programación en lenguaje Ensamblador. España. Osborne/McGraw Hill