¿Quién sabe cuántos comandos de depuración hay?
DEBUG es una utilidad de DOS y una herramienta de depuración de programas para programadores. Se puede utilizar para verificar bytes en cualquier lugar de la memoria y modificar bytes en cualquier lugar. Se puede utilizar para ejecutar un programa paso a paso para verificar la corrección del programa. También puede rastrear el proceso de ejecución, comparar valores antes y después de la ejecución de instrucciones, comparar y mover rangos de datos en la memoria y leer y escribir archivos y sectores del disco.
Sus funciones incluyen los siguientes aspectos.
1. Ingresar, modificar, rastrear y ejecutar directamente programas fuente en lenguaje ensamblador
2. Observar el contenido del sistema operativo
3. el contenido del BIOS de la ROM;
4. Observe y cambie los valores de configuración en la RAM
5. >
La depuración será Todos los datos se tratan como una secuencia de bytes. Entonces puede leer cualquier tipo de archivo. DEBUG puede reconocer dos tipos de datos: datos hexadecimales y caracteres de código ASCⅱⅱ. Su formato de visualización es el valor hexadecimal de cada byte y el carácter de código ASCⅱII correspondiente al byte con valor entre 32 y 126.
Hay dos formas de ingresar datos en la depuración: modo de solicitud y modo sin solicitud. Cuando se utiliza el método de solicitud, el usuario ingresa un comando para ingresar datos, seguido de la dirección donde se ingresarán los datos. Luego, el usuario puede ver el contenido existente y dos puntos en este lugar. En este punto, el usuario puede ingresar un nuevo valor cuando se le solicite o presionar Intro o CTRL C para regresar al mensaje horizontal corto (-). Cuando se utiliza el método sin solicitud, el usuario puede ingresar la dirección de almacenamiento de los datos que se ingresarán y los bytes que se ingresarán. Sin embargo, a diferencia de cuando se usa un procesador de textos o un editor de texto, cuando se usa DEBUG, el usuario no puede mover directamente el cursor a un punto de entrada para ingresar o modificar datos, sino que ingresa uno o varios bytes a la vez.
Cuando se utiliza DEBUG, solo se pueden involucrar datos en la memoria, por lo que generalmente se especifica la dirección de memoria a procesar. El formato de entrada de la dirección es: [dirección del segmento]: [desplazamiento]. Si no se ingresa ninguna dirección, la depuración utilizará el segmento de memoria actual, comenzando desde el byte en la dirección 100H. Los primeros 100H bytes están reservados para el prefijo del segmento del programa. Esta área especial se utiliza para establecer la conexión entre DOS y el programa. DEBUG siempre utiliza cuatro dígitos hexadecimales para representar direcciones. Utilice dos dígitos para representar datos hexadecimales.
En este punto, todos deberían tener una comprensión preliminar de DEBUG, pero saber esto no es suficiente. A continuación, hablaré sobre el formato de comando y los comandos de DEBUG. Al escribir
Depuración
Cuando se llama al depurador, aparecerá un breve mensaje horizontal y el usuario podrá ingresar los comandos del depurador después de este breve mensaje horizontal. Algunos comandos de depuración muestran direcciones de memoria y generan dos puntos como indicaciones. Después de estas indicaciones, el usuario puede ingresar un nuevo valor para cambiar el valor original de la posición mostrada. Si el usuario presiona Enter o CTRL C en lugar de ingresar un nuevo valor, el valor original no cambia.
Normalmente no es necesario separar la dirección del nombre del comando. Por ejemplo, para usar el comando de volcado d para ver los datos en la dirección 100, puede ingresar el comando en cualquiera de las siguientes situaciones:
D100
D 100
d . 100
d, 100
Si hay un error en el comando de entrada, DEBUG marcará la posición donde se enfrenta el error en la siguiente línea, por ejemplo. :
-s100 d 12
Error
Los comandos y funciones de depuración son los siguientes:
*Un comando de ensamblaje [dirección]
Función: ensambla las instrucciones directamente en el código de la máquina, ingresa a la memoria.
Nota: Se utiliza para ensamblar programas pequeños y modificar programas de destino. Todos los números ingresados están en hexadecimal y las declaraciones ensambladas cargadas en la memoria por el usuario se almacenan continuamente. Si no se especifica ninguna dirección y el comando ensamblador no se ha utilizado anteriormente, la declaración modificada se ensamblará en el área CS:0100.
Ejemplo a:>Depuración
-a 0100
08F1: 0100 MOV ah 09
08F1: 0102 MOV Fax, 109
08f 1: 0105 INT 21H;
08f 1: 0107 INT 21H; cuando se ejecuta la depuración de cmd en -XP, debe ser int 20h, INT 20H y 21H no serán válidos. Error de instrucción.
08F1: 0109 db"En qué puedo ayudarte$"
08f1: 0115 ←Salir del estado A.
-g/run
¿Puedo ejecutar los resultados por usted?
Una finalización normal del programa significa un funcionamiento normal.
* C[rango de direcciones de origen][dirección de destino] comando de comparación
Función: compara el contenido de dos áreas de almacenamiento y muestra sus direcciones y contenidos si son diferentes.
Por ejemplo, c4000:0 3f100
Se utiliza para comparar 4000 el contenido entre 0000-4000:003f y DS:0100-DS:013f: el formato de visualización es el siguiente. siguiente:
p>
La dirección de memoria 1 contiene el valor 1 contiene el valor 2, la dirección de memoria 2.
Ejemplo: Comparar el contenido de 4000: 0 3f100.
-C4000: 0 3F 100
4000: 0000 64 43 08f 1: 0100
4000: 00013e 69 08f 1: 0101 Mostrar diferencia de contenido
4000:0002 78 FF 08f 1:0102
……………………………………………………
Si el rango a comparar está dentro de DS, entonces no es necesario indicar la dirección del segmento:
Por ejemplo: -C 04 100; comparar DS: 0-DS: 4 y DS: 100-DS: 104.
Otro formato del comando c es el siguiente: c dirección 1 L longitud dirección 2.
Por ejemplo: -C000: 0l 40; en comparación con DS: 0 a partir de 0000: 0, es igual al comando -C0000: 030, el resultado de la pantalla es el siguiente:
C0 08F1:0000
0000:0001 10 20 08f 1:0001 Todos comparan 4 bytes.
0000:0002 1C 00 08f 1:0002
0000:0003 49 7F 08F1:0003
* D[dirección] o D[dirección inicial] [ dirección de destino] comando de volcado.
Función: Muestra la información de la memoria en forma de imágenes de la memoria.
Descripción: Dump muestra el contenido de la imagen de la memoria en dos partes: caracteres hexadecimales a la izquierda y caracteres ASCII a la derecha. Todos los caracteres no imprimibles se expresan con puntos (.). Cada línea muestra 16 bytes, con un guión entre el octavo y el noveno bytes; la dirección de segmento implícita en este comando es el valor de DS. Si no se especifica ninguna dirección inicial, el comando D comenzará a mostrarse desde la celda al lado de la última celda mostrada. Si el comando D no se ha utilizado antes, la visualización comenzará a partir del contenido del registro de segmento inicializado, más el desplazamiento de dirección 0100H.
Ejemplo: -d10, 4f es el contenido de DS:4f. Si no se especifica ninguna dirección de segmento en el comando D, de forma predeterminada es el segmento DS.
Si se especifica una dirección de segmento, el rango especificado se enumera a partir de la dirección de segmento especificada.
Por ejemplo: -dfff: 00: 0f
También podemos especificar la longitud para enumerar el contenido de la memoria requerido.
Por ejemplo -d 100 L20 es el contenido mostrado por DS: 100 -DS: 11f, ***20H bytes:
* E[dirección][cadena de bytes] modifica el Comando de memoria
Función: Modifica el valor de la memoria desde la dirección especificada.
Formato: dirección inicial [línea de datos]
(1) Reemplace el contenido de la celda del rango especificado con el contenido dado.
-Directorio de direcciones E
Ejemplo: -e 100 41 42 43 44 48 47 46 45
-D 100, L08
08f 1: 0100 41 42 43 44 48 47 46 45 ABCDHGFE...
(2) Memoriza el contenido uno por uno
Por ejemplo: -E 100:
08F1: 01007642: 42 es ingresado por el operador.
Este comando cambia el contenido de la memoria original de 100 de 76 a 42, que se puede ver con el comando d.
* F[rango de direcciones][byte o cadena de bytes] comando de relleno
Función: Llena la memoria especificada por el rango de direcciones con los bytes o cadena de bytes a llenar.
Por ejemplo: -F 100 120 61 62 63 64
-d100 11f
08f 1: 0100 61 62 63 64 61 62 63 64-61 62 63 64 61 62 63 63 ABCD ABCD ABCD ABCD
08f 1:010 13 67 98 E3 C8 2E B3 B6-03 21 AC 19 3121 4E 96g……1…
Si el fila de datos Fuera del rango especificado, los valores vacíos se ignoran.
Por ejemplo: -f 100 107 41 43 43 44 45 46 47 48 49 4A 4B 4c 4d-d 100, lof.
08f 1:0100 41 42 43 44 45 46 47 64-61 62 63 64 abcdefgdabcdabbcd
Como se puede ver en el ejemplo anterior, los datos fuera del rango se ignoran.
Además, tanto el comando f como el e pueden rellenar cadenas:
Por ejemplo: -F 100 105 "MSDOS"
-d 100 l0f p>
08f 1:0100 4D 53 44 4F 53 46 47 64-61 62 63 64 MS DOS FGabcd ABCD
* G[=dirección de inicio][[punto de interrupción]...] ejecutar comando .
Función: ejecutar el programa que se está depurando, detener la ejecución cuando se alcanza el punto de interrupción y mostrar el indicador de registro y el siguiente comando a ejecutar.
Nota: Si no se especifica ninguna dirección inicial, la dirección de instrucción actual está determinada por el contenido de los registros CS e IP. Si el usuario especifica una dirección inicial, la ejecución comenzará en la dirección inicial especificada. Si se especifica un punto de interrupción, la ejecución se detendrá cuando la instrucción alcance la dirección de instrucción y se mostrará el contenido de cada bit de indicador de registro y el siguiente comando a ejecutar. El usuario puede configurar hasta 10 puntos de interrupción.
Ejemplo: a: \ >Depurar tan.exe
-u: Descompilar en código de programa en lenguaje ensamblador
…………
. .
-g 100 especifica el punto de interrupción
El programa finaliza normalmente:
Además, podemos ejecutar un archivo. En depuración.
Por ejemplo: a: \ >Debug tan.exe
-g
Puedes comenzar a ejecutar este programa como en DOS:
* H[valor numérico][valor numérico] Comando de operación aritmética hexadecimal
Función: muestra la suma de dos números hexadecimales y la suma del primer número y la diferencia del segundo número respectivamente.
Descripción: Completa operaciones simples con números hexadecimales para los usuarios.
Por ejemplo: -h4538 5623
9B5B EF15
* I[dirección del puerto]
Función: entrada desde el puerto especificado y visualización (hexadecimal) Un byte.
Por ejemplo: -i70
F9; el contenido del puerto 70 es F9.
El comando I puede obtener datos del puerto 64K de 80X86.
* L[dirección][número de disco:][número de sector lógico][número de sector]
Función: Cargar los sectores absolutos de un archivo o disco en la memoria.
Nota: Un solo comando L puede cargar hasta 80H sectores, donde los números de disco son 0, 1, 2, 3... representando respectivamente A, B, C,... errores de lectura de disco. y se muestra un mensaje de error.
(1)Formato 1. lEl número de sector desde el cual se carga el nombre de la unidad de dirección.
Este método puede cargar el contenido del rango de sectores especificado en el disco en el área de memoria a partir de la dirección especificada. El número de sector se refiere al método lógico/sector.
Ejemplo: -l100 01, monta el sector 0 de la unidad A en CS:100.
-d 100 10f
08f 1: 0100 EB 3C 90 3C 53 44 4F 53-36 2E 32 32 02 01 01 00l, MSDOS 6.22...
(2) Formato 2: dirección de carga L
De esta manera, el archivo especificado se puede cargar en la memoria. El archivo cargado se puede especificar al ingresar a DEBUG o se puede crear mediante el comando n. , el formato es -n Nombre del archivo:
Ejemplo 1 depuración tan.pas
-L 100
Ejemplo 2 depuración
- North Tempas
p>-L 100
Nota: El comando l solo puede leer sectores lógicos, no la tabla de particiones del disco duro.
Los códigos de disco utilizados en el comando l son A=00, B=01, C = 02...
* M[rango de direcciones][dirección inicial] comando de transferencia de datos
Función: Mueve el contenido de la unidad de almacenamiento dentro del rango de direcciones a la dirección especificada de la dirección inicial.
Nota: Durante el proceso de transferencia, el área de origen y el área de destino pueden superponerse parcialmente; los datos del área de origen permanecen sin cambios después de la transferencia.
Ejemplo: -e100 41 42 43 44 45
-d100 10f
08f 1: 0100 41 42 43 44 45 62 62 63 64-61 62 63 64 61 62 63 64 61 62 63 64 abcdebcdabc dabcd
-M 100 104 110
-d110 L1F
ABCDE……
* N[Número de disco:][ruta][nombre de archivo][extensión]
Función: define el nombre del archivo de operación.
Nota: Se pueden definir dos archivos de operación al mismo tiempo, y los bloques de control de archivos formados se pueden configurar en las memorias CS:5C y CS:6C para operaciones de comando L y W posteriores. Al depurar un programa en ejecución, agregamos el nombre del programa del archivo y los parámetros del programa o archivo en ejecución después de iniciar la depuración, pero al depurar un período, se pueden cargar otros archivos para probar. En este momento, podemos usar el comando n para configurarlo sin salir de la depuración.
Ejemplo: a: \ >Depurar tan.exe
-Hola
Cuando el programa se depura por un período de tiempo, si desea cargar tan .exe en tan1 .pas, luego -ntanl.pas
* O[dirección de puerto][datos] comando de salida
Función: envía bytes al puerto de salida especificado.
Por ejemplo: cuando al iniciar el ordenador se nos solicita introducir una contraseña, podemos cancelar la contraseña de las siguientes formas.
-O 70 10
_O 71 00
* P[=dirección][datos] comando de procesamiento
Función: Detener uno Una instrucción de llamada de subrutina, una instrucción de bucle, una instrucción de interrupción o la siguiente instrucción de una instrucción de cadena repetida.
Descripción: Al ejecutar una instrucción de llamada de subrutina, una instrucción de bucle, una instrucción de interrupción o una instrucción de cadena repetida, emita el comando P para ejecutar las instrucciones relevantes y regresar a la siguiente instrucción a ejecutar. El comando P, al igual que el comando T, se utiliza para rastrear el proceso de ejecución del programa. Podemos especificar la dirección inicial y el número de instrucciones del programa en el comando P. Si no se especifica, la dirección del programa especificada por CS:IP comenzará a ejecutar un comando a la vez.
La diferencia entre el comando P y el comando T es que el comando P ejecuta CALL/INT como una instrucción, lo que simplifica el proceso de seguimiento. El comando P solo ejecuta comandos en RAM, mientras que el comando T puede ejecutar programas en RAM y ROM.
*Comando Q salir.
* Comando de registro R[register]
Función: 1. Muestra el contenido de un único registro y proporciona funciones de modificación. En segundo lugar, se muestra el contenido de todos los registros, además del estado de las banderas de letras y la siguiente instrucción a ejecutar. En tercer lugar, muestra el estado de 8 banderas y proporciona funciones de modificación. Si no quieres cambiar, entra.
Ejemplo: -r bx
bx 0050
:51
-r
AX = 0000 BX = 0051 CX = 0000 SP = FFEE BP = 0000 SI = 0000 DI = 0000
DS = 0003 ES = 0 cd3 SS = 0 cd3 IP = 0100 NV UP EI PL NZ NA OP NC
0cd 3:0100 DB OF
Si desea cambiar el registro de banderas y presiona enter y -RF, la depuración mostrará el contenido de las banderas. Si desea cambiar alguna bandera, simplemente ingrese el nombre de la bandera.
La configuración del nombre de la bandera no está configurada. La configuración del nombre de la bandera no está configurada.
Salida OV (sin desbordamiento) NV (sin desbordamiento) cero ZR NZ (no igual a cero)
Dirección DN (disminución) arriba (aumento) transporte auxiliar AC NA ( sin acarreo)
Interrupción EI (habilitado) DI (deshabilitado) indicador de paridad PE (número par) PO (número impar)
Símbolo NG (negativo) PL (positivo) acarreo CY NC (borrar transporte)
Ejemplo: -RF
Nv up ei plnz na ponc: -ovdi ←Ingrese el valor.
* S[rango de direcciones][cadena]
Función: encuentra la cadena dada en el rango de direcciones especificado.
Descripción: se utiliza para especificar una cadena dentro del rango de direcciones de búsqueda. Si se encuentra, se mostrará la dirección; de lo contrario, se mostrará el mensaje de depuración directamente. La dirección implícita es el valor del segmento DS.
La memoria aquí se puede representar mediante (dirección inicial) (dirección final) o (dirección inicial) L (longitud), y se pueden mezclar cadenas y líneas de datos: como 02.76 "BC".
Por ejemplo: -d100 lof
08f 1: 0100 2A 41 43 0B 31 42 96-FF F0 B9 8A F3 00 b 1..AC, 1B... p >
-100 chelines "corriente alterna"
08F1:0102← significa encontrado, a partir de 0102,
* T[=dirección][número de instrucciones] comando de rastreo
Función: Realice un seguimiento de la ejecución del programa una por una. Después de ejecutar cada instrucción, se mostrará el contenido de cada registro.
Nota: normalmente se realiza un seguimiento de una instrucción, pero el usuario también puede configurar el número de instrucciones para realizar un seguimiento de varias instrucciones a la vez. Después de ejecutar cada instrucción, se muestran los contenidos de todos los registros y el estado de las banderas.
Las instrucciones se rastrean una por una -T[=dirección de inicio]
Se detiene después de ejecutar una instrucción desde la dirección especificada y muestra el contenido de todos los registros y los valores de bits de bandera. Si se utiliza la dirección especificada, la ejecución comenzará desde el CS: IP actual.
Respuesta:\ gtDebugging
[Nombres antiguos o nombres modernos latinizados de animales y plantas]
08f 1:0100 MOV DL 03H
MOV, 02H
08f 1: 0104 INT 21H
08F1: 0106 INT 20H
08F1: 0108
Equivalente a -ED
AX = 0000 BX = 0000 CX = 0000 DX = 0000 SP = FFEE BP = 0000 SI = 0000 DI = 0000
DS = 08f 1 ES = 08f 1 SS = 08f 1 CS = 08f 1 1P = 0105 NV UP EI PL NZ poli
09f 102 B402 MOV ah, 02
Si se especifica la dirección inicial, el comando T comenzará desde el Inicio especificado Seguimiento de la dirección. También podemos especificar la cantidad de instrucciones que se rastrearán a la vez y usar Ctrl S para pausar la visualización de la pantalla para observación.
-t = 100 10; traza 10 instrucciones de CS: 100.
* U[dirección de inicio] o [rango de direcciones]
Función: Convertir el contenido de la memoria en declaraciones ensambladoras.
Nota: La cantidad de bytes desensamblados depende del modo de visualización del sistema del usuario y de las opciones utilizadas en el comando u.
(1) Compile y desensamble 32 bytes de la dirección especificada.
-U[dirección] ← A partir de CS: 100, desmontado en 32 bytes.
Si se omite esta dirección, el ensamblaje comienza a 32 bytes de la unidad siguiente a la última instrucción del comando U.
(2) Desmonte la estufa de almacenamiento designada.
-u dirección inicial y dirección final (la longitud es l)
Por ejemplo: -U 100 109
08F1: 0100 CD20 INT 20
08F1:0102 FF9F009A llamada FA12[BX 9A00]
08F1:0106 Bloqueo F0
08f 1:0107 Fe 1D llamada lejos [DI]
08F1:0109 Bloqueo F0
Nota: Si se especifica un rango, se descompilará todo el rango.
* W[dirección][número de unidad:][sector inicial][número de sector] comando de escritura
Función: Escribe los datos modificados en el disco.
Nota: Puede comenzar a escribir datos desde la dirección de memoria especificada en el disco, o puede escribir el archivo de depuración en el disco sin especificar parámetros ni parámetros de dirección.
Establezca el tamaño del archivo en el registro CX o BX cuando ejecute w
(1) Escriba datos en el sector especificado del disco.
-W dirección inicial nombre de la unidad sector inicial número de sector
(2) Escribe datos en el archivo especificado
-W dirección inicial
p>
Ejemplo a: \ >Depuración
[Nombres antiguos o nombres modernos latinizados de animales y plantas]
08f1: 0100....
. Escribir sección del programa
08F1: 012A....
-R·CX
CX: 0000
: 2A←Escribir el El número de bytes es la dirección final del programa menos la dirección inicial.
-n tan.com←Establece el nombre del archivo con com como sufijo.
-w
Twist 002A bytes
Pregunta
Respuesta:\gtTan←puede ejecutar este programa.
*Comando "XD": Liberar memoria.
Ejemplo: -XD 0001
Manejar 0001 desasignación ← liberado.
XD se puede redistribuir después del lanzamiento.
*Comando "XM"; asigna el área de la página de memoria en la memoria extendida al área de la memoria principal.
Formato: XM RAM número de página larga número de página de memoria principal identificador
Ejemplo: -XM3 2 0001←Asigna el área de página lógica n.° 3 del identificador 0001 al área de página real n.° 2 .
La página lógica 03 está asignada a la página física 02
* Comando "XS": muestra el uso actual de EMS.
Format-XS
Una colección de comandos prácticos de depuración
1. Reparación de disquetes defectuosos de pista cero no físicos
Este tipo de daño tiene No hay rayones ni moho evidentes en la superficie del disquete. Normalmente, los datos se pueden recuperar o se puede reutilizar el disquete.
El método de procesamiento es el siguiente:
1. Ingrese a la depuración
II. Saque un disco intacto del área de inicio e insértelo en la unidad de disquete. .
-l 100 0 1
III. Inserte el disco dañado en la disquetera.
-w 100 0 1
Q
Nota: La capacidad del disco bueno y del disco malo debe ser la misma.
2. Lea datos de un disquete defectuoso con la pista física 0
En términos generales, un disco con la pista 0 dañada debe descartarse, por lo que también puede probar los siguientes métodos:
Tratamiento de magnetización: utilice un imán fuerte para moverlo repetidamente cerca de la superficie del disco dañado. No toque el soporte del disco para evitar rayar la superficie y luego intente formatearlo nuevamente.
Reemplazo de disquete: abra con cuidado el disquete, separe el disco duro del chip metálico, luego péguelos según el método original y vuelva a formatear.
Diskfix: Debes haber usado diskfix mucho y la función de reparación de disco que contiene es muy fácil de usar. Puede corregir la mayoría de los errores de la superficie del disco.