0% encontró este documento útil (0 votos)
231 vistas7 páginas

Trabajo Práctico Nro 3: DEBUG: Lista de Comandos

Este documento presenta el programa DEBUG para DOS, el cual permite depurar programas ensamblados y editar código de forma rudimentaria. Explica los comandos principales como A para ensamblar, D para volcar memoria, E para modificar valores, G para ejecutar, P para depurar paso a paso, R para ver registros y banderas, y Q para salir. Además, lista las banderas del microprocesador que pueden verse con el comando R.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
231 vistas7 páginas

Trabajo Práctico Nro 3: DEBUG: Lista de Comandos

Este documento presenta el programa DEBUG para DOS, el cual permite depurar programas ensamblados y editar código de forma rudimentaria. Explica los comandos principales como A para ensamblar, D para volcar memoria, E para modificar valores, G para ejecutar, P para depurar paso a paso, R para ver registros y banderas, y Q para salir. Además, lista las banderas del microprocesador que pueden verse con el comando R.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 7

UNIVERSIDAD Técnicas Digitales II

TECNOLÓGICA Año 2004 J.T.P. Ing. Steiner Guillermo.


NACIONAL
Trabajo Práctico Nro 3: DEBUG Email:[email protected]

Trabajo Práctico Nro 3: 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
Win98, Windows NT o Windows 2000 lo poseen como utilidad.
Como primer paso, para correr el debug, en el símbolo del sistema escribimos debug y
oprimimos enter,
La pantalla quedara 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.

1
UNIVERSIDAD Técnicas Digitales II
TECNOLÓGICA Año 2004 J.T.P. Ing. Steiner Guillermo.
NACIONAL
Trabajo Práctico Nro 3: DEBUG Email:[email protected]

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 Aritmética Hexadecimal: devuelve el resultado de sumar y restar los
dos valores pasados como parámetro.
I puerto Entrada: permite leer la dirección de I/O indicada, devolviendo su
valor.
L [dirección] 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 h0100.
La longitud del programa queda guardada en los registro BX:CX.
M [inicio] [final] [destino] 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úmeros
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.

2
UNIVERSIDAD Técnicas Digitales II
TECNOLÓGICA Año 2004 J.T.P. Ing. Steiner Guillermo.
NACIONAL
Trabajo Práctico Nro 3: DEBUG Email:[email protected]

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 vista 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
-

Banderas Activo Borrado


Desbordamiento: Indica cuando el resultado OV Desborde NV No hubo Desborde
de una operación con signo a excedido la
capacidad del microprocesador
Dirección: Controla la selección de DN Decremento UP Incremento
incremento o decremento de los registros DI
o SI, en las instrucciones de cadenas
Interrupción: habilita la entrada de EI Interrupción DI No hubo Interrup.
interrupción
Signo: indica el signo del resultado de la NG Negativo PL Positivo
ultima operación aritmética.
Cero: indica si la ultima operación dio como ZR Cero NZ No cero
resultado cero
Acarreo auxiliar: ocurre cuando en una AC Acarreo NA Acarreo igual a 0
operación aritmética, se produzco un acarreo
o un préstamo entre el bit 3 y 4 del resultado
Paridad: es un conteo de unos en la ultima PE Par PO Impar
operación
Acarreo: indica un acarreo o un préstamo en CY Acarreo NC Acarreo igual a 0
la ultima operación aritmética, usado también
en operaciones de corrimiento y como
indicador de error en ciertos programas.

3
UNIVERSIDAD Técnicas Digitales II
TECNOLÓGICA Año 2004 J.T.P. Ing. Steiner Guillermo.
NACIONAL
Trabajo Práctico Nro 3: DEBUG Email:[email protected]

Práctico de Aula Desarrollados


Ejercicio Nro. 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úmero en formato Segmento : Corrimiento corresponden a la misma dirección física.

Ejercicio Nro. 2
Mostrar el estado de todos los registros y banderas.
-r
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0D5C ES=0D5C SS=0D5C CS=0D5C IP=0100 NV UP EI PL NZ NA PO NC
0D5C:0100 1F POP DS

Ejercicio Nro. 3
Realizar la suma y resta de los siguientes pares numéricos.
• 100 108
• 108 100
-h 108 100 realiza la suma y luego la resta de los dos nro ingresados
0208 0008
-h 100 108
0208 FFF8

Ejercicio Nro. 4
Asignar al registro AX el valor 34A3 y BX el valor 33DA, verificando luego el resultado.
-r AX agregando a la derecha de la instrucción r el
AX 0000 registro nos permite modificarlo en forma directa
:34A3
-r BX
BX 0000
:33DA
-r
AX=34A3 BX=33DA CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0D5C ES=0D5C SS=0D5C CS=0D5C IP=0100 NV UP EI PL NZ NA PO NC
0D5C:0100 1F POP DS

Ejercicio Nro 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.

4
UNIVERSIDAD Técnicas Digitales II
TECNOLÓGICA Año 2004 J.T.P. Ing. Steiner Guillermo.
NACIONAL
Trabajo Práctico Nro 3: DEBUG Email:[email protected]

• u 100
• d 100
• g=100
• q
-a 100
0BBD:0100 mov AX,10 Asignar a AX el valor 10
0BBD:0103 mov BX,20 Asignar a BX el valor 20
0BBD:0106 mov CX,30 Asignar a CX el valor 30
0BBD:0109 mov DX,40 Asignar a DX el valor 40
0BBD:010C int 3 Finalizar el programa y devolver el ctrl al debug
0BBD:010D

-u 100
0BBD:0100 B81000 MOV AX,0010
0BBD:0103 BB2000 MOV BX,0020
0BBD:0106 B93000 MOV CX,0030
0BBD:0109 BA4000 MOV DX,0040
0BBD:010C CC INT 3
...
...
-d 100
0BBD:0100 B8 10 00 BB 20 00 B9 30-00 BA 40 00 CC F6 C7 04 .... ..0..@.....
0BBD:0110 74 E6 C6 46 00 02 8B 76-02 80 3C 00 34 00 AC 0B t..F...v..<.4...
...
...
-g=100
AX=0010 BX=0020 CX=0030 DX=0040 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0BBD ES=0BBD SS=0BBD CS=0BBD IP=010C NV UP EI PL NZ NA PO NC
0BBD:010C CC INT 3

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.

-a 100
0BBD:0100 mov AH,02 utiliza la interrupción 21, servicio 2 para escribir
0BBD:0102 mov DL,2A un carácter en la pantalla el valor del ASCII a
0BBD:0104 int 21 mostrar se ingresa en DL, en este caso 2A
0BBD:0106 int 20
0BBD:0108
-n aste.com con la instrucción n ingreso el nombre del programa
-h 108 100
0208 0008
-r BX en los registros BX:CX ingreso la longitud en bytes
BX 0000 del programa
:0
-r CX
CX 000D
:8
-w finalmente con w grabo el programa en el disco
Escribiendo 00008 bytes
-q

c:\aste
*

5
UNIVERSIDAD Técnicas Digitales II
TECNOLÓGICA Año 2004 J.T.P. Ing. Steiner Guillermo.
NACIONAL
Trabajo Práctico Nro 3: DEBUG Email:[email protected]

Ejercicio Nro 7
Cargar el programa anteriormente grabado y verificar si el programa se encuentra en la memoria.
-n aste.com con n ingreso el nombre del programa a cargar
-l 100 con l cargo el prog. a partir de la direc. especificada
-u 100
0BFC:0100 B402 MOV AH,02
0BFC:0102 B22A MOV DL,2A
0BFC:0104 CD21 INT 21
0BFC:0106 CD20 INT 20
...
...

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

-m 100 107 10C copio el contenido de la memoria 100-107 a la posición 10C


-u 100
0BFC:0100 B402 MOV AH,02
0BFC:0102 B22A MOV DL,2A
0BFC:0104 CD21 INT 21
0BFC:0106 CD20 INT 20
0BFC:0108 FF066795 INC WORD PTR [9567]
0BFC:010C B402 MOV AH,02
0BFC:010E B22A MOV DL,2A
0BFC:0110 CD21 INT 21
0BFC:0112 CD20 INT 20

Práctico de Aula no Desarrollados


Los programas pedidos deberán figurar en la carpeta con su código completo.

Ejercicio Nro. 1
Se hablo 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 Nro 2
Utilizando las instrucciones del Debug, comparar el bloque de memoria 100-110 con el bloque
200-210, mostrando el resultado.

Ejercicio Nro 3
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 ultima posición de memoria correspondiente al ultimo carácter de la pantalla.

6
UNIVERSIDAD Técnicas Digitales II
TECNOLÓGICA Año 2004 J.T.P. Ing. Steiner Guillermo.
NACIONAL
Trabajo Práctico Nro 3: DEBUG Email:[email protected]

Ejercicio Nro 4
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 Nro 5
Ingresar con el comando a el siguiente código.
mov ax,156
add ax,100
add ax,100
int 3

luego mediante el debug copiar las ultimas 3 instrucciones a la posición donde se encuentra la int
3, de tal modo que el programa sume ahora 400 al AX.

Ejercicio Nro 6
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 Nro 7
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

También podría gustarte