De todo un poco

Solo disponible en BuenasTareas
  • Páginas : 7 (1621 palabras )
  • Descarga(s) : 0
  • Publicado : 26 de octubre de 2010
Leer documento completo
Vista previa del texto
Ejercicio
Vamos a crear un programa que sirva para ilustrar lo que hemos estado viendo, lo que haremos será una suma de dos valores que introduciremos directamente en el programa:
El primer paso es iniciar el Debug, este paso consiste únicamente en teclear debug [Enter] en el prompt del sistema operativo.
Para obtener ayuda podemos teclear -? en el prompt del programa. Anote cada una de lasopciones:
Para ensamblar un programa en el Debug se utiliza el comando "a" (assemble); cuando se utiliza este comando se le puede dar como parámetro la dirección donde se desea que se inicie el ensamblado, si se omite el parámetro el ensamblado se iniciará en la localidad especificada por CS:IP, usualmente 0100H, que es la localidad donde deben iniciar los programas con extensión .COM, y será lalocalidad que utilizaremos debido a que debug solo puede crear este tipo específico de programas.
En este momento no es necesario darle ningún parámetro al comando a, por tanto tecleamos:
- a
Al hacer esto aparecerá en la pantalla algo como: 0C1B:0100 y el cursor se posiciona a la derecha de estos números, nótese que los primeros cuatro dígitos (en sistema hexagesimal) pueden ser diferentes, perolos últimos cuatro deben ser 0100, por las razones antes mencionadas. 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 terminación del programa.
 0C1B:010ANo es necesario escribir los comentarios que van después del ";". Una vez digitado el último comando, int 20, se le da [Enter] sin escribir nada mas, para volver al prompt del debuger.
La última línea escrita no es propiamente una instrucción de ensamblador, es una llamada a una interrupción del sistema operativo, estas interrupciones serán tratadas mas a fondo posteriormente, por el momento soloes necesario saber que nos ahorran un gran número de líneas y son muy útiles para accesar a funciones del sistema operativo.
Para ejecutar el programa que escribimos se utiliza el comando "g", 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 formasencilla de verificarlo, por medio del comando g.
Es utilizando como parámetro para "g" la dirección donde queremos que termine la ejecución y muestre los valores de los registros, en este caso sería: g108, esta instrucción ejecuta el programa, se detiene en la dirección 108 y muestra los contenidos de los registros. AX=0006BX=0004CX=0000DX=0000SP=FFEEBP=0000SI=0000DI=0000DS=0C1BES=0C1BSS=0C1BCS=0C1BIP=010A NV UP EI PL NZ NA PO NC
0C1B:010A 0F DB oF
También se puede llevar un seguimiento de lo que pasa en los registros utilizando el comando "t" (trace), la función de este comando es ejecutar línea por línea lo que se ensambló mostrando cada vez los contenidos de los registros.
Para salir del Debug se utiliza el comando "q" (quit).
Guardar y cargar los programas
No seríapráctico tener que digitar todo un programa cada vez que se necesite, para evitar eso es posible guardar un programa en el disco, con la enorme ventaja de que ya ensamblado no será necesario correr de nuevo debug para ejecutarlo.
Los pasos a seguir para guardar un programa ya almacenado en la memoria son:
Obtener la longitud del programa restando la dirección final de la dirección inicial,naturalmente en sistema hexadecimal.
Darle un nombre al programa y extensión
Poner la longitud del programa en el registro CX
Ordenar a Debug que escriba el programa en el disco.
Utilizando como ejemplo el programa del capítulo anterior tendremos una idea mas clara de como llevar estos pasos:
Al terminar de ensamblar el programa se vería así:
 0C1B:0100 mov ax,0002
 0C1B:0103 mov bx,0004...
tracking img