Está en la página 1de 18

Lenguaje Ensamblador Introduccin.

El documento que esta visualizando tiene la funcin primordial de introducirlo a la programacin en lenguaje Ensamblador, y est pensado en aquellas personas que nunca han trabajado con este lenguaje y probablemente con ningn otro. El tutorial se enfoca completamente hacia las computadoras que operan con procesadores de la familia x ! de "ntel y, considerando que el ensamblador basa su funcionamiento en los recursos internos del procesador, los ejemplos descritos no son compatibles con ninguna otra arquitectura. #e estructura la informacin en forma de unidades para permitir el fcil acceso a cada uno de los t$picos y facilitar el seguimiento del tutorial. En la seccin introductoria se mencionan algunos de los conceptos elementales acerca de los sistemas de cmputo as$ como del ensamblador mismo, y contina con el tutorial propiamente dicho. %&'(E'")&* )escripcin bsica de un sistema de cmputo ........................+ El porqu, aprender lenguaje ensamblador ...............................! -cercamiento al lenguaje ensamblador. Esta primera parte esta enfocada al conocimiento de algunas de las caracter$sticas de las computadoras y del ensamblador. .'")-) /* %onceptos bsicos...............................................0 .'")-) 1* 2rogramacin en ensamblador............................1 3as instrucciones del ensamblador. En esta segunda parte se profundiza un poco mas en la descripcin de las instrucciones del lenguaje ensamblador. .'")-) +* "nstrucciones de operacin sobre datos....................4/ .'")-) 4* "nstrucciones lgicas y aritm,ticas...........................56 .'")-) 5* "nstrucciones para control de procesos.....................5 "nterrupciones y manejo de archivos.

.'")-) !* "nterrupciones........................................................04 .'")-) 0* "ntroduccin al manejo de archivos........................./61 "ntroduccin a las macros. .'")-) * 7acros y procedimientos....................................../68 Ejemplos.................................................................................//4 En esta seccin se exponen algunos programas de ejemplo en los que se utilizan los elementos explicados en el tutorial. )esplegar un mensaje en pantalla )esplegar nmeros hexadecimales del /5 al 6 &peraciones bsicas )irectorio y bibliograf$a........................................../1

Descripcion bsica de un sistema de cmputo.


Esta seccin tiene como finalidad dar una breve rese9a de las partes principales de un sistema de cmputo a un nivel bsico, que permita al usuario un mayor entendimiento de los conceptos que se trataran a lo largo del tutorial. : 2rocesador %entral : 7emoria %entral : .nidades de Entrada y #alida : .nidades de 7emoria -uxiliar

Sistema de cmputo.
3e llamamos sistema de cmputo a la configuracin completa de una computadora, incluyendo las unidades perif;ricas y la programacin de sistemas que la hacen un aparato til y funcional para un fin determinado. 2rocesador %entral. Esta parte es conocida tambi,n como unidad central de procesamiento o .%2. formada a su vez por la unidad de control y la unidad aritm,tica y lgica. #us funciones consisten en leer y escribir contenidos de las celdas de memoria, llevar y traer datos entre celdas de memoria y registros especiales y decodificar y ejecutar las instruccines de un programa.

El procesador cuenta con una serie de celdas de memoria que se tilizan con mucha frecuencia y que, por ende, forman parte de la .%2. Estas celdas son conocidas con el nombre de registros. .n procesador puede tener una docena o dos de estos registros. 3a unidad aritm,tica y lgica de la .%2 realiza las operaciones relacionadas con los clculos num,ricos y simblicos. ($picamente estas unidades slo tienen capacidad de efectuar operaciones muy elementales como* suma y resta de dos nmeros de punto fijo, multiplicacin y divisin de punto fijo, manipulacin de bits de los registros y comparacin del contenido de dos registros. 3as computadoras personales pueden clasificarse por lo que se conoce como tama9o de palabra, esto es, la cantidad de bits que el procesador puede manejar a la vez. 7emoria %entral. Es un conjunto de celdas <actualmente fabricadas con semiconductores= usadas para procesos generales, tales como la ejecucin de programas y el almacenamiento de informacin para las operaciones. %ada una de las celdas puede contener un valor num,rico y tienen la propiedad de ser direccinables, esto es, que se pueden distinguir una de otra por medio de un nmero nico o direccin para cada celda. El nombre gen,rico de estas memorias es >andom -ccess 7emory <7emoria de acceso aleatorio= o >-7 por sus siglas en ingl,s. 3a principal desventaja de este tipo de memoria es que los circuitos integrados pierden la informacin que tienen almacenada cuando se interrumpe la alimentacin el,ctrica. Esto llev? a la creacin de memorias cuya informacin no se pierda cuando se apaga el sistema. Estas memorias reciben el nombre de >ead &nly 7emory <7emoria de solo lectura= o >&7. .nidades de Entrada y #alida. 2ara que una computadora nos sea til es necesario que el procesador se comunique al exterior por medio de interfaces que permiten la entrada y la salida de datos del procesador y la memoria. @aciendo uso de estas comunicaciones es posible introducir datos para su procesamiento y la posterior visualizacin de los datos ya procesados. -lgunas de las unidades de entrada mas comunes son teclados, lectoras de tarjetas <ya en desuso=, mouse, etc. 3as unidades de salida mas comunes son las terminales de video y las impresoras. .nidades de 7emoria -uxiliar. %omo la memoria central de una computadora es costosa y, considerando las aplicaciones actuales, muy limitada, surge entonces la necesidad de crear sistemas de almacenamiento de informacin prcticos y econmicos. -dem s, la memoria central pierde su contenido al apagarse la mquina, por lo que no es conveniente tilizarla para almacenamiento permanente de datos.

Estos y otros incovenientes dan lugar a la creacin de unidades perif,ricas de memoria que reciben el nombre de memoria auxiliar o secundaria. )e estas unidades perif,ricas las ms comunes son las cintas y los discos magn,ticos. 3a informacin almacenada en estos medios magn,ticos recibe el nombre de archivo. .n archivo est formado por un nmero variable de registros, generalmente de tama9o fijoA los registros pueden contener datos o programas. Bentajas del Ensamblador 3a primera razn para trabajar con ensamblador es que proporciona la oportunidad de conocer ms a fondo la operacin de su 2%, lo que permite el desarrollo de softCare de una manera ms consistente. 3a segunda razn es el control total de la 2% que se tiene con el uso del mismo. &tra razn es que los programas de ensamblador son ms rpidos, ms compactos y tienen mayor capacidad que los creados en otros lenguajes. 2or ltimo el ensamblador permite una optimizacin ideal en los programas tanto en su tama9o como en su ejecucin. #oftCare En terminos de computacin es todo aquel proceso o programa que tiliza los recursos de la computadora para lograr el objetivo trazado por su diseDador o programador. %onceptos bsicos "nformacin en las computadoras. .nidades de informacin #istemas numricos %onvertir nmeros binarios a decimales %onvertir nmeros decimales a binarios #istema @exadecimal 7,todos de representacin de datos en una computadora. %digo -#%"" 7,todo E%) >epresentacin de punto flotante (rabajando con el lenguaje ensamblador.

2roceso de creacin de un programa >egistros de la .%2 3a estructura del ensamblador 'uestro primer programa Fuardar y cargar los programas %ondiciones, ciclos y bifurcaciones "nterrupciones .nidades de informacin 2ara que la 2% pueda procesar la informacin es necesario que est se encuentre en celdas especiales llamadas registros. 3os registros son conjuntos de o /! flipGflops <basculadores o biestables=.

.n flipGflop es un dispositivo capaz de almacenar dos niveles de voltaje, uno bajo, regularmente de 6.5 volts y otro alto comunmente de 5 volts. El nivel bajo de energHa en el flipGflop se interpreta como apagado o 6, y el nivel alto como prendido o /. - estos estados se les conoce usualmente como bits, que son la unidad ms pequeDa de informacin en una computadora. - un grupo de /! bits se le conoce como palabra, una palabra puede ser dividida en grupos de bits llamados bytes, y a los grupos de 4 bits les llamamos nibbles. #istemas num,ricos El sistema num,rico que tilizamos a diario es el sistema decimal, pero este sistema no es conveniente para las mquinas debido a que la informacin se maneja codificada en forma de bits prendidos o apagadosA esta forma de codificacin nos lleva a la necesidad de conocer el clculo posicional que nos permita expresar un nmero en cualquier base que lo necesitemos. Es posible representar un nmero determinado en cualquier base mediante la siguiente formula* )onde n es la posicin del d$gito empezando de derecha a izquierda y numerando a partir de cero. ) es el d$gito sobre el cual operamos y E es la base num;rica empleada. %onvertir nmeros binarios a decimales (rabajando en el lenguaje ensamblador nos encontramos con la necesidad de convertir nmeros del sistema binario, que es el empleado por las computadoras, al sistema decimal tilizado por las personas.

El sistema binario est basado en unicamente dos condiciones o estados, ya sea encendido </= o apagado <6=, por lo tanto su base es dos. 2ara la conversi?n podemos tilizar la formula de valor posicional* 2or ejemplo, si tenemos el nmero binario /66//, tomamos de derecha a izquierda cada d$gito y lo multiplicamos por la base elevada a la nueva posicin que ocupan* Einario* / / 6 6 / )ecimal* /:1I6 J /:1I/ J 6:1I1 J 6:1I+ J /:1I4 K / J 1 J 6 J 6 J /! K /8 decimal. El caracter I es tilizado en computacin como s$mbolo de potenciacin y el caracter : se usa para representar la multiplicacin. %onvertir nmeros decimales a binarios Existen varios m,todos de conversin de nmeros decimales a binariosA aquH solo se analizar uno. 'aturalmente es mucho ms fcil una conversin con una calculadora cientHfica, pero no siempre se cuenta con ella, as$ que es conveniente conocer por lo menos una forma manual para hacerlo. El m,todo que se explicar tiliza la divisin sucesiva entre dos, guardando el residuo como d$gito binario y el resultado como la siguiente cantidad a dividir. (omemos como ejemplo el nmero 4+ decimal. 4+L1 K 1/ y su residuo es / 1/L1 K /6 y su residuo es / /6L1 K 5 y su residuo es 6 5L1 K 1 y su residuo es / 1L1 K / y su residuo es 6 /L1 K 6 y su residuo es / -rmando el nmero de abajo hacia arriba tenemos que el resultado en binario es /6/6// #istema hexadecimal En la base hexadecimal tenemos /! d$gitos que van del 6 al 8 y de la letra - hasta la M <estas letras representan los nmeros del /6 al /5=. 2or lo tanto, contamos 6, /, 1, +, 4, 5, !, 0, , 8, -, E, %, ), E y M.

3a conversin entre numeracin binaria y hexadecimal es sencilla. 3o primero que se hace para una conversin de un nmero binario a hexadecimal es dividirlo en grupos de 4 bits, empezando de derecha a izquierda. En caso de que el ltimo grupo <el que quede ms a la izquierda= sea menor de 4 bits se rellenan los faltantes con ceros. (omando como ejemplo el nmero binario /6/6// lo dividimos en grupos de 4 bits y nos queda* /6A /6// >ellenando con ceros el ltimo grupo <el de la izquierda=* 66/6A /6// despu,s tomamos cada grupo como un nmero independiente y consideramos su valor en decimal* 66/6 K 1A /6// K // 2ero como no podemos representar este nmero hexadecimal como 1// porqu, ser$a un error, tenemos que sustituir todos los valores mayores a 8 por su respectiva representacin en hexadecimal, con lo que obtenemos* 1E@ <)onde la @ representa la base hexadecimal= 2ara convertir un nmero de hexadecimal a binario solo es necesario invertir estos pasos* se toma el primer d$gito hexadecimal y se convierte a binario, y luego el segundo, y as$ sucesivamente hasta completar el nmero. cdigo -#%"" -#%"" generalmente se pronuncia NasOiN, es un acrnimo de -merican #tandard %ode for "nformation "nterchange. Este cdigo asigna a las letras del alfabeto, a los d$gitos decimales del 6 al 8 y a varios s$mbolos adicionales un nmero binario de 0 bits <poni;ndose el bit en su estado de apagado o 6=. )e esta forma cada letra, d$gito o caracter especial ocupa un byte en la memoria de la computadora. 2odemos observar que este m,todo de representacin de datos es muy ineficiente en el aspecto num,rico, ya que en formato binario nos basta un solo byte para representar nmeros de 6 a 155, en cambio con el cdigo -#%"" un byte puede representar unicamente un d$gito. )ebido a esta ineficiencia, el cdigo -#%"" es principalmente tilizado en la memoria para representar texto. m,todo E%)

E%) es un acrnimo de Einary %oded )ecimal. En esta notacin se tilizan grupos de 4 bits para representar cada d$gito decimal del 6 al 8. %on este m,todo podemos representar dos d$gitos por byte de informacin. -Pn cuando este m,todo es mucho ms prctico para representacin de nmeros en la memoria en comparacin al -#%"", todavHa se queda por debajo del binario, ya que con un byte en el m,todo E%) solo podemos representar d$gitos del 6 al 88, en cambio, en formato binario podemos representar todos los d$gitos desde 6 hasta 155. Este formato es tilizado principalmente para representar nmeros muy grandes en aplicaciones mercantiles ya que fcilita las operaciones con los mismos evitando errores de redondeo. >epresentacin de punto flotante Esta representacin esta basada en la notacin cient$fica, esto es, representar un nmero en dos partes* su mantisa y su exponente. 2oniendo como ejemplo el nmero /1+4666, podemos representarlo como /./1+:/6I!, en esta ltima notacin el exponente nos indica el nmero de espacios que hay que mover el espacio hacia la derecha para obtener el resultado original. En caso de que el exponente fuera negativo nos estar$a indicando el nmero de espacios que hay que recorrer el punto decimal hacia la izquierda para obtener el original. 2roceso de creacin de un programa 2ara la creacin de un programa es necesario seguir cinco pasos* dise9o del algoritmo, codificacin del mismo, su traduccin a lenguaje mquina, la prueba del programa y la depuracin. En la etapa de dise9o se plantea el problema a resolver y se propone la mejor solucin, creando diagramas esquemticos tilizados para el mejor planteamiento de la solucin. 3a codificacin del programa consiste en escribir el programa en algn lenguaje de programacinA en este caso espec$fico en ensamblador, tomando como base la solucin propuesta en el paso anterior. 3a traduccin al lenguaje mquina es la creacin del programa objeto, esto es, el programa escrito como una secuencia de ceros y unos que pueda ser interpretado por el procesador. 3a prueba del programa consiste en verificar que el programa funcione sin errores, o sea, que haga lo que tiene que hacer. 3a ltima etapa es la eliminacin de las fallas detectadas en el programa durante la fase de prueba. 3a correccin de una falla normalmente requiere la repeticin de los pasos comenzando desde el primero o el segundo.

2ara crear un programa en ensamblador existen dos opciones, la primera es tilizar el 7-#7 <7acro -ssembler, de 7icrosoft=, y la segunda es tilizar el debugger, en esta primera seccin tilizaremos este ltimo ya que se encuentra en cualquier 2% con el sistema operativo 7#G)&#, lo cual lo pone al alcance de cualquier usuario que tenga acceso a una mquina con estas caracteristicas. )ebug solo puede crear archivos con extensin .%&7, y por las caracter$sticas de este tipo de programas no pueden ser mayores de !4 Ob, adems deben comenzar en el desplazamiento, offset, o direccin de memoria 6/66@ dentro del segmento espec$fico. >egistros de la .%2 3a .%2 tiene /4 registros internos, cada uno de /! bits. 3os primeros cuatro, -Q, EQ, %Q, y )Q son registros de uso general y tambi,n pueden ser tilizados como registros de bits, para tilizarlos como tales es necesario referirse a ellos como por ejemplo* -@ y -3, que son los bytes alto <high= y bajo <loC= del registro -Q. Esta nomenclatura es aplicable tambi,n a los registros EQ, %Q y )Q. 3os registros son conocidos por sus nombres espec$ficos*

-Q -cumulador EQ >egistro base %Q >egistro contador )Q >egistro de datos )# >egistro del segmento de datos E# >egistro del segmento extra ## >egistro del segmento de pila %# >egistro del segmento de cdigo E2 >egistro de apuntadores base #" >egistro $ndice fuente )" >egistro $ndice destino #2 >egistro del apuntador de la pila "2 >egistro de apuntador de siguiente instruccin M >egistro de banderas

Es posible visualizar los valores de los registros internos de la .%2 tilizando el programa )ebug. 2ara empezar a trabajar con )ebug digite en el prompt de la computadora* %*RS )ebug TEnterU En la siguiente linea aparecera un guin, ,ste es el indicador del )ebug, en ,ste momento se pueden introducir las instruccines del )ebug. tilizando el comando* G r TEnterU #e desplegaran todos los contenidos de los registros internos de la .%2A una forma alternativa de mostrarlos es usar el comando NrN tilizando como parametro el nombre del registro cuyo valor se quiera visualizar. 2or ejemplo*

G rbx Esta instruccin desplegar unicamente el contenido del registro EQ y cambia el indicador del )ebug de N G N a N * N Estando as$ el prompt es posible cambiar el valor del registro que se visualizo tecleando el nuevo valor y a continuacin TEnterU, o se puede dejar el valor anterior presionando TEnterU sin telclear ningPn valor. Es posible cambiar el valor del registro de banderas, as$ como tilizarlo como estructura de control en nuestros programas como se ver ms adelante. %ada bit del registro tiene un nombre y significado especial, la lista dada a continuacin describe el valor de cada bit, tanto apagado como prendido y su relacin con las operaciones del procesador* &verfloC

'B K no hay desbordamientoA &B K s$ lo hay )irection

.2 K hacia adelanteA )' K hacia atrasA "nterrupts

)" K desactivadasA E" K activadas #ign

23 K positivoA 'F K negativo Vero

'V K no es ceroA V> K si lo es -uxiliary %arry

'- K no hay acarreo auxiliarA -% K hay acarreo auxiliar 2arity

2& K paridad nonA 2E K paridad parA %arry

'% K no hay acarreoA %W K si lo hay

3a estructura del ensamblador En el lenguaje ensamblador las lineas de cdigo constan de dos partes, la primera es el nombre de la instruccin que se va a ejecutar y la segunda son los parmetros del comando u operandos. 2or ejemplo* add ah bh -qu$ NaddN es el comando a ejecutar <en ,ste caso una adicin= y tanto NahN como NbhN son los parmetros. El nombre de las instruccines en ,ste lenguaje esta formado por dos, tres o cuatro letras. a estas instruccines tambi,n se les llama nombres mnemnicos o cdigos de operacin, ya que representan algna funcin que habr de realizar el procesador. Existen algnos comandos que no requieren parmetros para su operacin, as$ como otros que requieren solo un par metro. algnas veces se utilizaran las instruccines como sigue* add al,T/06U 3os corchetes en el segundo parmetro nos indican que vamos a trabajar con el contenido de la casilla de memoria nmero /06 y no con el valor /06, a ;sto se le conoce como direccinamiento directo. 'uestro primer programa Bamos 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 )ebug, ,ste paso consiste unicamente en teclear debug TEnterU en el prompt del sistema operativo. 2ara ensamblar un programa en el )ebug se tiliza el comando NaN <assemble=A cuando se tiliza ,ste comando se le puede dar como parmetro la direccin donde se desea que se inicie el ensamblado. #i se omite el parmetro el ensamblado se iniciar en la localidad especificada por %#*"2, usualmente 6/66@, que es la localidad donde deben iniciar los programas con extensin .%&7, y sera la localidad que tilizaremos debido a que debug solo puede crear ,ste tipo espec$fico de programas. -unque en ,ste momento no es necesario darle un parmetro al comando NaN es recomendable hacerlo para evitar problems una vez que se haga uso de los registros %#*"2, por lo tanto tecleamos* G a6/66 TEnterU -l hacer ,sto aparacer en la pantalla algo como* 6%/E*6/66 y el cursor se posiciona a la derecha de ,stos nmeros, ntese que los primeros cuatro d$gitos <en sistema hexagesimal= pueden ser diferentes, pero los ltimos cuatro deben ser 6/66, ya que es la direccin que indicamos como inicio. -hora podemos introducir las instruccines* 6%/E*6/66 mov ax,6661 Acoloca el valor 6661 en el registro ax 6%/E*6/6+ mov bx,6664 Acoloca el valor 6664 en el registro bx 6%/E*6/6! add ax,bx Ale adiciona al contenido de ax el contenido de bx 6%/E*6/6 int 16 A provoca la terminacin del programa. 6%/E*6/6'o es necesario escribir los comentarios que van despu,s del NAN. .na vez digitado el ltimo comando, int 16, se le da TEnterU sin escribir nada mas, para volver al prompt del debuger. 3a ltima linea escrita no es propiamente una instruccin de ensamblador, es una llamada a una interrupcin del sistema operativo, estas interrupciones ser n tratadas ms a fondo en un cap$tulo posterior, por el momento solo es necesario saber que nos ahorran un gran nmero de lineas y son muy tiles para accesar a funciones del sistema operativo. 2ara ejecutar el programa que escribimos se utliza el comando NgN, al tilizarlo veremos que aparece un mensaje que dice* N2rogram terminated normallyN. 'aturalmente con un mensaje como ,ste no podemos estar seguros que el programa haya hecho la suma, pero existe una forma sencilla de verificarlo, tilizando el comando NrN del )ebug podemos ver los contenidos de todos los registros del procesador, simplemente teclee* G r TEnterU aparacer en pantalla cada registro con su respectivo valor actual* -QK666!EQK6664%QK6666)QK6666#2KMMEEE2K6666#"K6666)"K6666

)#K6%/EE#K6%/E##K6%/E%#K6%/E"2K6/6- 'B .2 E" 23 'V '- 2& '% 6%/E*6/6- 6M )E oM Existe la posibilidad de que los registros contengan valores diferentes, pero -Q y EQ deben ser los mismos, ya que son los que acabamos de modificar. &tra forma de ver los valores, mientras se ejecuta el programa es tilizando como parmetro para NgN la direccin donde queremos que termine la ejecucin y muestre los valores de los registros, en ,ste caso ser$a* g/6 , esta instruccin ejecuta el programa, se detiene en la direccin /6 y muestra los contenidos de los registros. tambi,n se puede llevar un seguimiento de lo que pasa en los registros tilizando el comando NtN <trace=, la funcin de ,ste comando es ejecutar linea por linea lo que se ensambl? mostrando cada vez los contenidos de los regitros. 2ara salir del )ebug se tiliza el comando NqN <quit=. Fuardar y cargar los programas 'o ser$a prctico 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. 3os pasos a seguir para guardar un programa ya almacenado en la memoria son* &btener la longitud del programa restando la direccin final de la direccin inicial, naturalmente en sistema hexadecimal. )arle un nombre al programa y extensin 2oner la longitud del programa en el registro %Q &rdenar a )ebug que escriba el programa en el disco. tilizando como ejemplo el programa del cap$tulo anterior tendremos una idea ms clara de como llevar ,stos pasos* -l terminar de ensamblar el programa se ver$a as$* 6%/E*6/66 mov ax,6661 6%/E*6/6+ mov bx,6664 6%/E*6/6! add ax,bx 6%/E*6/6 int 16 6%/E*6/6G h /6a /66 616a 666a

G n prueba.com G rcx %Q 6666 *666a GC Xriting 666- bytes 2ara obtener la longitud de un programa se tiliza el comando NhN, el cual nos muestra la suma y resta de dos nmeros en hexadecimal. 2ara obtener la longitud del nuestro le proporcionamos como parmetros el valor de la direccin final de nuestro programa </6-= y el valor de la direccin inicial </66=. El primer resultado que nos muestra el comando es la suma de los parmetros y el segundo es la resta. El comando NnN nos permite poner un nombre al programa. El comando NrcxN nos permite cambiar el contenido del registro %Q al valor que obtuvimos del tama9o del archivo con NhN, en ,ste caso 666a, ya que nos interesa el resultado de la resta de la direccin inicial a la direccin final. 2or ltimo el comando C escribe nuestro programa en el disco, indicandonos cuantos bytes escribi. 2ara cargar un archivo ya guardado son necesarios dos pasos* 2roporcionar el nombre del archivo que se cargar. %argarlo tilizando el comando NlN <load=. 2ara obtener el resultado correcto de los siguientes pasos es necesario que previamente se haya creado el programa anterior. )entro del )ebug escribimos lo siguiente* G n prueba.com Gl G u /66 /68 6%+)*6/66 E 6166 7&B -Q,6661 6%+)*6/6+ EE6466 7&B EQ,6664 6%+)*6/6! 6/) -)) -Q,EQ

6%+)*6/6 %)16 "'( 16 El ltimo comando, NuN, se tiliza para verificar que el programa se carg? en memoria, lo que hace es desensamblar el cdigo y mostrarlo ya desensamblado. 3os parmetros le indican a )ebug desde donde y hasta donde desensamblar. )ebug siempre carga los programas en memoria en la direccin /66@, a menos que se le indique algna otra. %ondiciones, ciclos y bifurcaciones Estas estructuras, o formas de control le dan a la mquina un cierto grado de desicin basado en la informacin que recibe. 3a forma ms sencilla de comprender ,ste tema es por medio de ejemplos. Bamos a crear tres programas que hagan lo mismo* desplegar un nmero determinado de veces una cadena de caracteres en la pantalla. G a/66 6%/E*6/66 jmp /15 A brinca a la direccin /15@ 6%/E*6/61 TEnterU G e /61 H%adena a visualizar /5 vecesi 6d 6a HYH G a/15 6%/E*6/15 7&B %Q,666M A veces que se desplegar la cadena 6%/E*6/1 7&B )Q,6/61 A copia cadena al registro )Q 6%/E*6/1E 7&B -@,68 A copia valor 68 al registro -@ 6%/E*6/1) "'( 1/ A despliega cadena 6%/E*6/1M 3&&2 6/1) A si %QS6 brinca a 6/1) 6%/E*6/+/ "'( 16 A termina el programa. 2or medio del comando NeN 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 hexadecimal del retorno de carro, un espacio, el valor de linea nueva y por ltimo el simbolo HYH que el ensamblador interpreta como final de la cadena. 3a interrupcin 1/ tiliza el valor almacenado en el registro -@ para ejecutar una determinada funcin, en ,ste caso mostrar la cadena en pantalla, la cadena que muestra es la que est almacenada en el registro )Q. 3a instruccin 3&&2 decrementa automaticamente el registro %Q en uno y si no ha llegado el valor de ,ste registro a cero brinca a la casilla indicada como parmetro, lo cual crea un ciclo que se

repite el nmero de veces especificado por el valor de %Q. 3a interrupcin 16 termina la ejecucin del programa. &tra forma de realizar la misma funcin pero sin tilizar el comando 3&&2 es la siguiente* G a/66 6%/E*6/66 jmp /15 A brinca a la direccin /15@ 6%/E*6/61 TEnterU G e /61 H%adena a visualizar /5 vecesi 6d 6a HYH G a/15 6%/E*6/15 7&B EQ,666M A veces que se desplegar la cadena 6%/E*6/1 7&B )Q,6/61 A copia cadena al registro )Q 6%/E*6/1E 7&B -@,68 A copia valor 68 al registro -@ 6%/E*6/1) "'( 1/ A despliega cadena 6%/E*6/1M )E% EQ A decrementa en / a EQ 6%/E*6/+6 Z'V 6/1) A si EQ es diferente a 6 brinca a 6/1) 6%/E*6/+1 "'( 16 A termina el programa. En ,ste caso se tiliza el registro EQ como contador para el programa, y por medio de la instruccin N)E%N se disminuye su valor en /. 3a instruccin NZ'VN verifica si el valor de E es diferente a 6, ,sto con base en la bandera 'V, en caso afirmativo brinca hacia la direccin 6/1). En caso contrario continPa la ejecucin normal del programa y por lo tanto se termina. .na Ptima variante del programa es tilizando de nuevo a %Q como contador, pero en lugar de tilizar 3&&2 tilizaremos decrementos a %Q y comparacin de %Q a 6. G a/66 6%/E*6/66 jmp /15 A brinca a la direccin /15@ 6%/E*6/61 TEnterU G e /61 H%adena a visualizar /5 vecesi 6d 6a HYH G a/15 6%/E*6/15 7&B )Q,6/61 A copia cadena al registro )Q

6%/E*6/1 7&B %Q,666M A veces que se desplegar la cadena 6%/E*6/1E 7&B -@,68 A copia valor 68 al registro -@ 6%/E*6/1) "'( 1/ A despliega cadena 6%/E*6/1M )E% %Q A decrementa en / a %Q 6%/E*6/+6 Z%QV 6/+4 A si %Q es igual a 6 brinca a 6/+4 6%/E*6/+1 Z72 6/1) A brinca a la direcci[oauteAn 6/1) 6%/E*6/+4 "'( 16 A termina el programa En ,ste ejemplo se usa la instruccin Z%QV para controlar la condicin de salto, el significado de tal funcin es* brinca si %QK6 El tipo de control a tilizar depender de las necesidades de programacin en determinado momento. "nterrupciones )efinicin de interrupcin* .na interrupcin es una instruccin que detiene la ejecucin de un programa para permitir el uso de la .%2 a un proceso prioritario. .na vez concluido ,ste ltimo proceso se devuelve el control a la aplicacin anterior. 2or ejemplo, cuando estamos trabajando con un procesador de palabras y en ese momento llega un aviso de uno de los puertos de comunicaciones, se detiene temporalmente la aplicacin que estabamos tilizando para permitir el uso del procesador al manejo de la informacin que est llegando en ese momento. .na vez terminada la transferencia de informacin se reanudan las funciones normales del procesador de palabras. 3as interrupciones ocurren muy seguido, sencillamente la interrupcin que actualiza la hora del d$a ocurre aproximadamente / veces por segundo. 2ara lograr administrar todas estas interrupciones, la computadora cuenta con un espacio de memoria, llamado memoria baja, donde se almacenan las direccines de cierta localidad de memoria donde se encuentran un juego de instruccines que la .%2 ejecutar para despu,s regresar a la aplicacin en proceso. En los programas anteriores hicimos uso de la interrupcion nmero 16@ para terminar la ejecucin de nuestros programas, ahora tilizaremos otra interrupcin para mostrar informacin en pantalla* tilizando )ebug tecleamos* G a/66

1%/E*6/66 Z72 6//) 1%/E*6/61 TE'(E>U G E /61 H@ola, como estas.H 6) 6- HYH G -6//) 1%/E*6//) 7&B )Q,6/61 1%/E*6/16 7&B -@,68 1%/E*6/11 "'( 1/ 1%/E*6/1+ "'( 16 En ,ste programa la interrupcin 1/@ manda al monitor la cadena localizada en la direccin a la que apunta el registro )Q. El valor que se le da a -@ determina cual de las opciones de la interrupcin 1/@ sera tilizada, ya que esta interrupcin cuenta con varias opciones. El manejo directo de interrupciones es una de las partes ms fuertes del lenguaje ensamblador, ya que con ellas es posible controlar eficientemente todos los dispositivos internos y externos de una computadora gracias al completo control que se tiene sobre operaciones de entrada y salida.

También podría gustarte