ClubEnsayos.com - Ensayos de Calidad, Tareas y Monografias
Buscar

Resumen y ejercicios del Debug

chivan1908Tutorial25 de Noviembre de 2012

7.080 Palabras (29 Páginas)712 Visitas

Página 1 de 29

Resumen y ejercicios del DEBUG

Uso del DEBUG.

Ingreso: Tipeamos la instrucción que se menciona seguidamente desde el prompt.

C: \ > DEBUG Después de dar enter aparecerá un guión

C:\>debug

-

Ya estamos posicionados en el DEBUG y éste está preparado para recibir instrucciones en ASSEMBLER.

Ejemplo 1: Ver las instrucciones permitidas en el ASSEMBLER básico.

Tipeamos lo siguiente:

-??

Y nos mostrará la información que sigue. Tipee y compruebe

ensamblar A [dirección]

comparar C dirección de intervalo

volcar D [intervalo]

escribir E dirección [lista]

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

-

Note que al terminar aparece el guión que nos indica que el DEBUG tiene nuevamente el control de las operaciones, con lo cual Uds. podrán ingresar más comandos

Cada una de la instrucciones que se mostraron anteriormente se irán explicando a lo largo de este apunte, donde aplicaremos un ejercicio específico para cada una de ellas incrementando las posibilidades, desde las más simples hasta las más complejas, para perfeccionar nuestro dominio de la programación.

Ejemplo 2: Ver los registros.

Este ejercicio nos permite que miremos el valor de varios registros y del registro de estado de la ALU (STATUS REGISTER). Para eso tipeamos:

-r

Y no muestra lo que sigue:

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 8936C7DE MOV [DEC7],SI DS:DEC7=0000

-

El significado de los diferentes registros se da en la tabla siguiente.

REF Nombre Que es lo que hace

AX Acumulador Almacena el resultado de operaciones matemáticas; lectura / escritura (I/O) dede/hacia los puertos que están conectados con los periféricos; almacena también un área de memoria temporal.

BX Registro Base Alacena direcciones o valores y puede interactuar con el Acumulador.

CX Registro Contador Utilizados para la ejecución de LOOPS y puede ser incrementado o decrementado según la instrucción que sea necesaria

DX Registro de Datos De acuerdo a la estructura de computadores analizada por nosotros corresponde al MDR (MEMORY DATA RGISTER) y es el paso intermedio para el ingreso de datos.

DS Registro de segmento de datos Es un puntero que nos indica la dirección donde se encuentran los datos.

ES Segmento extra para datos Igual que el anterior pero apuntando a una dirección mayor.

SS Registro de segmento de pila Indica donde se encuentra el STACK.

CS Registro de segmento código Indica donde esta almacenado el código para la ejecución del programa.

BP Puntero del STACK Registro complementario para no modificar el SS.

SI Registro de Indice de segmento Alacena una dirección que nos indica donde se encuentra el vector de datos.

DI Indice destino Contiene una dirección donde se copiara el vector de datos indicado por SI.

SP Puntero de Pila (STACK POINTER) Permite saber donde se encuentra el último dato almacenado en el STACK. Siempre debe ser mayor o igual al SS o BP

IP Apuntador de la siguiente instrucción (INSTRUCTION POINTER) También llamado PROGRAM COUNTER. Tiene almacenada la dirección de la próxima instrucción a ser ejecutada.

Ahora pasemos al registro bandera o STATUS REGISTER, que nos da el resultado de la actuación de la ALU

Señal REF Función REF Función

Overflow NV No hay OV Hay

Direction UP Hacia adelante DN Hacia atrás

Interrupts DI Desactivadas EI Desactivadas

Sign PL Valor positivo NG Valor negativo

Zero NZ No es cero ZR Es cero

Auxiliary Carry NA No hay acarreo AC Hay acarreo

Parity PO Paridad impar PE Paridad Par

Carry NC No hay acarreo CY Se produjo acarreo

El comando r (registro) nos permite interactuar con los registros de la CPU, posibilitando modificar sus contenidos. Cuando tipeamos r sin ningún otro parámetro nos muestra todos los registros con sus respectivos contenidos, pero si agregamos un parámetro nos va a mostrar solo el contenido del registro que nosotros mencionamos:

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

En el ejemplo vemos que BX tiene un valor 0000. Si ingresamos 5555 en : tendremos:

-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 números indicados

- a 100 Indica que se debe comenzar a ingresar datos a partir de la posición 100

XXXX: 0100 MOV AX, 200 Mover 200 al acumulador (AX)

XXXX: 0103 MOV BX, FFF Mover FFF al Registro Base (BX)

XXXX: 0106 ADD AX, BX Sumar BX a AX

XXXX: 0108 INT 20

XXXX: 010A Dar enter

- Aparece el signo del DEBUG que tiene el control.

-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 máquina 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).

1987:0100 B80002 1987:0103 BBFF0F

1987:0106 01D8 1987:0108 CD20

1987:010A B2E8

1987:010C 7421

1987:010E A0C9DE

1987:0111 0AC9

1987:0113 7505

1987:0115 3A45FF

1987:0118 7401

1987:011A AA

1987:011B 8B34

1987:011D 007619

MOV

MOV

ADD

INT

MOV

JZ

MOV

OR

JNZ

CMP

JZ

STOSB

MOV

ADD AX,0200

BX,0FFF

AX,BX

20

DL,E8

01,2F

AL,[DEC9]

CL,CL

011A

AL,[DI-01]

011B

SI,[SI]

[BP+19],DH

-

por ello es preferible el comando

–u XXXX XXXX (desde-hasta).

Si ingresamos el comando –u0100 0108 nos muestra el programa compilado. No tipeamos hasta 010A porque esta posición de memoria no la utilizamos y aparece instruccines que nosotros no hemos introducido en el sistema.

-u 0100 0108

1987:0100 B80002 MOV AX,0200

1987:0103 BBFF0F MOV BX,0FFF

1987:0106 01D8 ADD AX,BX

1987:0108 CD20 INT 20

-

Hagamos un alto y veamos como queda nuestro programa.

En la primer columna tenemos las posición de nuestras instrucciones comenzando desde la posición 0100 (las 4 primeras indican también la posición pero a ellas no nos referiremos por el momento).

En la segunda aparece la compilación.

Aquí hay algo realmente curioso:

B80002 – El primer byte es el código de operación. Fácil de entender.

El segundo corresponde a los dos últimos dígitos del número que nosotros queremos cargar en el acumulador.

El tercer byte tiene los dos primeros número del número que nosotros ingresamos.

Es decir que

...

Descargar como (para miembros actualizados) txt (31 Kb)
Leer 28 páginas más »
Disponible sólo en Clubensayos.com