PRÁCTICA 2 INTRODUCCIÓN AL DEPURADOR SIMBÓLICO DEL 8086: TURBO DEBUGGER OBJETIVO Al terminar esta práctica, el alumno será capaz de: Ejecutar un programa usando el depurador simbólico Turbo Debugger ITSON Manuel Domitsu Kono 12 Introducción al Depurador Simbólico del 8086: Turbo Debugger ANTECEDENTES TEÓRICOS Un depurador simbólico es una herramienta de software que nos permite ejecutar un programa ejecutable instrucción por instrucción al mismo tiempo que nos muestra el código fuente del programa. El depurador simbólico nos permite accesar a las variables del programa mediante los nombres de las variables usados en el programa fuente y no sólo por sus direcciones. Podemos variar el contenido de las variables mientras el programa está en ejecución y observar el efecto de esos cambios en el programa y en otras variables. Turbo Debugger de Borland International es un depurador simbólico que permite la ejecución de programas escritos en ensamblador, C y Pascal. DESARROLLO 1. Abra una ventana de DOS. 2. Verifique que los directorios c:\tc, c:\tasm y c:\td están en la lista de rutas de búsqueda del sistema operativo. De no aparecer los tres directorios mencionados hay que incluirlos en el archivo AUTOEXEC.BAT y ejecutar este archivo por lotes para que tenga efecto. Vea los pasos 2 a 7 del DESARROLLO de la PRÁCTICA 1. 3. Inserte el disquete de trabajo en la unidad de disco A y cambie la unidad de disco por ausencia a la unidad A, tecleando: a: 4. Desde la unidad de disco A, llame al depurador Turbo Debbuger tecleando td primer En el monitor aparecerá lo mostrado en la figura 2-1. Ésta es la pantalla inicial de Turbo Debugger. En la pantalla aparece una ventana llamada Ventana del CPU que muestra del lado izquierdo el código fuente del programa, del lado derecho el estado de los registros del microprocesador y en la parte inferior izquierda un vaciado de parte del segmento de datos del programa. Aunque podemos depurar el programa usando esta ventana, utilizaremos otro procedimiento que muestra la misma información en otro formato. Presione [F3] para borrar esta ventana. La tecla [F3] nos elimina de la pantalla la ventana activa. 5. Primero colocaremos una ventana llamada Ventana de Registros que muestra el estado de los registros del microprocesador. Para ello seleccione del menú principal la opción View presionando [Alt][V]. En la pantalla aparecerá el menú mostrado en la figura 2-2. ITSON Manuel Domitsu Kono Práctica 2 Introducción al Depurador Simbólico del 8086: Turbo Debugger 13 Figura 2-1 Figura 2-2 6. De este menú seleccione la opción Registers presionando [R]. Aparecerá la Ventana de Registros, tal como se muestra en la figura 2-3. 7. Moveremos esta ventana a la esquina superior derecha de la pantalla. Para hacer esto seleccionaremos del menú principal la opción Window, presionando [Alt][W]. Aparecerá el menú mostrado en la figura 2-4. ITSON Manuel Domitsu Kono 14 Introducción al Depurador Simbólico del 8086: Turbo Debugger Figura 2-3 Figura 2-4 De este menú seleccionaremos la opción Move/Resize , presionando la tecla [M]. Aparecerá lo mostrado en la figura 2-5. Para mover la ventana utilizaremos las teclas del cursor: [→ ], [← ], [↑ ], [↓ ] que moverán la ventana en la dirección de las flechas. Para cambiar el tamaño de la ventana se utilizan las combinaciones de teclas: [Mayus][→ ] para aumentar su tamaño horizontalmente, [Mayus][← ] para reducir su tamaño horizontalmente, [Mayus][↑ ] para reducir su tamaño verticalmente y [Mayus][↓ ] para aumentar su tamaño verticalmente. 8. Mueva la Ventana de Registros hacia la esquina superior derecha y redúzcala verticalmente dos renglones para que quede como en la figura 2-6. ITSON Manuel Domitsu Kono Práctica 2 Introducción al Depurador Simbólico del 8086: Turbo Debugger 15 Figura 2-5 Figura 2-6 9. A continuación colocaremos una segunda ventana llamada Ventana de Módulo, que nos muestra el código fuente del programa. Para ello seleccione de nuevo del menú principal la opción View presionando [Alt][V]. Del menú que aparece seleccione la opción Module presionando [M]. Aparecerá un recuadro con la lista de los módulos de código fuente del programa, figura 2-7. En este caso, solo hay un módulo. Presione [Enter] para seleccionarlo. Aparece la Ventana de Módulo con el código fuente. Muévala y cambie su tamaño para que quede como se muestra en la figura 2-8. ITSON Manuel Domitsu Kono 16 Introducción al Depurador Simbólico del 8086: Turbo Debugger Figura 2-7 Figura 2-8 10. Por último, colocaremos la Ventana de Inspección, para observar las variables del programa. Para ello seleccione de nuevo del menú principal la opción View presionando [Alt][V]. Del menú que aparece seleccione la opción Watches presionando [W]. Aparece la Ventana de Inspección. Muévala y cambie su tamaño para que quede como se muestra en la figura 2-9. 11. Guardaremos esta configuración de ventanas para que esté disponible para otras sesiones y no tengamos que crearla de nuevo. Seleccione del menú principal la opción Options presionando [Alt][O]. Aparecerá el menú mostrado en la figura 2-10. ITSON Manuel Domitsu Kono Práctica 2 Introducción al Depurador Simbólico del 8086: Turbo Debugger 17 Figura 2-9 Figura 2-10 12. Seleccionar la opción Save options presionando [S]. Aparece otro menú como se muestra en la figura 2-11. 13. Seleccione la opción All, presionando la tecla [A]. Aparece un recuadro como se muestra en la figura 2-12 pidiéndonos el nombre de un archivo en donde se almacenará la configuración. El nombre por ausencia del archivo de configuración es TDCONFIG.TD. Presione [Enter] para aceptar ese nombre. Como el directorio de trabajo es el directorio raíz de su disco en la unidad A, cada vez que cargue el programa Turbo debugger desde ese directorio, se cargará también esa configuración. ITSON Manuel Domitsu Kono 18 Introducción al Depurador Simbólico del 8086: Turbo Debugger Figura 2-11 Figura 2-12 14. A continuación desplegaremos en la ventana Inspección las variables del programa para observar como cambian su valor al ir ejecutando el programa. Para ello presionamos [Ctrl][F7]. Aparecerá un recuadro como se muestra en la figura 2-13. Teclearemos: dato1 ITSON Manuel Domitsu Kono Práctica 2 Introducción al Depurador Simbólico del 8086: Turbo Debugger 19 Figura 2-13 que es el nombre de la primera variable del programa. En la ventana Inspección aparecerá el nombre de la variable seguido de su tipo que es byte, así como su valor inicial, expresado como carácter, en decimal y en hexadecimal, tal como se muestra en la figura 2-14. Turbo Debugger inicializa a las variables no inicializadas a cero. Note que la línea en la que aparece la variable está resaltada. Presione la tecla del cursor [↓ ] y la línea resaltada será la siguiente. Figura 2-14 15. Repita el paso 14 para colocar en la Ventana de Inspección a las otras variables del programa: dato2 y resul. ITSON Manuel Domitsu Kono 20 Introducción al Depurador Simbólico del 8086: Turbo Debugger 16. Antes de ejecutar el programa les asignaremos los valores de 5h y 6h a las variables dato1 y dato2, respectivamente. Para ello, primero colocaremos la línea resaltada sobre la variable dato1. Presione las teclas [Ctrl][C]. Aparecerá un recuadro tal como se muestra en la figura 2-15, pidiéndonos el nuevo valor de la variable dato1. Figura 2-15 Teclearemos: 5 El nuevo valor de la variable dato1 aparecerá en la Ventana de Inspección, como se muestra en la figura 2-16. Figura 2-16 ITSON Manuel Domitsu Kono Práctica 2 Introducción al Depurador Simbólico del 8086: Turbo Debugger 21 Al introducir el valor de 5h en la variable dato1 no fue necesario teclear la letra h para indicar que el valor es en hexadecimal. Por ausencia los valores tecleados en esta ventana son hexadecimales. Por otro lado, todos los números hexadecimales deben empezar con uno de los dígitos 0 - 9. Por lo que para introducir un valor hexadecimal que comience con A - F debemos precederlo con un cero (0). Por ejemplo si deseamos introducir el valor de Ah, 10 en decimal, deberemos teclear 0A. Para introducir números en otra base se deberán usar sufijos: d para decimal y b para binario. 17. Repita el paso anterior para cambiar el valor de dato2 a 6h. 18. A continuación se ejecutará el programa. Para ello haremos a la Ventana de Módulo, la ventana activa. Note que cada ventana tiene en su esquina superior derecha, sobre el marco, su número. Esos números se asignan conforme se van abriendo o cerrando las ventanas. Para hacer una ventana la ventana activa presionaremos: [Alt][n] donde n es el número de la ventana que deseamos sea la activa. En este caso teclearemos [Alt][2], el marco de la Ventana de Módulo cambiará de sencillo a doble para indicar que es la ventana activa y el cursor aparecerá al principio del código fuente. 19. Presione la tecla del cursor [↓ ] para desplazar el cursor hacia abajo hasta que quede sobre la primera instrucción del programa, en la línea siguiente a la etiqueta Inicio. Tal como se muestra en la figura 2-17. Figura 2-17 Note que a la izquierda de la primera instrucción del programa se encuentra un pequeño triángulo. Este triángulo al que llamaremos marcador de instrucción es un equivalente gráfico del registro de apuntador de instrucción ya que indica que la instrucción en esta línea será la siguiente a ser ejecutada. ITSON Manuel Domitsu Kono 22 Introducción al Depurador Simbólico del 8086: Turbo Debugger Observe en la Ventana de Registros el valor del registro AX. El valor será diferente al valor mostrado en la figura 2-17 ya que varía de computadora a computadora y de corrida a corrida. Observe también el valor del registro IP, el contador del programa tiene el valor de cero. 20. Para ejecutar una instrucción presione la tecla [F8]. Aparece lo mostrado en la figura 2-18. Note como el marcador de instrucción se mueve a la siguiente línea del código fuente y que el registro AX cambió su valor. El nuevo valor de AX es la dirección del segmento de datos, ya que la instrucción: mov ax, @data carga en el registro AX el valor dado por el símbolo predefinido @data, que Turbo Assembler define como la dirección de inicio del segmento de datos. El valor de @data no se le asigna en el momento del ensamble ni en el ligado sino hasta el momento de ejecución ya que es hasta ese momento en que se sabe en que lugar de la memoria queda el programa. También el valor del registro IP se habrá incrementado para apuntar a la siguiente instrucción. Figura 2-18 21. Presione de nuevo la tecla [F8] para ejecutar la siguiente instrucción: mov ds, ax Note como el valor del registro AX se copió al registro DS, esto es inicializamos el registro de segmento de datos al inicio del segmento de memoria que contiene los datos del programa. 22. Presione [F8]. Observe que ahora la instrucción: mov ITSON al, [dato1] Manuel Domitsu Kono Práctica 2 Introducción al Depurador Simbólico del 8086: Turbo Debugger 23 carga en el registro AL el valor de la variable dato1. En la Ventana de Registros podemos ver que los dos últimos dígitos del registro AX que corresponden al registro AL, han cambiado a 05 que es el valor almacenado en la variable dato1. 23. Vuelva a presionar [F8]. La instrucción: add al, [dato2] le suma al contenido del registro AL el valor almacenado en la variable dato2. El registro AL tiene ahora el valor de 0B ya que 5h + 6h = Bh. 24. Vuelva a presionar [F8]. La instrucción: add al, cte le suma al contenido del registro AL el valor dado por la constante simbólica cte definida por la directiva equ como 10. El registro AL tiene ahora el valor de 15 (Bh + Ah = 15h). 25. Vuelva a presionar [F8]. La instrucción: mov resul, al guarda el contenido del registro AL en la variable resul. Note que en la Ventana de Inspección la variable resul muestra el valor de 21 (15h), figura 2-19. Figura 2-19 Presionando [F8] dos veces más, cargamos en el registro AH el valor de 4Ch y en el registro AL el valor de la variable codsal que representa el código de terminación del programa. Por último al presionar [F8] una vez más llamamos a la interrupción del DOS que termina la ejecución del programa. En la pantalla veremos el mensaje mostrado en la figura 2-20. ITSON Manuel Domitsu Kono 24 Introducción al Depurador Simbólico del 8086: Turbo Debugger Figura 2-20 26. Para ejecutar el programa de nuevo presione las teclas [Ctrl][F2]. El registro IP se reinicializa a 0, lo mismo que las variables del programa. Vuelva a ejecutar el programa haciendo que las variable dato1 y dato2 tomen los valores 25h y A0h. 27. Salga del programa Turbo debugger presionando las teclas [Alt][X]. ITSON Manuel Domitsu Kono