Вы находитесь на странице: 1из 14

Material de Apoyo Arquitectura del Computador

2012

DEBUG

Clase

Programa del DOS que es utilizado para probar y depurar programas ejecutables. Es muy til para escribir programas muy pequeos en lenguaje ensamblador, examinar el contenido de un archivo o examinar el contenido de memoria. Para empezar a trabajar en debug dgito la su nombre respectivo y pulso enter, al pulsar la entrada o archivo ejecutable del DOS aparecer el promt de debug el cual es un guin -. FUNCIONES PRINCIPALES Recorrer y modificar la memoria ram Observar y modificar los registros Cargar en memoria programas Ensamblar en memoria directamente un programa Generar programas a partir de codigo en memoria Visualizar y modificar el estado del computador (prtos,inform,etc) Permite ejecutar un programa en modo de paso sencillo (una paso a la vez) de manera que podamos ver el efecto de cada instruccin sobre las localidades de memoria y los registros.

Caractersticas de Debug 1. 2. 3. 4. Despliega todo el cdigo de un programa y los datos en formato hexadecimal. No distingue entre maysculas y minsculas. Se debe colocar un espacio entre el comando y el parmetro. Su despliegue consta de tres partes: (Izquierda) Direccin hexadecimal del ltimo byte de la izquierda que se despliega en forma segmento:desplazamiento. (Centro) Representacin hexadecimal del rea desplegada. (Derecha) Representacin en ASCII de los bytes que contienen caracteres desplegables. 5. Cada lnea desplegada consta de 16 bytes separados en 8 bytes por un guin -. 6. Por cada byte en la lnea se representan por dos caracteres hexadecimales ms un espacio en blanco. 7. Teclas F1 repite carcter por carcter de la ultima instruccin y F5 la repite toda.

Comandos de DEBUG Ensamblar Comparar bloques de memoria Volcar Desplegar Escribir Ingresar

A [Direccin] C [Direccin de intervalo] D [Intervalo] E Direccin [Lista]

Ing. Fabian Robles UFPS www.robgon.net

Pg 1

Material de Apoyo Arquitectura del Computador

2012

Llenar localidades memoria con valores Ir hasta un punto especificado Hex Suma y diferencia de 2 HEX Entrada Cargar en memoria Mover el contenido de memoria Nombre al programa Salida Proceder a llamar una subrutina Salir Registrar mostrar registros Buscar caracteres en memoria Seguimiento paso a paso Desemsamblar Escribir un archivo desde debug Asignar memoria expandida Desasignar memoria expandida Asignar pginas de memoria expandida Mostrar estado de memoria expandida

F [Lista de intervalos] G [=Direccin] [Direcciones] H Valor 1 Valor 2 I Puerto L [Direccin] [Unidad] [1 Sector] [Nmero] M Direccin de intervalo N [Nombre ruta] [Lista de argumentos] 0 Bytes de puerto P [-Direccin] [Nmero] Q R [Registrar] S [Lista de intervalos] T [-Direccin] [Valor] U [Intervalo] W [Direccin] [Unidad] [1 Sector] [Nmero] XA [Nmero de pginas] XD [Identificador] XM [Lpgina] [Ppgina] [Identificador] XS

Ejemplos de DEBUG 1. C:\WINDOWS>debug -d ds:200 Muestra el contenido de memoria a partir del segmento de datos en un desplazamiento de 200H (6810):(512) 1A9A:0200 1A9A:0210 1A9A:0220 AA 0A C0 75 FA 80 3E C0 - D7 00 74 73 E8 68 07 BE 91 D6 BF 54 CB A0 39 DF - E8 1B 0A E8 FB 09 75 16 80 3E 83 CF 00 75 0F BA - 96 80 E8 C3 1F E8 D7 E2 Ing. Fabian Robles UFPS www.robgon.net Pg 2 ...u..>...ts.h.. ...T..9.......u. .>...u..........

Material de Apoyo Arquitectura del Computador

2012

1A9A:0230 1A9A:0240 1A9A:0250 1A9A:0260 1A9A:0270

BA B8 7E E9 CF 06 80 3E - 8D CF 00 75 42 E8 F1 03 72 10 80 3E 83 CF 00 75 - 36 80 3E C1 D7 00 75 46 r EB 2D 80 3E 9C D7 00 75 - 07 80 3E 83 CF 00 74 08 C6 06 8E CF 01 E9 CA FE - E8 C4 00 74 86 80 3E C2 D7 00 74 03 E9 1F FF C6 - 06 8E CF 01 E9 17 FF 80

..~....>...uB... ..>...u6.>...uF .-.>...u..>...t. ...........t..>. ..t.............

2. Una palabra rudimentaria en la BIOS nos explica una indicacin rudimentaria de los dispositivos instalados. BIOS -d 40:10 Localidades en que se encuentra instalados los dispositivos detectados por la BIOS 0040:0010 0040:0020 23 C2 FE 80 02 92 10 A0-00 00 28 00 28 00 30 0B 3A 34 31 02 30 0B 0D 1C-E0 4F E0 50 E0 50 E0 48 #.........(.(.0. :41.0....O.P.P.H

23C2 es una localidad de memoria para pasarlo a la realidad sebemos invertirlo: 23 C2 = C2 23 en binario es 1100001000100011 1 1 0 0 1 0 0 0 0 0 1 0 0 0 1 0 portatil

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 11 0 0 0 0 1 0 0 0 1 0 0 0 1 1 = C2 23

Para la siguiente explicacin nos basamos en:

15,14 (2 bits) Nmeros de puertos paralelos conectados. En el ejemplo es 3 00=0 01=1 10=2 11=3 BIOS maneja 3 estados Normal, EPP, ECP por eso en el ejemplo nos da resultado 3 puertos 11-9 (3 bits) Nmero de puertos seriales conectados. En el ejemplo es 1 000=0 001=1 010=2 011=3

Ing. Fabian Robles UFPS www.robgon.net

Pg 3

Material de Apoyo Arquitectura del Computador

2012

7,6 (2 bits) Nmero de dispositivos de disco flexible. En el ejemplo es 0 00=1 01=2 10=3 11=4 5,4 (2 bits) Modo inicial de vdeo. En el ejemplo es 80 x 25 a color. 00 = No usado 01 = 40*25 color 10 = 80*25 color 11= 80*25 Mono 2 Mouse instalado 1= Si En el ejemplo es No=0 1 Coprocesador matemtico presente. En el ejemplo es Si = 1 0 Unidad de disco flexibles presente. En el ejemplo es Si = 1

3. Unas localidades de memoria nos muestra la marca, modelo y derechos de autor de la BIOS como lo es -d FE00:0 luego de pulsar enter siguen pulsando d y sigue apareciendo toda la informacin 4. Unas localidades de memoria nos muestra la fecha de la BIOS como lo es -d FFFFF:5 5. Para cambiar el estado del teclado a encendido Posicin del Bit Insert activa Capslock active Numlock activa Scroll Lock active Alt presionada Ctrl presionada Shift izquierdo presionado Shift derecho presionado Ejemplos: -e 40:17 10 Activa el scroll lock 76543210 Decimal Hexadecimal

1 0 0 0 0 0 0 0 = 128 (10) = 80H 0 1 0 0 0 0 0 0 = 64(10) = 40H 0 0 1 0 0 0 0 0 = 32 (10) = 20H 0 0 0 1 0 0 0 0 = 16 (10) = 10H 0 0 0 0 1 0 0 0 = 8 (10) = 08H 0 0 0 0 0 1 0 0 = 4 (10) = 04H 0 0 0 0 0 0 1 0 = 2(10) = 02H 0 0 0 0 0 0 0 0 = 1(10) = 01H

Ing. Fabian Robles UFPS www.robgon.net

Pg 4

Material de Apoyo Arquitectura del Computador

2012

-e 40:17 20 Activa el Num Lock -e 40:17 40 Activa el Caps Lock -e 40:17 60 Activa el Num lock y el Caps Lock -e 40:17 50 Activa el Caps Lock y el Scroll Lock -e 40:17 00 Desactiva todo Suma total de valores de combinaciones

Valor de Comb F0H E0H D0H C0H B0H A0H 09H 08H 07H

Insert X X X X X X X X

Caps X X X X

Num X X

Scroll X

Valor de Comb 06H 05H

Insert

Caps X X X

Num X

Scroll

04H 03H

X X

X X

02H 01H

00H

ENSAMBLAR EN MEMORIA Para ensamblar un programa en el Debug se utiliza el comando "a" (assemble); cuando se utiliza este comando se le puede dar como parametro la direccin donde se desea que se inicie el ensamblado. Si se omite el parametro el ensamblado se iniciar en la localidad especificada por CS:IP, usualmente 0100H, que es la localidad donde deben iniciar los programas con extensin .COM, y sera la localidad que utilizaremos debido a que debug solo puede crear este tipo especfico de programas. Aunque en este momento no es necesario darle un parametro al comando "a" es recomendable hacerlo para evitar problemas una vez que se haga uso de los registros CS:IP, por lo tanto tecleamos: -a 0100 [Enter] debido a que el CS contiene 0C1B Al hacer sto aparecer en la pantalla algo como: 0C1B:0100 y el cursor se posiciona a la derecha de estos nmeros, ntese que los primeros cuatro dgitos (en sistema hexadecimal) pueden ser

Ing. Fabian Robles UFPS www.robgon.net

Pg 5

Material de Apoyo Arquitectura del Computador

2012

diferentes, pero los ltimos cuatro deben ser 0100, ya que es la direccin que indicamos como inicio. Ahora podemos introducir las instrucciones: 0C1B:0100 mov ax,0002 ; coloca el valor 0002 en el registro ax 0C1B:0103 mov bx,0004 ; coloca el valor 0004 en el registro bx 0C1B:0106 add ax,bx ; le adiciona al contenido de ax el contenido de bx 0C1B:0108 int 20 ; provoca la terminacin del programa y se vuelve al prompt del debug 0C1B:010A Int 20 No es una instruccin de ensamblador, es una llamada a una interrupcin del sistema operativo. Para ejecutar el programa que escribimos se utliza el comando "g" (Correr el programa en memoria), al utilizarlo veremos que aparece un mensaje que dice: "Program terminated normally". Naturalmente con un mensaje como ste no podemos estar seguros que el programa haya hecho la suma, pero existe una forma sencilla de verificarlo, utilizando el comando "r" del Debug podemos ver los contenidos de todos los registros del procesador, simplemente teclee: - r [Enter] AX=0006 BX=0004 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=0C1B ES=0C1B SS=0C1B CS=0C1B IP=010A NV UP EI PL NZ NA PO NC 0C1B:010A 0F DB oF -g 108, esta instruccin ejecuta el programa, se detiene en la direccin 108 y muestra los contenidos de los registros.

GUARDAR Y CARGAR LOS PROGRAMAS Los pasos a seguir para guardar un programa ya almacenado en la memoria son:

1. Obtener la longitud del programa restando la direccin final de la direccin inicial,


naturalmente en sistema hexadecimal.

2. Darle un nombre al programa y extensin. 3. Poner la longitud del programa en el registro CX. 4. Ordenar al Debug que escriba el programa en el disco.
Al terminar de ensamblar el programa se vera as:

Ing. Fabian Robles UFPS www.robgon.net

Pg 6

Material de Apoyo Arquitectura del Computador

2012

0C1B:0100 mov ax,0002 0C1B:0103 mov bx,0004 0C1B:0106 add ax,bx 0C1B:0108 int 20 0C1B:010A

- h 10a 100 ; h obtener la longitud programa donde se hace: dir. final y luego dir. inicial 020A 000A ; resultado del comando anterior donde es: rta de suma y rta resta de las 2 dir anterior. - n prueba.com ; n nos permite colocarle un nombre al programa - r CX ;cambio el valor del registro CX por el obtenido en el tamao del comando h 000A CX 0000:000A -w ; w escribe el programa en el disco y nos indica cuantos bytes escribio. El programa queda almacenado en el directorio en D.O.S. que nos encontremos ubicados. Writing 000A bytes

Para cargar un archivo ya guardado son necesarios dos pasos: Proporcionar el nombre del archivo que se cargar. Cargarlo utilizando el comando "l" (load). - n prueba.com ; n coloca el nombre de prueba.com - l ; l carga programa - u 100 109 ; u verificar que el programa se cargo en memoria (desensambla para mostrarlo) siempre se cargan a partir de la direccin 100H 0C3D:0100 B80200 MOV AX,0002 0C3D:0103 BB0400 MOV BX,0004 0C3D:0106 01D8 ADD AX,BX 0C3D:0108 CD20 INT 20 EJERCICIOS

Ing. Fabian Robles UFPS www.robgon.net

Pg 7

Material de Apoyo Arquitectura del Computador

2012

1. Explicacin de la Interrupcin INT 21 para obtener datos de la BIOS -a 0100 1A9A:0100 Mov AH,2A EN LA PROXIMA INSTRUCCION EL IP AUMENTO EN 2 1A9A:0102 INT21 1A9A:0104 NOP Ejecutemos -r para observar los contenidos de los registros y ejecutemos el paso a paso pero con -p La fecha de la BIOS se nos da de la siguiente manera: AL: Da de la semana donde 0= domingo CX: Ao en HEX DH: Mes 01 al 12 DL: Dia 01 al 31 2. Ejercicios de sumas y restas, e incrementos y decrementos MOV AX,FFEE MOV BX,45BC MOV CX,AX INC CX DEC BX ADD AX,BX MOV DX,AX SUB CX,0001 MOV AX,CX ADD BX,0001 NOP ; Al final de los valores deben quedar igual AX,BX y CX que al inicio del programa. 3. Ejercicio de Pila MOV AX,8BCF ADD BX,0002 INC AX PUSH BX PUSH AX INC SP DEC SP POP AX POP BX MOV CX,BX NOP 4. Ejemplo de guardar el programa anterior en el disco duro. 1A9A:0100 B8CF8B MOV AX,8BCF 1A9A:0103 83C302 ADD BX,+02 1A9A:0106 40 INC AX 1A9A:0107 53 PUSH BX 1A9A:0108 50 PUSH AX 1A9A:0109 44 INC SP 1A9A:010A 4C DEC SP 1A9A:010B 58 POP AX Ing. Fabian Robles UFPS www.robgon.net Pg 8

Material de Apoyo Arquitectura del Computador

2012

1A9A:010C 5B POP BX 1A9A:010D 89D9 MOV CX,BX 1A9A:010F 90 NOP - h 10F 100 020F 000F - n prueba.com - r CX -w Writing 000F bytes Realizo el calculo del tamao en bytes del programa en memoria. Retorna la SUMA y RESTA de los valores colocados como parmetros. Defino el nombre para mi archivo Modifico el valor del CX pues es el No. que toma Debug para calcular tamao Escribo el programa en disco osea genero un archivo

INSTRUCIONES INICIALES Instruccin MOV: Transferencia de datos entre celdas de memoria, registros y acumulador. Sintaxis: MOV Destino,Fuente Donde Destino es el lugar a donde se movern los datos y fuente es el lugar donde se encuentran dichos datos. Los diferentes movimientos de datos permitidos para esta instruccin son: Direccionamiento de Registro Copia un byte, palabra o palabra doble a un registro. Ejemplo: MOV AH,AL MOV AX,CX MOV EBX,EDX

Direccionamiento inmediato Copia un byte, palabra o palabra doble a un registro o localidad de memoria. Ejemplo: MOV AH,10 MOV AX,A MOV EDX,22331221H

Direccionamiento directo Copia un byte, palabra o palabra doble a un registro. Ejemplo: MOV AH,[ 10H ] MOV VAT, AX MOV EDX, [ 23H ]

Direccionamiento indirecto por registro Copia un byte, palabra o palabra doble entre un registro y la localidad de memoria direccionada por un registro ndice o base. Ejemplo: MOV AX,[ BX ] MOV [ SI ],AX MOV EDX, [ EDI ]

Direccionamiento base ms ndice Ing. Fabian Robles UFPS www.robgon.net Pg 9

Material de Apoyo Arquitectura del Computador

2012

Copia un byte, palabra o palabra doble entre un registro y la localidad de memoria direccionada por un registro base mas un registro ndice. Ejemplo: MOV AX,[ BX + SI ] MOV [ BX + DI ], AX MOV EDX, [ EBX + ESI ]

Direccionamiento relativo al registro Copia un byte, palabra o palabra doble entre un registro y la localidad de memoria direccionada por un registro ndice o base ms un desplazamiento. Ejemplo: MOV AX,[ BX + 2] MOV [ SI + 4 ],AX MOV EDX, [ EDI +1]

Ejemplos MOV AL,AH Si MOV EBX,EDX Si MOV EDX,AL Si MOV SI,DI Si MOV BL,DX No MOV ES,DS No MOV AX,CX Si MOV CX,DH Si MOV EAX,CX Si MOV CS,AX No MOV AX,EDX No MOV V1,[ SI ] No

Instruccin PUSH: Coloca una palabra en la pila 2 o 4 bytes. Sintaxis: PUSH fuente La instruccin PUSH decrementa en dos el valor de SP y luego transfiere el contenido del operando fuente a la nueva direccin resultante en el registro recin modificado. El decremento en la direccin se debe a que al agregar valores a la pila sta crece de la direccin mayor a la direccin menor del segmento, por lo tanto al restarle 2 al valor del registro SP lo que hacemos es aumentar el tamao de la pila en dos bytes, que es la nica cantidad de informacin que puede manejar la pila en cada entrada y salida de datos. Ejemplo: Suposicin SP=FFEE PUSH AX ; Coloca en el registro de pila el valor de AX y decrementa el SP SP=FFEC PUSH BX ; Coloca en el registro de pila el valor de BX y decrementa el SP SP=FFEA

Instruccin POP: Recupera un dato de la pila de 2 bytes o 4 bytes Sintaxis: POP destino Esta instruccin transfiere el ltimo valor almacenado en la pila al operando destino, despues incrementa en dos el registro SP. Este incremento se debe a que la pila va creciendo desde la direccin mas alta de memoria del segmento hacia la mas baja, y la pila solo trabaja con palabras (2 bytes), entonces al incrementar en dos el registro SP realmente se le esta restando dos al tamao real de la pila. Ejemplo: Suposicin de que el SP= FFEA POP AX ; Saca del regsitro de pila el valor de AX e incrementa el SP SP=FFEC Ing. Fabian Robles UFPS www.robgon.net 10 Pg

Material de Apoyo Arquitectura del Computador

2012

POP BX ; Saca del regsitro de pila el valor de BX e incrementa el SP SP=FFEE Ejemplos PUSH AX POP AX PUSHF PUSHA POPA POP CS Copia a la pila el valor contenido en AX Saca el valor apuntado por el SP, y lo copia en el registro AX Copia el estado de las banderas sobre la pila Copia las palabras registro propsito general, apuntadores e ndices en la pila. Proceso inverso al anterior. Instruccin ILEGAL

Instruccin ADD: Adicin de los operandos. Sintaxis: ADD destino, fuente Suma los dos operandos y guarda el resultado en el operando destino.

Ejemplo: MOV AX,0006 ; Mueve al AX el nmero 0006H MOV BX,0018 ; Mueve al BX el nmero 0010H ADD AX,BX ; Suma el contenido del AX con el BX y guarda el resultado en AX=0016H INT 21H ; Finaliza el programa.

Instruccin SUB: Substraccin de operandos. Sintaxis: SUB destino, fuente Resta el operando fuente del destino. Ejemplo: MOV AX,0006 ; Mueve al AX el nmero 02E4H MOV BX,0018 ; Mueve al BX el nmero 00FFH SUB AX,BX ; Suma el contenido del AX con el BX y guarda el resultado en AX=01E5H INT 21H ; Finaliza el programa.

Instruccin DEC: Decrementar el operando Sintaxis: DEC destino Esta operacin resta 1 al operando destino y almacena el nuevo valor en el mismo oeprando. Ejemplo: MOV AX,4567 ; Mueve al AX el nmero 4567H MOV BX,1234 ; Mueve al BX el nmero 1234H Ing. Fabian Robles UFPS www.robgon.net 11 Pg

Material de Apoyo Arquitectura del Computador

2012

DEC AX ; Decrementa el AX en 1 osea el AX=44566H DEC BX ; Decrementa el BX en 1 osea el BX=1233H Instruccin INC: Incrementar el operando. Sintaxis: INC destino La instruccin suma 1 al operando destino y guarda el resultado en el mismo operando destino. Ejemplo: MOV AX,4567 ; Mueve al AX el nmero 4567H MOV BX,1234 ; Mueve al BX el nmero 1234H DEC AX ; Incrementa el AX en 1 osea el AX=44568H DEC BX ; Incrementa el BX en 1 osea el BX=1235H

Instruccin MOVSX y MOVZX: Se utilizan para complementar las limitaciones de MOV. Permitiendo mover de un byte a dos y de dos a cuatro sea de una byte a una palabra o de una palabra a una palabra doble [ Etiqueta ] MOVS(Z)V [ registro / memoria ], [ registro / memoria / inmediato ] MOVSX: Para mover valores aritmticos con signo relleno de unos de izquierda a derecha. MOVZX: Para mover valores sin signo rellena de ceros de izquierda a derecha. Ejemplo: Var1 DB 1111b Var2 DW 10101111b MOVSX AX,Var1 // Mueve el valor Var1 al AX el cual toma el valor AX=1111 1111 MOVZX EBX,Var2 // Mueve el valor Var2 al EBX el cual toma el valor EBX=0000 0000 1010 1111 MOVSX Var1,AH // Mueve el valor AH a Var1 el cual toma el valor Var1=1111 Instruccin XCHG: Intercambio de los valores de los operandos Realiza una transferencia de datos diferente a la realizada por MOV Mueve valores copiando del origen al destino, permitiendo intercambiar los datos del origen al destino y del destino al origen. Solo se permite su uso para el intercambio de datos entre dos registros y entre registro y memoria. Por ejemplo: XCHG AX,CX XCHG AX,VAR1 XCHG VAR1,BX

Instruccin LEA Load Offset Address : Cargar direccin desplazamiento Su funcin es la de inicializar un registro con un valor de desplazamiento.

Ing. Fabian Robles UFPS www.robgon.net 12

Pg

Material de Apoyo Arquitectura del Computador

2012

Sintaxis: [ Etiqueta ] LEA [ registro / memoria ] Ejemplo: Si suponemos que los valores de los registros son: AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=166C ES=166C SS=166C CS=166C IP=0100 NV UP EI PL NZ NA PO NC 166C:0100 BA3986 MOV DX,8639 VAR3=3434 VAR3 DB 1234 LEA AX,VAR3 // Carga la direccin de desplazamiento de VAR3 al AX:3434 MOV BX,[AX] // Mueve el valor de la posicin 3434 que sera 1 MOV CX,[AX+2] // Mueve el valor de la posicin 3436 que sera 3 Valor de las teclas Insert Caps Lock Bloq Num Scroll Lock 80H 40H 20H 10H Programa para cambiar el estado de las teclas Page 60,120 TITLE programa cambio del estado de las teclas .MODEL SMALL .STACK 64 .DATA POS DB 00 VAX DW ? VALOR DB 0A0H .CODE BEGIN PROC FAR MOV AX,@DATA MOV DS,AX PUSH DS MOV DX,0000H MOV BX,40H MOV DS,BX MOV AL,DS:[17H] MOV AH,DS:[18H] INSERT: CMP AL,0A0H JE MINSERT NUM: CMP AL,20H JE MNUM JMP SALIR Ing. Fabian Robles UFPS www.robgon.net 13 Pg

Material de Apoyo Arquitectura del Computador

2012

MINSERT: MOV DX,0080H SUB DS:[17H],DX MOV AL,DS:[17H] JMP NUM MNUM: MOV DX,0020H SUB DS:[17H],DX MOV AL,DS:[17H] SALIR: POP DS MOV AX,4C00h INT 21 BEGIN ENDP END BEGIN

.MODEL SMALL .STACK 64 .DATA .CODE holamiamor PROC FAR MOV AX,@DATA MOV DS,AX fgfdgdfgfdgfdgdgdfgfd

MOV AX,4C00h INT 21 holamiamor ENDP comoestas PROC NEAR

comoestar ENDP

END

Ing. Fabian Robles UFPS www.robgon.net 14

Pg

Вам также может понравиться