viernes, 28 de enero de 2011

Guia de Laboratorio No.3 del Debug

 
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?

4 comentarios:

  1. 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.

    ResponderEliminar
  2. Profesor los ejercicios del 3.2 en adelante se hacen un poco difícil resolverlos, no se entiende muy bien como hacerlos.

    ResponderEliminar
  3. para el ejercicio 2.5:
    debug
    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.

    ResponderEliminar
  4. Recuerden que para cargar un programa en memoria:
    c:\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.

    ResponderEliminar