Sie sind auf Seite 1von 28

Capitulo 3 ejecucin de instrucciones

Objetivo dar a conocer como introducir programas a la memoria

el programa DEBUG, el cual se puede ejecutar desde la lnea de comandos del DOS. Este programa permite visualizar la memoria, introducir programas en ella y rastrear su ejecucin. Una caracterstica de DEBUG es que despliega todo el cdigo del programa y los datos en formato hexadecimal.

A Ensamblar instrucciones simblicas y pasarlas a cdigo mquina C Comparar D Mostrar el contenido de un rea de memoria E Introducir datos en memoria, iniciando en una localidad especfica F Llenar(lista de intervalos) G Correr el programa ejecutable que se encuentra en memoria I Entrada(puerto) L Cargar M Mover (direcciones de intervalos.) N Nombrar un programa P Proceder o ejecutar un conjunto de instrucciones relacionadas Q Salir de la sesin con DEBUG R Mostrar el contenido de uno o mas registros S Buscar (lista de intervalos) T Rastrear la ejecucin de una instruccin U "Desensamblar "cdigo mquina y pasarlo a cdigo simblico W Escribir o grabar un programa en disco

En ingls
-? assemble A [address] compare C range address dump D [range] enter E address [list] fill F range list go G [=address] [addresses] hex H value1 value2 (Learn 2's Complement!) input I port load L [address] [drive] [firstsector] [number] Move M range address name N [pathname] [arglist] output O port byte proceed P [=address] [number] quit Q . . . . . . . . . (Learn this first!) register R [register] search S range list trace T [=address] [number] unassemble U [range] write W [address] [drive] [firstsector] [number]

La mayora de los comandos de debug ejecutan una accin y vuelven al indicador del shell, pero si es un comando largo, como puede ser mostrar un trozo grande de cdigo, puede detenerse pulsando CTRL-Pausa o interrumpirse con CTRL-C para volver al shell. Una caracterstica poco conocida, es que debug puede aceptar entradas desde un fichero "Script", que puede ser un simple fichero de texto ASCII en el que cada comando est separado del anterior por un INTRO.Cualquier cosa a partir del carcter punto y coma (;) hasta el final de la lnea, ser ignorado.

Debug es sin duda un programa antiguo pero de enorme potencial didctico para el principiante. Se trata de una utilidad interactiva de exploracin de bajo nivel, pero que tambin puede utilizarse para ciertas funciones. Por ejemplo, como un tosco traductor de sentencias ensamblador a lenguaje mquina. En especial si utiliza el comando W se puede borrar todo un disco duro con un simple comando errneo). Para utilizarlo basta invocarlo desde MS-DOS o desde una ventana DOS de Windows.

Comando R (Register)
Este comando nos permite examinar o modificar los contenidos de los registros internos de la CPU del 8086 La sintaxis es: -R [NOMBRE DE REGISTRO] .....nos despliega los contenidos del registro especificado -R ...............nos despliega los contenidos de todos los regisTros de la cpu

los dos puntos es una invitacin a modificar el contenido del registro

CONTENIDOS DE LOS REGISTROS DE LA CPU


00000H 0100 0CD5 0CD5 0CD5 0CD5 0000 0000 0000 0000 FFEE 0000 0000 0000 IP CS DS SS ES AX BX CX DX SP BP SI DI

MEMORIA
0CD5
Segmento de Cdigo Segmento de Datos Segmento de Stack Segmento Extra Activos (64kbyte)

0000

Flags

FFFFFH

Comando D (Dump): volcado


D ("Dump") permite obtener un volcado del contenido de la memoria (de debug). La sintaxis acepta dos formas:
D [direccin-inicial] [L posiciones-desde-direccin-inicial ] D [direccion-inicial][direccion-final]

Comando D (Dump): volcado


Sabemos que el punto de inicio de la BIOS es la direccin F000:FFF0, y que desde esta posicin hasta el final de la memoria DOS hay 16 bytes. Puede obtenerse un volcado de estas posiciones con el siguiente comando: -D F000:FFF0 La salida en mi equipo es:

En este caso el comando solo muestra una lnea porque ha alcanzado el final de la memoria. Puede verse que la fecha de la BIOS del sistema ocupa las ltimas posiciones.

Si se ordena el volcado de una direccin, sin indicar ningn nmero de posiciones, por defecto se toma el valor 128 (8 filas de 16 posiciones). Si desea una cantidad distinta, hay que aadir una L ("Long") y el nmero de posiciones, hasta un mximo de 64 KB (FFFF).Los dos comandos que siguen son equivalentes (recuerde que 80 es el equivalente hexadecimal de 128): D FE00:0000 D FE00:0000 L 80 He aqu el resultado:

Sabemos que esta zona corresponde al rea de la BIOS del Sistema...

Comando Enter (E)


Cargando datos ASCII en la memoria con el comando Enter

-E DS:200 ASCII
-D DS:200 204 0CDE:0200 41 53 43 49 49

COMANDOS L (LOAD) Y Write (W)


Para leer/escribir el contenido de disco a bajo nivel mediante los prefijos L ("Load") y W ("Write"). Se utiliza la siguiente sintaxis: L [Direccin] [Unidad] [Primer_sector] [Nmero]

W [Direccin] [Unidad] [Primer_sector] [Nmero]


El significado de los parmetros es como sigue: Direccin: Posicin de la memoria de debug, a partir de la cual se instalarn los datos ledos del disco, o se tomarn para el proceso de escritura (aqu se utiliza generalmente el valor 100h). Unidad: Valor numrico que indica la lgica a utilizar. 0 = A:; 1 = B:; 2 = C:; 3 = D:, etc Primer sector: A partir del que se realizar la lectura, o se comenzar a escribir. Nmero: Nmero de sectores que se desea cargar/escribir. Como debug no puede leer/escribir ms de 64 Kbytes (216 = 65536) y los sectores de disco son de 512 bytes, el mximo nmero de sectores es 128 (80h). As pues, el valor mximo aqu es 80.

COMANDOS L (LOAD) Y Write (W)

Ejemplo: Para obtener el contenido del sector de arranque ("Master boot sector" MBR) de un disquete en A:, utilizaremos el comando: C:\WINDOWS>debug - L 100 0 0 1 -D 100 L 200 Se Desplegar el contenido del sector 0 del disco A, el de arranque

Nombrar y cargar un archivo: N(Name) y L(Load)


Si lo que se busca est en un archivo, primero hay que cargarlo. Lo que se puede hacer de dos formas: en la propia invocacin de debug, o mediante los comandos N y L.
Por ejemplo, si queremos inspeccionar el contenido del fichero more.com, podemos utilizar dos formas: C:\WINDOWS>debug c:\windows\command\more.com C:\WINDOWS>debug - N c:\windows\command\more.com

-L
La sintaxis para el prefijo N es: N [path-name]nombre-de-archivo

En ambos casos el contenido del archivo ser cargado en memoria y podr ser utilizado.

COMPROBAR EL TAMAO DEL ARCHIVO CARGADO


Para ello usamos la opcin R (ver estado de los registros) y obtenemos el siguiente resultado:
-R AX=0000 BX=0000 CX=2917 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000 DS=17A7 ES=17A7 SS=17A7 CS=17A7 IP=0100 NV UP EI PL NZ NA PO NC 17A7:0100 E8CD0F CALL 10D0 Aqu nos interesa especialmente el contenido del registro CX, cuyo valor, 2917h (1519d) en este caso, seala el tamao del fichero en bytes. Tambin podamos haber utilizado directamente el comando R CX que nos proporciona el valor de dicho registro: -R CX CX 2917 : -

Comando S ("Search").
Existen dos sintaxis alternativas: S [direccin-de-inicio] [L longitud-a-explorar] [contenido-a-buscar] S [direccin-de-inicio] [direccin-final L] [contenido-a-buscar] El contenido a buscar debe darse en hexadecimal o entre comillas si es un texto ASCII. Por ejemplo: Se desea ver algunas caractersticas de la BIOS en un equipo IBM. Se que estos datos se alojan a partir de la posicin F000:0000 hasta el final de la memoria. Es decir, una longitud de 64 Kbytes (FFFF) a partir de la posicin de inicio, y que seguramente, los datos buscados estarn cerca de la identificacin de la propia BIOS (la cadena "IBM"). Por lo que utilizo la siguiente sintaxis: -S F000:0000 L FFFF "IBM"

Comando S ("Search").
y obtendramos la siguiente salida: F000:3A0C F000:3A70 F000:3B13 F000:4839 F000:48BA F000:492A F000:499A F000:4A0A con las direcciones donde se ha encontrado la ocurrencia buscada

El debug puede aceptar entradas desde un fichero "Script", que puede ser un simple fichero de texto ASCII en el que cada comando est separado del anterior por un INTRO. Despus del ltimo, que debe ser una "Q" para salir de debug, es conveniente dejar una lnea en blanco pulsando INTRO dos veces. Las lneas pueden contener comentarios. Cualquier cosa a partir del carcter punto y coma (;) hasta el final de la lnea, ser ignorado. ; esto es un comentario D ; aqu se mostrar algo... Suponiendo que tengamos un fichero "Script" de nombre Ordenes.txt, puede ser utilizado como entrada para debug mediante un comando de redireccin en la siguiente forma:

DEBUG < Ordenes.txt


Tambin puede conseguirse que el programa redireccione la salida hacia un fichero que puede ser inspeccionado ms tarde. Aunque tiene la dificultad de tener que trabajar "a ciegas", puede ser de utilidad en determinadas circunstancias. Por ejemplo, cuando se desea un volcado de determinadas zonas de la memoria. En el caso anterior podra obtenerse un fichero Result.txt con el siguiente comando: DEBUG < Ordenes.txt > Result.txt

Requerimientos de lenguaje ensamblador

Un compilador es un programa informtico que traduce un programa escrito en un lenguaje de programacin a otro lenguaje de programacin, generando un programa equivalente que la mquina ser capaz de interpretar. Usualmente el segundo lenguaje es lenguaje de mquina, pero tambin puede ser un cdigo intermedio (bytecode), o simplemente texto. Este proceso de traduccin se conoce como compilacin.[1] Un compilador es un programa que permite traducir el cdigo fuente de un programa en lenguaje de alto nivel, a otro lenguaje de nivel inferior (tpicamente lenguaje de mquina). De esta manera un programador puede disear un programa en un lenguaje mucho ms cercano a como piensa un ser humano, para luego compilarlo a un programa ms manejable por una computadora.

Ejemplos de programa en lenguaje ensamblador

Programa 1. Multiplicacin de dos nmeros "a" y "b" --------------------------------------------------Mtodo: Se suma a consigo mismo tantas veces como indique b El resultado se guarda en "sum" .BEGIN ini .DW 10 .DW 5 .DW 0

a: b: sum: ini:

; Variable a ; Variable b ; Resultado

load a(R0),R1 ; 10 -> R1 load b(R0),R2 ; 5 -> R2 addi R0,#0,R3 ; 0 -> R3 loop: subi R2,#0,R0 ; R2 positivo? ble fin ; Si <= 0, entonces FIN add R3,R1,R3 ; R3+10 -> R3 subi R2,#1,R2 ; R2-1 -> R2 br loop ; repetir bucle fin: store R3,sum(R0) ; R3 -> resultado .END

Das könnte Ihnen auch gefallen