Debug
Debug
Debug
C:\>debug
-
Ya estamos posicionados en el DEBUG y ste est preparado para recibir instrucciones
en ASSEMBLER.
ensamblar A [direccin]
comparar
C direccin de intervalo
volcar D [intervalo]
escribir E direccin [lista]
llenar F lista de intervalos
ir G [=direccin] [direcciones]
hex H valor1 valor2
entrada I puerto
L [direccin] [unidad]
cargar
[primer_sector] [nmero]
mover M direccin de intervalo
N [nombre_ruta]
nombre
[lista_argumentos]
salida O byte de puerto
proceder P [=direccin] [nmero]
salir Q
registrar R [registrar]
buscar S lista de intervalos
seguimiento T [=direccin] [valor]
desensamblar U [intervalo]
Note que al terminar aparece el guin que nos indica que el DEBUG tiene
nuevamente el control de las operaciones, con lo cual Uds. podrn ingresar ms
comandos
-r
-r bx
BX 0000
:
Como podemos observar no nos devuelve el signo sino que ahora nos
muestra : para que ingresemos el valor que queremos que sea almacenado en
el registro BX.
-r bx
BX 0000
:5555
-r
AX=0000 BX=5555 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000
DI=0000
DS=1987 ES=1987 SS=1987 CS=1987 IP=0100 NV UP EI PL NZ NA
PO NC
1987:0100 8936C7DE MOV [DEC7],SI
DS:DEC7=0000
-
En negrilla vemos que el registro BX qued modificado con el nuevo valor
tipeado.
Suma y Resta.
Ejemplo S1: Se pide sumar dos valores (200 y FFF) .
Vamos a ingresar las siguientes instrucciones en el orden como se dan.
Los nmeros indicados
-a
1987:0100 mov ax,200
1987:0103 mov bx,FFF
1987:0106 add ax,bx
1987:0108 int 20
1987:010A
-
Ingresemos ahora el comando r
-u
Este comando nos muestra nuestro programa compilado y muchas otras
instrucciones que se encuentran en mquina pero que a nosotros no os
interesan y que solo sirven para ensuciar nuestro razonamiento, por ello
es preferible el comando
u XXXX XXXX (desde-hasta).
-d
(DISPLAY) que nos muestra la memoria. Esta est dividida en dos partes:
a) La comprendida por caracteres hexadecimales que nos permiten ver
todo el contenido de la memoria porque la combinacin de bits en un
nibble (4 bits) siempre tiene representacin en hexadecimal.
b) En caracteres, en castellano o ingles, pero noten que es inentendible
porque normalmente la configuracin de memoria no tiene una
estructura semntica y sintctica que podamos comprender. En otros
ejercicios veremos que si podemos leer desde la memoria caracteres
comprensibles.
c) El guin que separa en dos partes la memoria expresada en
hexadecimal no indica el cambio de palabra.
Para este ejercicio nos falta conocer como se informan las direcciones. La
manera es simple, entre corchetes [ ]. Ingrese las instrucciones que se dan a
continuacin.
-a
1987:0100 mov ax,[0200]
1987:0103 mov cx,[0FFF]
1987:0107 add ax,cx
1987:0109 int 20
1987:010B
-
Ahora vamos a ejecutar el programa. Partimos del comando r para que nos
muestre el estado de los registros y la primera instruccin del programa.
-r
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000
DI=0000
DS=1987 ES=1987 SS=1987 CS=1987 IP=0100 NV UP EI PL NZ NA
PO NC
1987:0100 A10002 MOV AX,[0200] DS:0200=A708
-
Vemos que AX = 0000 que CX= 0000 y que la direccin [0200] = A708 que est
indicada por el registro DS que se encuentra en la parte inferior derecha del ejemplo y
en negrilla. Ahora vamos a usar el comando TRACE que se representa por la letra t.
Este nos permite ver paso a paso que sucede en nuestro computador.
-t
AX=A708 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000
DI=0000
DS=1987 ES=1987 SS=1987 CS=1987 IP=0103 NV UP EI PL NZ NA
PO NC
1987:0103 8B0EFF0F MOV CX,[0FFF]
DS:0FFF=DB52
-
-t
AX=A708 BX=0000 CX=DB52 DX=0000 SP=FFEE BP=0000 SI=0000
DI=0000
DS=1987 ES=1987 SS=1987 CS=1987 IP=0107 NV UP EI PL NZ NA
PO NC
1987:0107 01C8 ADD AX,CX
-
-t
AX=825A BX=0000 CX=DB52 DX=0000 SP=FFE8 BP=0000 SI=0000
DI=0000
DS=1987 ES=1987 SS=1987 CS=00CA IP=0FA8 NV UP DI NG NZ
NA PE CY
00CA:0FA8 90 NOP
-
NOTA: Podemos ejecutar directamente (t) pero nos mostrar la segunda instruccin a
ejecutarse y la primera ya ejecutada. Tipee q en la lnea de comando, vuelva a tipear
DEBUG y cargue nuevamente el programa, posteriormente empiece directamente con
el TRACE.
Resolver e informar.
Utilice el comando TRACE (t) para ejecutar el programa.
Ejercicio 1. Sumar el contenido de una direccin y de una constante.
Ejercicio 2: Reste dos nmeros utilizando registros. El primero menor que el
segundo.
La instruccin para restar es SUB.
Verifique el valor de los bits del STATUS REGISTER
Ejercicio 3: Suma y resta. Sume dos nmeros y reste otro. Utilice constantes, no
direcciones.
Verifique el valor de los bits del STATUS REGISTER
Ejercicio 4: Sume dos nmeros y reste una direccin.
Divisin del acumulador en dos partes.
-r
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000
DI=0000
DS=1987 ES=1987 SS=1987 CS=1987 IP=0100 NV UP EI PL NZ NA
PO NC
1987:0100 A10002 MOV AX,[0200] DS:0200=A708
-
Como vemos AX = 0000 si tipeamos el comando r ax nos permite modificar el
el acumulador, como muestra el ejemplo.
-rax
AX 0000
:faf7
-r
AX=FAF7 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000
DI=0000
DS=1987 ES=1987 SS=1987 CS=1987 IP=0100 NV UP EI PL NZ NA
PO NC
1987:0100 A10002 MOV AX,[0200] DS:0200=A708
-
-a 0100
1987:0100 mov ah,03
1987:0102 int 20
1987:0104
-t
AX=03F7 BX=0000 CX=0000 DX=0000 SP=FFE8 BP=0000 SI=0000
DI=0000
DS=1987 ES=1987 SS=1987 CS=00CA IP=0FA8 NV UP DI PL NZ NA
PO NC
00CA:0FA8 90 NOP
-
As terminamos de ejecutar esta parte. Hagamos lo mismo con la parte inferior.
-a100
1987:0100 mov al,bb
1987:0102 int 20
1987:0104
-r
AX=03FF BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000
DI=0000
DS=1987 ES=1987 SS=1987 CS=1987 IP=0100 NV UP EI PL NZ NA
PO NC
1987:0100 B0BB MOV AL,BB
-t
AX=03BB BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000
DI=0000
DS=1987 ES=1987 SS=1987 CS=1987 IP=0102 NV UP EI PL NZ NA
PO NC
1987:0102 CD20 INT 20
-t
AX=03BB BX=0000 CX=0000 DX=0000 SP=FFE8 BP=0000 SI=0000
DI=0000
DS=1987 ES=1987 SS=1987 CS=00CA IP=0FA8 NV UP DI PL NZ NA
PO NC
00CA:0FA8 90 NOP
-
Ahora vamos a sumar las dos partes que componen el acumulador (AX). Para eso
hacemos el siguiente programa.
-a100
00CA:0100 add ah,al
00CA:0102 int 20
00CA:0104
y lo ejecutamos.
-r
AX=03BB BX=0000 CX=0000 DX=0000 SP=FFE8 BP=0000 SI=0000
DI=0000
DS=1987 ES=1987 SS=1987 CS=00CA IP=0100 NV UP DI PL NZ NA
PO NC
00CA:0100 00C4 ADD AH,AL
-t
AX=BEBB BX=0000 CX=0000 DX=0000 SP=FFE8 BP=0000 SI=0000
DI=0000
DS=1987 ES=1987 SS=1987 CS=00CA IP=0102 NV UP DI NG NZ
NA PE NC
00CA:0102 CD20 INT 20
Multiplicacin y divisin.
C:\>debug
-a
1987:0100 mov al,4
1987:0102 mov cl,5
1987:0104 mul al,cl
1987:0106 int 20
1987:0108
-g106
AX=0010 BX=0000 CX=0005 DX=0000 SP=FFEE BP=0000 SI=0000
DI=0000
DS=1987 ES=1987 SS=1987 CS=1987 IP=0106 NV UP EI PL NZ NA
PO NC
1987:0106 CD20 INT 20
-r
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000
DI=0000
DS=1987 ES=1987 SS=1987 CS=1987 IP=0100 NV UP EI PL NZ NA
PO NC
1987:0100 B0BB MOV AL,BB
-t
AX=00BB BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000
DI=0000
DS=1987 ES=1987 SS=1987 CS=1987 IP=0102 NV UP EI PL NZ NA
PO NC
1987:0102 B1AA MOV CL,AA
-t
AX=00BB BX=0000 CX=00AA DX=0000 SP=FFEE BP=0000
SI=0000 DI=0000
DS=1987 ES=1987 SS=1987 CS=1987 IP=0104 NV UP EI PL NZ NA
PO NC
1987:0104 F6E0 MUL AL
-t
AX=8899 BX=0000 CX=00AA DX=0000 SP=FFEE BP=0000 SI=0000
DI=0000
DS=1987 ES=1987 SS=1987 CS=1987 IP=0106 OV UP EI PL NZ NA
PO CY
1987:0106 CD20 INT 20
Para visualizar mejor las posibilidades de Verdadero y Falso que se pueden presentar
utilizaremos dos variables alfabticas. El programa
-a
1987:0100 jmp 0113
1987:0102
-e 102 "Saltamos varias instrucciones verdad " 0d 0a "$"
-a 113
1987:0113 mov dx,102
1987:0116 mov ah,9
1987:0118 int 21
1987:011A int 20
1987:011C
-
-g
Saltamos varias instrucciones verdad
C:\>debug
-a 100
1987:0100 mov ax,333
1987:0103 mov bx,222
1987:0106 xchg bx,ax
1987:0107 int 20
1987:0109
-t 3
C:\>format a:/s
Inserte un nuevo disco en la unidad A:
y presione Entrar cuando est listo...