Debug ETN-701
Debug ETN-701
Debug ETN-701
Sinopsis
Opciones
Una vez que el programa está en ejecución, el indicador ("prompt") es un guión "-",
indicando que el "Shell" espera recibir órdenes. La opción más sencilla es la
interrogación ?, cuyo resultado es una lista resumida de las opciones disponibles:
ensamblar A [dirección]
comparar C dirección de intervalo
volcar D [intervalo]
escribir E dirección [lista de valores]
llenar F lista de intervalos
ir G [=dirección] [direcciones]
hex H valor1 valor2
entrada I puerto
cargar L [dirección] [unidad] [primer_sector] [número]
mover M dirección de intervalo
nombre N [nombre_ruta] [lista_argumentos]
salida O byte de puerto
proceder P [=dirección] [número]
salir Q
registrar R [registrar]
buscar S lista de intervalos
seguimiento T [=dirección] [valor]
desensamblar U [intervalo]
escribir W [dirección] [unidad] [primer_sector] [número]
asignar memoria expandida XA [#páginas]
desasignar memoria expandida XD [identificador]
asignar páginas de memoria expandida XM [Lpágina] [Ppágina] [identificador]
mostrar estado de la memoria expandida XS
La mayoría de los comandos de debug ejecutan una acción y vuelven al indicador del
shell, pero si es un comando largo, como puede ser mostrar un trozo grande de código,
puede detenerse pulsando CTRL-Pausa o interrumpirse con CTRL-C para volver al
shell.
Errores
Comandos
Resultado:
Ejemplo:
-h 0003 0002
0005 0001
-h 0000 0001
0001 FFFF,
Parámetros: [registro]
Registro de flags:
NV UP EI PL NZ NA PO NC
Desbordamiento
Poner: OV Quitar: NV
Dirección (reducción/incremento)
poner: DN quitar UP
Interrupción (activar/desactivar)
poner: EI quitar: DI
Acarrero Auxiliar ( sí / no )
poner: AC quitar: NA
Acarreo (sí / no )
poner: CY quitar: NC
Ejemplo 1:
-r
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=2048 ES=2048 SS=2048 CS=2048 IP=0100 NV UP EI PL NZ NA PO NC
2048:0100 92 XCHG DX,AX
Ejemplo 2:
-r ax
AX 0000
:01
-r
AX=0001 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=2048 ES=2048 SS=2048 CS=2048 IP=0100 NV UP EI PL NZ NA PO NC
2048:0100 92 XCHG DX,AX
Ejemplo:
-E 100
2048:0100 56.
Ejemplo:
C:\>debug (enter)
-
Ahora insertamos las instruccionesm usando el comando interno Assembly (a), solo
tecleamos la letra 'a' y luego enter:
-a (enter)
0D1B:0100
debug nos presenta un guión en el prompt y nos indica que nuestro programa inicia en
la dirección 100; ahora cada instrucción incrementará este valor ala localidad siguiente.
Cada instrucción debemos teclear (enter).
Nuestro programa tiene 9 bytes de longitud (desde la dirección 100 hasta 108
inclusive); en la última línea pulsa enter para volver al prompt; despues de codificar el
programa queremos escribir algunos caracteres directo en memoria a partir dela
localidad 109 (justo donde termina nuestro programa en la dirección 108); Usaremos el
comando Edit (e), teclea 'e' seguido de la dirección de memoria que queremos editar.
-e ds:109 'ciao$'
-u cs:100
0D1B:0100 B409 MOV AH,09 ; usaremos la funcion 9 de la int 21 para mandar
imprimir una cadena de texto.
0D1B:0102 BA0901 MOV DX,0109 ; ponemos la dirección de la cadena en el
registro dx
0D1B:0105 CD21 INT 21 ; llamamos la int 21
0D1B:0107 CD20 INT 20 ; FIN DE PROGRAMA
0D1B:0109 63 DB 63 ; 'h'
0D1B:010A 69 DB 69 ; 'o'
0D1B:010B 61 DB 61 ; 'l'
0D1B:010C 6F DB 6F ; 'a'
0D1B:010D 2419 AND AL,19 ; '$'
-dds:100
0D1B:0100 B4 09 BA 09 01 CD 21 CD-20 63 69 61 6F 24 19 4D ......!. ciao$.M
0D1B:0110 53 2D 00 00 00 20 56 65-72 73 69 6F 34 00 0A 0D S-....Versio4...
Ahora guardemos nuestro programa enun archivo llamado test.com; debemos insertar
el nombre del archivo, el tamaño del programa y usar el comando Write (w); el tamaño
del programa es 14 bytes (cuentalos!) que se escribe 0E en hexadecimal
-rcx (enter)
CX 0000
:e (enter)
-ntest.com (enter)
-w (enter)
Writing 0000E bytes
-
Listo! hemos terminado salimos de debug tecleando 'q' y podemos tratr de correr el
programa
-q
Ejecutemos el programa!!!
C:\>test (enter)
hola