Guía No.3 del Debug
REVISION DE LOS RECURSOS DE LA PC MEDIANTE DEBUG
El DEBUG permite visualizar la memoria, introducir programas en ella y rastrear su ejecución. Una característica de debug es que despliega todo el código del programa y los datos de formato hexadecimal.
LISTA DE COMANDOS
A[dirección] Ensamblar: ensambla instrucciones simbólicas y la pasa a código maquina.
C [Com1] [Fin1] [Com2] Comparar: compara dos bloques de memoria
D [Comienzo] [Final] Volcar: muestra el contenido de un área de memoria
E dirección [lista] Introducir: introduce datos en memoria, iniciando en una localidad específica.
F lista de rango Llenar: Llena un rango de memoria
G [dirección] [direcc.] Ir: corre el programa ejecutable que se encuentra en memoria
H valor1 valor2 Aritmética Hexadecimal: Realiza la suma y resta de direcciones
I puerto Entrada:
L [dirección] Cargar: carga un programa.
M [intervalo] [destino] Mover: mueve el contenido de una localidad de memoria a otra.
N [ruta y nombre] Nombre: nombra un programa.
O [puerto] [byte] Salida:
P [dirección][número] Continuar: ejecuta una instrucción
Q Salir: sale de la sesión del debug
R [registro] Registro: rastrea el contenido de registros
S [rango] [lista] Buscar:
T [dirección][valor] Seguir: rastrea la ejecución de una instrucción
U [rango] Desensamblar: desensambla código maquina y pasa a código simbólico
W [dirección] Escribir: Graba un programa en disco.
1) Usar el comando D, para mostrar el contenido de la memoria
1.1 verificación del equipo del sistema
Una palabra del estado del equipo en el área de datos del BIOS, ofrece una indicación rudimentaria de los dispositivos instalados. Esta palabra esta en las localidades 410H-411H, que puede ver desde debug por medio de una dirección de dos partes: 40 para la dirección del segmento y 10 para el desplazamiento, teclee lo siguiente
D 40:10 (enter)
El despliegue debe empezar con algo como esto::
0040:0010 63 44
En este ejemplo, los 2 bytes en la palabra del estado del equipo contienen los valores hexadecimales 63 y 44. Invierta los bytes (44 63) y convierta a binario.
Bit
|
15
|
14
|
13
|
12
|
11
|
10
|
9
|
8
|
7
|
6
|
5
|
4
|
3
|
2
|
1
|
0
|
0
|
1
|
0
|
0
|
0
|
1
|
0
|
0
|
0
|
1
|
1
|
0
|
0
|
0
|
1
|
1
|
A continuación está una explicación del código hexadecimal
bits
|
dispositivo
|
15,14
|
Numero de puertos paralelos para impresora conectados =1(01)
|
11-9
|
Numero de puertos seriales conectados =2(binario 010)
|
7,6
|
Numero de dispositivos de discos flexibles =2(donde 00=1, 01=2, 10=3, 11=4)
|
5,4
|
Modo inicial de video = 10(donde 01=40X25 en color, 10=80X1225 en color, 11= 80X1225 monocromático)
|
1
|
1= coprocesador matemático esta presente
|
0
|
1= unidad de disco flexible esta presente
|
1.2 Verificación del tamaño de la memoria (localidades : 413H y 414H)
Teclee:
D 40:13(enter)
Despliegue (depende de cada PC):
0040:0013 .. .. .. .. XX XX XX
Los primeros dos bytes mostrados en el desplazamiento 0013H son los KB de memoria en hexadecimal, con los bytes en secuencia inversa. Ejemplo
Hexadecimal inverso
|
Hexadecimal corregido
|
Valor decimal (k)
|
00 02
|
02 00
|
512
|
80 02
|
02 80
|
640
|
1.3 Verificación del numero de serie y la nota de derecho reservado
(localidad: FE000H)
Teclee
D FE00:0 (Enter)
La pantalla debe mostrar un numero de siete dígitos seguido, en maquinas convencionales, de una nota de derecho reservados es mas reconocible en el área ASCII a la derecha. La nota de derechos reservados puede continuar pasando sobre lo que ya esta mostrado; para verla, basta con presionar D, seguido de la tecla enter.
1.4 Verificación de su ROM BIOS inicia en la localidad FFFF5H, registrada como mm/dd/aa para verla teclee:
D FFFF: 5
El conocimiento de esta fecha puede ser útil para determinar la edad y modelo de la computadora.
1.5 Verificación de la identificación del modelo, en la localidad FFFFEH
Teclee:
D FFFF: E (enter)
Código hex.
|
modelo
|
F8
|
PS/2 modelos 70 y 80
|
F9
|
PC convertible
|
FA
|
PS/2 modelo 30
|
FB
|
PC-XT (1986)
|
FC
|
PC-AT, PC-XT modelo 286, PS/2 modelos 50 y 60
|
FE
|
PC-XT (1982), portátil (1982)
|
FF
|
Primera IBM PC
|
Ahora que ya sabe como usar el comando para desplegar información, puede ver el contenido de cualquier localidad de almacenamiento. También puede avanzar por la memoria con solo presionar D de forma repetida. DEBUG muestra de manera sucesiva 8 líneas, continuando a partir de la última operación D.
Para finalizar, teclee Q (salir), o continúe con la siguiente practica.
II) Usando los comandos del debug realizar los siguientes ejercicios:
2.1) Mostrar el estado de todos los registros y banderas
2.2) Realizar la suma y resta de los siguientes pares numéricos
* 100 108
* 108 100
2.3) Asignar al registro AX el valor 34A3 y BX el valor 33DA, verificando luego el resultado
2.4) Utilizando las instrucciones del Debug, examinar el bloque de memoria 100-110 y compararlo con el bloque 200-210, mostrando el resultado.
2.5) Llenar el segmento de memoria de 0100 – 0170 con asteriscos, utilizando para ello la instrucción F del debug.
2.6) Proporcione los comandos de Debug para las siguientes necesidades:
a) Muestre la memoria iniciando el en desplazamiento 264H en el segmento de datos.
b) Muestre la memoria iniciando en la localidad 410H.
Nota: Separe esta dirección en los valores de su segmento y del desplazamiento.
c) Ingrese el valor hexadecimal A8B364 en el segmento de datos iniciando en la localidad 200H.
2.7) Suponga que ha utilizado debug para introducir el comando siguiente:
- E CS: 100 B8 45 01 05 25 00
El valor 45 hexadecimal supuestamente era 54. Codifique otro comando E para corregir solo el byte que esta incorrecto. Esto es cambiar el 45 por 54 de forma directa.
III) Trabajando con programas en debug
3.1) Elabore un programa que cargue los registros con los siguientes valores
AX:10
BX:20
CX:30
DX:40
Luego ejecutar los siguientes comandos y anotar las observaciones.
* u 100
* d 100
* g 100
* q
3.2) El siguiente programa escribe un asterisco en la pantalla, grabar ese programa en el disco y luego ejecutarlo desde el prompt del DOS.
0BBD:0100 mov AH,02 Utiliza la interrupción 21, función 02
0BBD:0102 mov DL,2a para escribir un carácter en la pantalla. 0BBD:0104 int 21 El valor del ASCII a mostrar se ingresa
0BBD:0106 int 20 en DL, en este caso 2a
0BBD:0108
3.3) Cargar el programa anteriormente grabado y verificar si el programa se encuentra en la memoria
3.4) Mover el programa anterior a la posición 010C
3.5) 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.
3.6) Ingresar con el comando a el siguiente código
mov ax,156
add ax,100
add ax,100
int 20
Mediante los comandos del debug copiar las últimas 3 instrucciones a la posición donde se encuentra la int 20.
Guardar el programa y luego ejecutarlo verificando el valor de AX
3.7) Utilice el comando A de debug para introducir las siguientes instrucciones:
mov bx,25
add bx,30
shl bx,1
sub bx,22
nop
Desensamble las instrucciones y rastree su ejecución hasta nop y revise el valor del registro bx después de cada instrucción.
3.8). Dado el siguiente programa:
Instrucción de maquina
|
Código simbólico
|
Explicación
|
B82301
052500
8BD8
03D8
8BCB
2BC8
2BC0
90
|
MOV AX,0123
ADD AX,0025
MOV BX,AX
ADD BX,AX
MOV CX,BX
SUB CX,AX
SUB AX,AX
NOP
|
Mover el valor 0123 a AX
Sumar el valor 0025 a AX
Mover el contenido de AX a BX
Sumar el contenido de AX a BX
Mover el contenido de BX a CX
Restar el contenido de AX del de CX
Restar AX de AX (Limpiar AX)
No operación (No hacer nada)
|
a) Como introduciría este programa directamente en memoria?
b) Como verificar luego que el programa esta cargado en memoria?
3.9) La instrucción mov word ptr [120],25 mueve el numero 25 a las localidades de memoria 120 y 121.
La instrucción mov byte ptr [122],30 mueve el numero 30 a la localidad de memoria 122.
Si utiliza la instrucción mov dword ptr [123],50 ¿Cuántas localidades de memoria utilizaría este numero?
PROFESOR EN EL EJERCICIO 2.5 EL DEBUG ME MANDO ERROR AL INTENTAR LLENAR CON ASTERISCOS LA MEMORIA.. PERO PARA COMPROBAR EL PROCEDIMIENTO PROBE CON 00 Y FUNCIONÓ. Y EL EJERCICIO 2.6 NO ESTOY MUY CLARO.
ResponderEliminarProfesor los ejercicios del 3.2 en adelante se hacen un poco difícil resolverlos, no se entiende muy bien como hacerlos.
ResponderEliminarpara el ejercicio 2.5:
ResponderEliminardebug
f 100 170 2a ;se llenara el bloque 100 - 170 con el codigo
;ascii de asterisco que es 2a
d 100 170 ;muestra el espacio de memoria lleno.
Recuerden que para cargar un programa en memoria:
ResponderEliminarc:\debug
n nombre.com ;para nombrar el programa
l ;l para cargarlo en memoria
u ; para ver el codigo desemsamblado
r ; para ver el contenido inicial de
; los registros
t ; para ejecutar cada instruccion
p ; para ejecutar las interrupciones.