Sie sind auf Seite 1von 8

INTRODUCCIN AL ENSAMBLADOR.

PROCESO DE CREACIN DE UN PROGRAMA


Para la creacin de un programa es necesario seguir cinco pasos: Diseo del algoritmo, Codificacin del mismo, Traduccin a lenguaje mquina, Prueba del programa Depuracin.

En el diseo se plantea el problema a resolver se propone la mejor solucin, creando diagramas esquemticos utili!ados para el mejor planteamiento de la solucin. La codificacin consiste en escribir el programa en alg"n lenguaje de programacin# en este caso espec$fico en ensamblador. La !ad"ccin al len#"a$e %&'"ina es la creacin del programa objeto, esto es, el programa escrito como una secuencia de ceros unos que pueda ser interpretado por el procesador. La (!"e)a del (!o#!a%a consiste en verificar que el programa funcione sin errores, o sea, que %aga lo que tiene que %acer. La *l i%a e a(a es la eli%inacin de las fallas de ec adas en el programa durante la fase de prueba. &a correccin de una falla normalmente requiere la repeticin de los pasos comen!ando desde el primero o el segundo.

CREACIN DE PROGRAMAS USANDO DEBUG


Para crear un programa en ensamblador e'isten dos opciones, la primera es utili!ar el ()*( +(acro )ssembler, de (icrosoft,, la segunda es utili!ar el debugger, en esta primera seccin utili!aremos este "ltimo a que se encuentra en cualquier PC con el sistema operativo (*-D.*, lo cual lo pone al alcance de cualquier usuario que tenga acceso a una mquina con estas caracteristicas. Debug solo puede crear arc%ivos con e'tensin .C.(, por las caracter$sticas de este tipo de programas no pueden ser ma ores de /0 1b, adems deben comen!ar en el despla!amiento, offset, o direccin de memoria 23224 dentro del segmento espec$fico. REGISTROS DE LA UCP &a 5CP tiene 30 registros internos, cada uno de 3/ bits. &os primeros cuatro, )6, 76, C6, D6 son registros de uso general tambien pueden ser utili!ados como registros de 8 bits, para utili!arlos como tales es necesario referirse a ellos como por ejemplo: )4 )&, que son los b tes alto +%ig%, bajo +lo9, del registro )6. :sta nomenclatura es aplicable tambi;n a los registros 76, C6 D6. &os registros son conocidos por sus nombres espec$ficos:

)6 )cumulador 76 <egistro base C6 <egistro contador D6 <egistro de datos D* <egistro del segmento de datos :* <egistro del segmento e'tra ** <egistro del segmento de pila C* <egistro del segmento de cdigo 7P <egistro de apuntadores base *= <egistro $ndice fuente D= <egistro $ndice destino *P <egistro del apuntador de la pila =P <egistro de apuntador de siguiente instruccin > <egistro de banderas :s posible visuali!ar los valores de los registros internos de la 5CP utili!ando el programa Debug. Para empe!ar a trabajar con Debug digite en el prompt de la computadora: C:?@ De)"# A:nterB :n la siguiente linea aparecera un guin, ;ste es el indicador del Debug, en este momento se pueden introducir las instrucciones del Debug. 5tili!ando el comando: - ! A:nterB *e desplegaran todos los contenidos de los registros internos de la 5CP# una forma alternativa de mostrarlos es usar el comando CrC utili!ando como parametro el nombre del registro cu o valor se quiera visuali!ar. Por ejemplo: - !)+ :sta instruccin desplegar unicamente el contenido del registro 76 Debug de , - , a , . , cambia el indicador del

:stando as$ el prompt es posible cambiar el valor del registro que se visuali! tecleando el nuevo valor a continuacin A:nterB, o se puede dejar el valor anterior presionando A:nterB sin telclear ning"n valor. :s posible cambiar el valor del registro de banderas, as$ como utili!arlo como estructura de control en nuestros programas como se ver mas adelante. Cada bit del registro tiene un nombre significado especial, la lista dada a continuacin describe el valor de cada bit, tanto apagado como prendido su relacin con las operaciones del procesador: .verflo9 DE F no %a desbordamiento# .E F s$ lo %a Direction 5P F %acia adelante# DD F %acia atras# =nterrupts D= F desactivadas# := F activadas *ign P& F positivo# DG F negativo Hero DH F no es cero# H< F s$ lo es

)u'iliar Carr Parit Carr

D) F no %a acarreo au'iliar# )C F %a acarreo au'iliar

P. F paridad non# P: F paridad par# DC F no %a acarreo# CI F *$ lo %a

LA ESTRUCTURA DEL ENSAMBLADOR :n el lenguaje ensamblador las lineas de cdigo constan de dos partes, la primera es el nombre de la instruccin que se va a ejecutar la segunda son los parmetros del comando u operandos. Por ejemplo: add a/ )/ )qu$ CaddC es el comando a ejecutar +en este caso una adicin, parmetros. tanto Ca%C como Cb%C son los

:l nombre de las instrucciones en este lenguaje esta formado por dos, tres o cuatro letras. a estas instrucciones tambien se les llama nombres mnemnicos o cdigos de operacin, a que representan alguna funcin que %abr de reali!ar el procesador. :'isten algunos comandos que no requieren parametros para su operacin, asi como otros que requieren solo un parmetro. )lgunas veces se utili!arn las instrucciones como sigue: add al,A3J2B

&os corc%etes en el segundo parmetro nos indican que vamos a trabajar con el contenido de la casilla de memoria n"mero 3J2 no con el valor 3J2, a ;sto se le conoce como direccionamiento directo.

NUESTRO PRIMER PROGRAMA


Eamos a crear un programa que sirva para ilustrar lo que %emos estado viendo, lo que %aremos ser una suma de dos valores que introduciremos directamente en el programa: :l primer paso es iniciar el Debug, este paso consiste unicamente en teclear de)"# 0En e!1 en el prompt del sistema operativo. Para ensamblar un programa en el Debug se utili!a el comando C aC +assemble,# cuando se utili!a este comando se le puede dar como parmetro la direccin donde se desea que se inicie el ensamblado, si se omite el parmetro el ensamblado se iniciar en la localidad especificada por C*:=P, usualmente 23224, que es la localidad donde deben iniciar los programas con e'tensin .C.(, sera la localidad que utili!aremos debido a que debug solo puede crear este tipo espec$fico de programas. )unque en este momento no es necesario darle un parametro al comando CaC es recomendable %acerlo para evitar problemas una ve! que se %aga uso de los registros C*:=P, por lo tanto tecleamos: - a2322 A:nterB

)l %acer ;sto aparecer en la pantalla algo como: 2C37:2322 el cursor se posiciona a la derec%a de estos n"meros, ntese que los primeros cuatro d$gitos +en sistema %e'agesimal, pueden ser diferentes, pero los "ltimos cuatro deben ser 2322, a que es la direccin que indicamos como inicio. )%ora podemos introducir las instrucciones: 2C3B.2322 mov ax,0002 #coloca el valor 222K en el registro a' 2C3B.2324 mov bx,0004 #coloca el valor 2220 en el registro b' 2C3B.2325 add ax,bx #le adiciona al contenido de a' el contenido de b' 2C3B.2326 int 20 # provoca la terminacin del programa. 2C3B.232A Do es necesario escribir los comentarios que van despues del C#C. 5na ve! digitado el "ltimo comando, in 72, se le da A:nterB sin escribir nada mas, para volver al prompt del debuger. &a "ltima linea escrita no es propiamente una instruccin de ensamblador, es una llamada a una interrupcin del sistema operativo, estas interrupciones sern tratadas mas a fondo en un cap$tulo posterior, por el momento solo es necesario saber que nos a%orran un gran n"mero de lineas son mu "tiles para accesar a funciones del sistema operativo. Para ejecutar el programa que escribimos se utli!a el comando C #C, al utili!arlo veremos que aparece un mensaje que dice: CProgram terminated normall C. Daturalmente con un mensaje como ;ste no podemos estar seguros que el programa %a a %ec%o la suma, pero e'iste una forma sencilla de verificarlo, utili!ando el comando CrC del Debug podemos ver los contenidos de todos los registros del procesador, simplemente teclee: - ! A:nterB )parecera en pantalla cada registro con su respectivo valor actual: )6F222/76F2220C6F2222D6F2222*PF>>::7PF2222*=F2222D=F2222 D*F2C37:*F2C37**F2C37C*F2C37=PF232) DE 5P := P& DH D) P. DC 2C37:232) 2> D7 o> :'iste la posibilidad de que los registros contengan valores diferentes, pero )6 los mismos, a que son los que acabamos de modificar. 76 deben ser

.tra forma de ver los valores, mientras se ejecuta el programa es utili!ando como parmetro para CgC la direccin donde queremos que termine la ejecucin muestre los valores de los registros, en este caso ser$a: #326, esta instruccin ejecuta el programa, se detiene en la direccin 328 muestra los contenidos de los registros. Tambi;n se puede llevar un seguimiento de lo que pasa en los registros utili!ando el comando C C +trace,, la funcin de este comando es ejecutar linea por linea lo que se ensambl mostrando cada ve! los contenidos de los regitros. Para salir del Debug se utili!a el comando CqC +quit,.

GUARDAR 8 CARGAR LOS PROGRAMAS Do ser$a prctico tener que digitar todo un programa cada ve! que se necesite, para evitar eso es posible guardar un programa en el disco, con la enorme ventaja de que a ensamblado no ser necesario correr de nuevo debug para ejecutarlo. G5)<D)< &.* P<.G<)()*

&os pasos a seguir para #"a!da! "n (!o#!a%a a almacenado en la memoria son: .btener la longitud del programa restando la direccin final de la direccin inicial, naturalmente en sistema %e'adecimal. Darle un nombre al programa e'tensin Poner la longitud del programa en el registro C6 .rdenar a Debug que escriba el programa en el disco.

5tili!ando como ejemplo el programa del cap$tulo anterior tendremos una idea mas clara de como llevar estos pasos: )l terminar de ensamblar el programa se ver$a as$: 2C3B.2322 mov ax,0002 2C3B.2324 mov bx,0004 2C3B.2325 add ax,bx 2C3B.2326 int 20 2C3B.232A - / 32a 322 272a 222a - n (!"e)a.co% - ! c+ C9 2222 .222a -: ;!i in# 222A )< es Para obtener la longitud de un programa se utili!a el comando C%C, el cual nos muestra la suma resta de dos n"meros en %e'adecimal. Para obtener la longitud del nuestro le proporcionamos como parmetros el valor de la direccin final de nuestro programa +32), el valor de la direccin inicial +322,. :l primer resultado que nos muestra el comando es la suma de los parmetros el segundo es la resta. :l comando CnC nos permite poner un nombre al programa. :l comando Crc'C nos permite cambiar el contenido del registro C6 al valor que obtuvimos del tamao del arc%ivo con C%C, en este caso 222a, a que nos interesa el resultado de la resta de la direccin inicial a la direccin final. Por "ltimo el comando 9 escribe nuestro programa en el disco, indicndonos cuantos b tes escribi.

C)<G)< &.* P<.G<)()* Para ca!#a! "n a!c/i=o <a #"a!dado son necesarios dos pasos: Proporcionar el nombre del arc%ivo que se cargar. Cargarlo utili!ando el comando ClC +load,.

Para obtener el resultado correcto de los siguientes pasos es necesario que previamente se haya creado el programa anterior. Dentro del Debug escribimos lo siguiente:

- n (!"e)a.co% -l - " 322 32> 2C4D.2322 B62722 MO? A9@2227 2C4D.2324 BB2A22 MO? B9@222A 2C4D.2325 23D6 ADD A9@B9 2C4D.2326 CD72 INT 72 :l "ltimo comando, CuC, se utili!a para verificar que el programa se carg en memoria, lo que %ace es desensamblar el cdigo mostrarlo a desensamblado. &os parmetros le indican a Debug desde donde %asta donde desensamblar. Debug siempre carga los programas en memoria en la direccin 3224, a menos que se le indique alguna otra.

CONDICIONES@ CICLOS 8 BIBURCACIONES :stas estructuras, o formas de control le dan a la mquina un cierto grado de decisin basado en la informacin que recibe. &a forma mas sencilla de comprender este tema es por medio de ejemplos. Eamos a crear tres programas que %agan lo mismo: desplegar un n"mero determinado de veces una cadena de caracteres en la pantalla. - a322 2C3B.2322 $%( 37C D )!inca a la di!eccin 37CE 2C3B.2327 0En e!1 - e 327 FCadena a =is"aliGa! 3C =ecesF 2d 2a FHF - a37C 2C3B.237C MO? C9@222B D =eces '"e se des(le#a!a la cadena 2C3B.2376 MO? D9@2327 D co(ia cadena al !e#is !o D9 2C3B.237B MO? AE@2> D co(ia =alo! 2> al !e#is !o AE 2C3B.237D INT 73 D des(lie#a cadena 2C3B.237B LOOP 237D D si C9I2 )!inca a 237D 2C3B.2343 INT 72 D e!%ina el (!o#!a%a. Por medio del comando CeC es posible introducir una cadena de caracteres en una determinada localidad de memoria, dada como parmetro, la cadena se introduce entre comillas, le sigue un espacio, luego el valor %e'adecimal del retorno de carro, un espacio, el valor de linea nueva por "ltimo el s$mbolo LML que el ensamblador interpreta como final de la cadena. &a interrupcin K3 utili!a el valor almacenado en el registro )4 para ejecutar una determinada funcin, en este caso mostrar la cadena en pantalla, la cadena que muestra es la que est almacenada en el registro D6. &a instruccin &..P decrementa automaticamente el registro C6 en uno si no %a llegado el valor de este registro a cero brinca a la casilla indicada como parmetro, lo cual crea un ciclo que se repite el n"mero de veces especificado por el valor de C6. &a interrupcin K2 termina la ejecucin del programa.

.tra forma de reali!ar la misma funcin pero sin utili!ar el comando &..P es la siguiente: - a322 2C3B.2322 $%( 37C D )!inca a la di!eccin 37CE 2C3B.2327 0En e!1 - e 327 FCadena a =is"aliGa! 3C =ecesF 2d 2a FHF - a37C 2C3B.237C MO? B9@222B D =eces '"e se des(le#a!a la cadena 2C3B.2376 MO? D9@2327 D co(ia cadena al !e#is !o D9 2C3B.237B MO? AE@2> D co(ia =alo! 2> al !e#is !o AE 2C3B.237D INT 73 D des(lie#a cadena 2C3B.237B DEC B9 D dec!e%en a en 3 a B9 2C3B.2342 JNK 237D D si B9 es dife!en e a 2 )!inca a 237D 2C3B.2347 INT 72 D e!%ina el (!o#!a%a. :n este caso se utili!a el registro 76 como contador para el programa, instruccin CD:CC se disminu e su valor en 3. por medio de la

&a instruccin CNDHC verifica si el valor de 7 es diferente a 2, esto con base en la bandera DH, en caso afirmativo brinca %acia la direccin 23KD. :n caso contrario contin"a la ejecucin normal del programa por lo tanto se termina. 5na "ltima variante del programa es utili!ando de nuevo a C6 como contador, pero en lugar de utili!ar &..P utili!aremos decrementos a C6 comparacin de C6 a 2. - a322 2C3B.2322 $%( 37C D )!inca a la di!eccin 37CE 2C3B.2327 0En e!1 - e 327 FCadena a =is"aliGa! 3C =ecesF 2d 2a FHF - a37C 2C3B.237C MO? D9@2327 D co(ia cadena al !e#is !o D9 2C3B.2376 MO? C9@222B D =eces '"e se des(le#a!a la cadena 2C3B.237B MO? AE@2> D co(ia =alo! 2> al !e#is !o AE 2C3B.237D INT 73 D des(lie#a cadena 2C3B.237B DEC C9 D dec!e%en a en 3 a C9 2C3B.2342 JC9K 234A D si C9 es i#"al a 2 )!inca a 234A 2C3B.2347 JMP 237D D )!inca a la di!ecciLoa" en 237D 2C3B.234A INT 72 D e!%ina el (!o#!a%a :n este ejemplo se us la instruccin NC6H para controlar la condicin de salto, el significado de tal funcin es: brinca si C6F2 :l tipo de control a utili!ar depender de las necesidades de programacin en determinado momento.

LAS INTERRUPCIONES Definicin de interrupcin: 5na interrupcin es una instruccin que detiene la ejecucin de un programa para permitir el uso de la 5CP a un proceso prioritario. 5na ve! concluido este "ltimo proceso se devuelve el control a la aplicacin anterior.

Por ejemplo, cuando estamos trabajando con un procesador de palabras en ese momento llega un aviso de uno de los puertos de comunicaciones, se detiene temporalmente la aplicacin que estabamos utili!ando para permitir el uso del procesador al manejo de la informacin que est llegando en ese momento. 5na ve! terminada la transferencia de informacin se reanudan las funciones normales del procesador de palabras. &as interrupciones ocurren mu seguido, sencillamente la interrupcin que actuali!a la %ora del d$a ocurre apro'imadamente 38 veces por segundo. Para lograr administrar todas estas interrupciones, la computadora cuenta con un espacio de memoria, llamado memoria baja, donde se almacenan las direcciones de cierta localidad de memoria donde se encuentran un juego de instrucciones que la 5CP ejecutar para despues regresar a la aplicacin en proceso. :n los programas anteriores %icimos uso de la interrupcin n"mero K24 para terminar la ejecucin de nuestros programas, a%ora utili!aremos otra interrupcin para mostrar informacin en pantalla: 5tili!ando Debug tecleamos: - a322 7C3B.2322 JMP 233D 7C3B.2327 0ENTER1 - E 327 FEola@ co%o es as.F 2D 2A FHF - A233D 7C3B.233D MO? D9@2327 7C3B.2372 MO? AE@2> 7C3B.2377 INT 73 7C3B.2374 INT 72 :n este programa la interrupcin K34 manda al monitor la cadena locali!ada en la direccin a la que apunta el registro D6. :l valor que se le da a )4 determina cual de las opciones de la interrupcin K34 sera utili!ada, a que esta interrupcin cuenta con varias opciones. :l manejo directo de interrupciones es una de las partes mas fuertes del lenguaje ensamblador, a que con ellas es posible controlar eficientemente todos los dispositivos internos e'ternos de una com

Das könnte Ihnen auch gefallen