Está en la página 1de 50

Unidades de informacin Para que la PC pueda procesar la informacin es necesario que sta se encuentre en celdas especiales llamadas registros.

Los registros son conjuntos de 8 o 16 flip-flops (basculadores o biestables . !n flip-flop es un dispositi"o capa# de almacenar dos ni"eles de "oltaje$ uno bajo$ regularmente de %.& "olts ' otro alto comunmente de & "olts. (l ni"el bajo de energ)a en el flip-flop se interpreta como apagado o %$ ' el ni"el alto como prendido o 1. * estos estados se les conoce usualmente como bits$ que son la unidad mas peque+a de informacin en una computadora. * un grupo de 16 bits se le conoce como palabra$ una palabra puede ser di"idida en grupos de 8 bits llamados b'tes$ ' a los grupos de , bits les llamamos nibbles. Sistemas numricos (l sistema numrico que utili#amos a diario es el sistema decimal$ pero este sistema no es con"eniente para las m-quinas debido a que la informacin se maneja codificada en forma de bits prendidos o apagados. esta forma de codificacin nos lle"a a la necesidad de conocer el c-lculo posicional que nos permita e/presar un n0mero en cualquier base que lo necesitemos. (s posible representar un n0mero determinado en cualquier base mediante la siguiente formula1 2onde n es la posicin del d)gito empe#ando de derec3a a i#quierda ' numerando a partir de cero. 2 es el d)gito sobre el cual operamos ' 4 es la base numrica empleada. Convertir nmeros binarios a decimales 5rabajando en el lenguaje ensamblador nos encontramos con la necesidad de con"ertir n0meros del sistema binario$ que es el empleado por las computadoras$ al sistema decimal utili#ado por las personas. (l sistema binario est- basado en unicamente dos condiciones o estados$ 'a sea encendido (1 o apagado (% $ por lo tanto su base es dos. Para la con"ersin podemos utili#ar la formula de "alor posicional1 Por ejemplo$ si tenemos el numero binario 1%%11$ tomamos de derec3a a i#quierda cada d)gito ' lo multiplicamos por la base ele"ada a la nue"a posicin que ocupan1 Binario: 1 1 0 0 1 Decimal:1*2^0 1*2^1 0*2^2 0*2^! 1*2^" # 1 2 0 0 1$ # 1% decimal& (l caracter ^ es utili#ado en computacin como s)mbolo de potenciacin ' el caracter * se usa para representar la multiplicacin. Convertir nmeros decimales a binarios (/isten "arios mtodos de con"ersin de n0meros decimales a binarios. aqu) solo se anali#ar- uno. 6aturalmente es muc3o mas f-cil una con"ersin con una calculadora cient)fica$ pero no siempre se cuenta con ella$ as) que es con"eniente conocer por lo menos una forma manual para 3acerlo. (l mtodo que se e/plicar- utili#a la di"isin sucesi"a entre dos$ guardando el residuo como d)gito binario ' el resultado como la siguiente cantidad a di"idir. 5omemos como ejemplo el n0mero ,7 decimal. ,789 : 91 ' su residuo es 1 9189 : 1% ' su residuo es 1 1%89 : & ' su residuo es %

&89 : 9 ' su residuo es 1 989 : 1 ' su residuo es % 189 : % ' su residuo es 1 *rmando el n0mero de abajo 3acia arriba tenemos que el resultado en binario es 1%1%11 Sistema 'e(adecimal (n la base 3e/adecimal tenemos 16 d)gitos que "an del % al ; ' de la letra * 3asta la < (estas letras representan los n0meros del 1% al 1& . Por lo tanto$ contamos %$ 1$ 9$ 7$ ,$ &$ 6$ =$ 8$ ;$ *$ 4$ C$ 2$ ( ' <. La con"ersin entre numeracin binaria ' 3e/adecimal es sencilla. Lo primero que se 3ace para una con"ersin de un n0mero binario a 3e/adecimal es di"idirlo en grupos de , bits$ empe#ando de derec3a a i#quierda. (n caso de que el 0ltimo grupo (el que quede mas a la i#quierda sea menor de , bits se rellenan los faltantes con ceros. 5omando como ejemplo el n0mero binario 1%1%11 lo di"idimos en grupos de , bits ' nos queda1 1%. 1%11 >ellenando con ceros el 0ltimo grupo (el de la i#quierda 1 %%1%. 1%11 2espus tomamos cada grupo como un n0mero independiente ' consideramos su "alor en decimal1 %%1% : 9. 1%11 : 11 Pero como no podemos representar este n0mero 3e/adecimal como 911 porque ser)a un error$ tenemos que sustituir todos los "alores ma'ores a ; por su respecti"a representacin en 3e/adecimal$ con lo que obtenemos1 94? (2onde la ? representa la base 3e/adecimal Para con"ertir un n0mero de 3e/adecimal a binario solo es necesario in"ertir estos pasos1 se toma el primer d)gito 3e/adecimal ' se con"ierte a binario$ ' luego el segundo$ ' as) sucesi"amente 3asta completar el n0mero. Cdi)o *SC++ *@CAA generalmente se pronuncia BasCiB$ es un acrnimo de *merican @tandard Code for Anformation Anterc3ange. (ste cdigo asigna a las letras del alfabeto$ a los d)gitos decimales del % al ; ' a "arios s)mbolos adicionales un n0mero binario de = bits (ponindose el bit 8 en su estado de apagado o % . 2e esta forma cada letra$ d)gito o caracter especial ocupa un b'te en la memoria de la computadora. Podemos obser"ar que este mtodo de representacin de datos es mu' ineficiente en el aspecto numrico$ 'a que en formato binario nos basta un solo b'te para representar numeros de % a 9&&$ en cambio con el cdigo *@CAA un b'te puede representar unicamente un d)gito. 2ebido a esta ineficiencia$ el cdigo *@CAA es principalmente utili#ado en la memoria para representar te/to. ,etodo BCD 4C2 es un acrnimo de 4inar' Coded 2ecimal. (n esta notacin se utili#an grupos de , bits para representar cada d)gito decimal del % al ;. Con este mtodo podemos representar dos d)gitos por b'te de informacin. *Dn cuando este mtodo es muc3o mas pr-ctico para representacin de n0meros en la memoria en comparacin al *@CAA$ toda")a se queda por debajo del binario$ 'a que con un b'te en el mtodo 4C2 solo podemos representar d)gitos del % al ;;$ en cambio$ en formato binario podemos representar todos los d)gitos desde % 3asta 9&&.

(ste formato es utili#ado principalmente para representar n0meros mu' grandes en aplicaciones mercantiles 'a que facilita las operaciones con los mismos e"itando errores de redondeo. -e.resentacin de .unto flotante (sta representacin esta basada en la notacin cient)fica$ esto es$ representar un n0mero en dos partes1 su mantisa ' su e/ponente. Poniendo como ejemplo el n0mero 197,%%%$ podemos representarlo como 1.197E1%F6$ en esta 0ltima notacin el e/ponente nos indica el n0mero de espacios que 3a' que mo"er el espacio 3acia la derec3a para obtener el resultado original. (n caso de que el e/ponente fuera negati"o nos estar)a indicando el n0mero de espacios que 3a' que recorrer el punto decimal 3acia la i#quierda para obtener el original. /roceso de creacin de un .ro)rama Para la creacin de un programa es necesario seguir cinco pasos1 2ise+o del algoritmo$ codificacin del mismo$ su traduccin a lenguaje m-quina$ la prueba del programa ' la depuracin. (n la etapa de dise+o se plantea el problema a resol"er ' se propone la mejor solucin$ creando diagramas esquem-ticos utili#ados para el mejor planteamiento de la solucin. La codificacin del programa consiste en escribir el programa en alg0n lenguaje de programacin. en este caso espec)fico en ensamblador$ tomando como base la solucin propuesta en el paso anterior. La traduccin al lenguaje m-quina 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 prueba del programa consiste en "erificar que el programa funcione sin errores$ o sea$ que 3aga lo que tiene que 3acer. La 0ltima etapa es la eliminacin de las fallas detectadas en el programa durante la fase de prueba. La correccin de una falla normalmente requiere la repeticin de los pasos comen#ando desde el primero o el segundo. Para crear un programa en ensamblador e/isten dos opciones$ la primera es utili#ar el G*@G (Gacro *ssembler$ de Gicrosoft $ ' la segunda es utili#ar el debugger$ en esta primera seccin utili#aremos este 0ltimo 'a que se encuentra en cualquier PC con el sistema operati"o G@-2H@$ lo cual lo pone al alcance de cualquier usuario que tenga acceso a una m-quina con estas caracteristicas. 2ebug solo puede crear arc3i"os con e/tensin .CHG$ ' por las caracter)sticas de este tipo de programas no pueden ser ma'ores de 6, Cb$ adem-s deben comen#ar en el despla#amiento$ offset$ o direccin de memoria %1%%? dentro del segmento espec)fico. -e)istros de la UC/ La !CP tiene 1, registros internos$ cada uno de 16 bits. Los primeros cuatro$ *I$ 4I$ CI$ ' 2I 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 ejemplo1 *? ' *L$ que son los b'tes alto (3ig3 ' bajo (loJ del registro *I. (sta nomenclatura es aplicable tambin a los registros 4I$ CI ' 2I. Los registros son conocidos por sus nombres espec)ficos1

*I *cumulador 4I >egistro base CI >egistro contador 2I >egistro de datos 2@ >egistro del segmento de datos (@ >egistro del segmento e/tra @@ >egistro del segmento de pila C@ >egistro del segmento de cdigo 4P >egistro de apuntadores base @A >egistro )ndice fuente 2A >egistro )ndice destino @P >egistro del apuntador de la pila AP >egistro de apuntador de siguiente instruccin

< >egistro de banderas (s posible "isuali#ar los "alores de los registros internos de la !CP utili#ando el programa 2ebug. Para empe#ar a trabajar con 2ebug digite en el prompt de la computadora1 C1KL Debu) M(nterN (n la siguiente linea aparecera un guin$ ste es el indicador del 2ebug$ en este momento se pueden introducir las instrucciones del 2ebug. !tili#ando el comando1 - r M(nterN @e desplegaran todos los contenidos de los registros internos de la !CP. una forma alternati"a de mostrarlos es usar el comando BrB utili#ando como parametro el nombre del registro cu'o "alor se quiera "isuali#ar. Por ejemplo1 - rb( (sta instruccin desplegar- unicamente el contenido del registro 4I ' cambia el indicador del 2ebug de 0 1 0 a 0 : 0 (stando as) el prompt es posible cambiar el "alor del registro que se "isuali# tecleando el nue"o "alor ' a continuacin M(nterN$ o se puede dejar el "alor anterior presionando M(nterN sin telclear ning0n "alor. (s posible cambiar el "alor del registro de banderas$ as) como utili#arlo como estructura de control en nuestros programas como se "er- mas adelante. Cada bit del registro tiene un nombre ' significado especial$ la lista dada a continuacin describe el "alor de cada bit$ tanto apagado como prendido ' su relacin con las operaciones del procesador1 H"erfloJ 6O : no 3a' desbordamiento. HO : s) lo 3a' 2irection !P : 3acia adelante. 26 : 3acia atras. Anterrupts 2A : desacti"adas. (A : acti"adas @ign PL : positi"o. 6P : negati"o Qero 6Q : no es cero. Q> : s) lo es *u/iliar' Carr' 6* : no 3a' acarreo au/iliar. *C : 3a' acarreo au/iliar Parit' PH : paridad non. P( : paridad par. Carr' 6C : no 3a' acarreo. CR : @) lo 3a' 2a 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 "a a ejecutar ' la segunda son los par-metros del comando u operandos. Por ejemplo1 add a' b' *qu) BaddB es el comando a ejecutar (en este caso una adicin ' tanto Ba3B como Bb3B son los par-metros. (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 3abr- de reali#ar el procesador. (/isten algunos comandos que no requieren parametros para su operacin$ asS como otros que requieren solo un par-metro.

*lgunas "eces se utili#ar-n las instrucciones como sigue1 add al$M1=%N Los corc3etes en el segundo par-metro nos indican que "amos a trabajar con el contenido de la casilla de memoria n0mero 1=% ' no con el "alor 1=%$ a sto se le conoce como direccionamiento directo. 3uestro .rimer .ro)rama Oamos a crear un programa que sir"a para ilustrar lo que 3emos estado "iendo$ lo que 3aremos ser- una suma de dos "alores que introduciremos directamente en el programa1 (l primer paso es iniciar el 2ebug$ este paso consiste unicamente en teclear debu) 45nter6 en el prompt del sistema operati"o. Para ensamblar un programa en el 2ebug se utili#a el comando BaB (assemble . cuando se utili#a 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 C@1AP$ usualmente %1%%?$ que es la localidad donde deben iniciar los programas con e/tensin .CHG$ ' 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 BaB es recomendable 3acerlo para e"itar problemas una "e# que se 3aga uso de los registros C@1AP$ por lo tanto tecleamos1 - a0100 M(nterN *l 3acer sto aparecer- en la pantalla algo como1 %C141%1%% ' el cursor se posiciona a la derec3a de estos n0meros$ ntese que los primeros cuatro d)gitos (en sistema 3e/agesimal pueden ser diferentes$ pero los 0ltimos cuatro deben ser %1%%$ 'a que es la direccin que indicamos como inicio. *3ora podemos introducir las instrucciones1 0C1B:0100 mov ax,0002 .coloca el "alor %%%9 en el registro a/ 0C1B:010! mov bx,0004 .coloca el "alor %%%, en el registro b/ 0C1B:010$ add ax,bx .le adiciona al contenido de a/ el contenido de b/ 0C1B:0107 int 20 . pro"oca la terminacin del programa. 0C1B:010* 6o es necesario escribir los comentarios que "an despues del B.B. !na "e# digitado el 0ltimo comando$ int 20$ se le da M(nterN sin escribir nada mas$ para "ol"er al prompt del debuger. La 0ltima linea escrita no es propiamente una instruccin de ensamblador$ es una llamada a una interrupcin del sistema operati"o$ estas interrupciones ser-n tratadas mas a fondo en un cap)tulo posterior$ por el momento solo es necesario saber que nos a3orran un gran n0mero de lineas ' son mu' 0tiles para accesar a funciones del sistema operati"o. Para ejecutar el programa que escribimos se utli#a el comando B )B$ al utili#arlo "eremos que aparece un mensaje que dice1 BProgram terminated normall'B. 6aturalmente con un mensaje como ste no podemos estar seguros que el programa 3a'a 3ec3o la suma$ pero e/iste una forma sencilla de "erificarlo$ utili#ando el comando BrB del 2ebug podemos "er los contenidos de todos los registros del procesador$ simplemente teclee1 - r M(nterN *parecera en pantalla cada registro con su respecti"o "alor actual1 *I:%%%64I:%%%,CI:%%%%2I:%%%%@P:<<((4P:%%%%@A:%%%%2A:%%%% 2@:%C14(@:%C14@@:%C14C@:%C14AP:%1%* 6O !P (A PL 6Q 6* PH 6C %C141%1%* %< 24 o< (/iste la posibilidad de que los registros contengan "alores diferentes$ pero *I ' 4I deben ser los mismos$ 'a que son los que acabamos de modificar. Htra forma de "er los "alores$ mientras se ejecuta el programa es utili#ando como par-metro para BgB la direccin donde queremos que termine la ejecucin ' muestre los "alores de los registros$ en este caso ser)a1 )107$ esta instruccin ejecuta el programa$ se detiene en la direccin 1%8 ' muestra los contenidos de los registros. 5ambin se puede lle"ar un seguimiento de lo que pasa en los registros utili#ando el comando BtB (trace $ la funcin de este comando es ejecutar linea por linea lo que se ensambl mostrando cada "e# los contenidos de los regitros.

Para salir del 2ebug se utili#a el comando BqB (quit . 8uardar 9 car)ar los .ro)ramas 6o ser)a pr-ctico tener que digitar todo un programa cada "e# que se necesite$ para e"itar eso es posible guardar un programa en el disco$ con la enorme "entaja de que 'a ensamblado no ser- necesario correr de nue"o debug para ejecutarlo. Los pasos a seguir para guardar un programa 'a almacenado en la memoria son1 Hbtener la longitud del programa restando la direccin final de la direccin inicial$ naturalmente en sistema 3e/adecimal. 2arle un nombre al programa ' e/tensin Poner la longitud del programa en el registro CI Hrdenar a 2ebug que escriba el programa en el disco. !tili#ando como ejemplo el programa del cap)tulo anterior tendremos una idea mas clara de como lle"ar estos pasos1 *l terminar de ensamblar el programa se "er)a as)1 0C1B:0100 mov ax,0002 0C1B:010! mov bx,0004 0C1B:010$ add ax,bx 0C1B:0107 int 20 0C1B:010* 1 ' 10a 100 020a 000a 1 n .rueba&com 1 rc( C: 0000 :000a 1; <ritin) 000* b9tes Para obtener la longitud de un programa se utili#a el comando B3B$ el cual nos muestra la suma ' resta de dos n0meros en 3e/adecimal. Para obtener la longitud del nuestro le proporcionamos como par-metros el "alor de la direccin final de nuestro programa (1%* ' el "alor de la direccin inicial (1%% . (l primer resultado que nos muestra el comando es la suma de los par-metros ' el segundo es la resta. (l comando BnB nos permite poner un nombre al programa. (l comando Brc/B nos permite cambiar el contenido del registro CI al "alor que obtu"imos del tama+o del arc3i"o con B3B$ en este caso %%%a$ 'a que nos interesa el resultado de la resta de la direccin inicial a la direccin final. Por 0ltimo el comando J escribe nuestro programa en el disco$ indicandonos cuantos b'tes escribi. Para cargar un arc3i"o 'a guardado son necesarios dos pasos1 Proporcionar el nombre del arc3i"o que se cargar-. Cargarlo utili#ando el comando BlB (load . Para obtener el resultado correcto de los siguientes pasos es necesario que previamente se haya creado el programa anterior. 2entro del 2ebug escribimos lo siguiente1 1 n .rueba&com 1l 1 u 100 10% 0C!D:0100 B70200 ,=> *:?0002 0C!D:010! BB0"00 ,=> B:?000" 0C!D:010$ 01D7 *DD *:?B: 0C!D:0107 CD20 +3@ 20 (l 0ltimo comando$ BuB$ se utili#a para "erificar que el programa se carg en memoria$ lo que 3ace es desensamblar el cdigo ' mostrarlo 'a desensamblado. Los par-metros le indican a 2ebug desde donde ' 3asta donde desensamblar.

2ebug siempre carga los programas en memoria en la direccin 1%%?$ a menos que se le indique alguna otra. Condiciones? ciclos 9 bifurcaciones (stas estructuras$ o formas de control le dan a la m-quina un cierto grado de desicin basado en la informacin que recibe. La forma mas sencilla de comprender este tema es por medio de ejemplos. Oamos a crear tres programas que 3agan lo mismo1 desplegar un n0mero determinado de "eces una cadena de caracteres en la pantalla. 1 a100 0C1B:0100 Am. 12B C brinca a la direccin 12BD 0C1B:0102 45nter6 1 e 102 ECadena a visualiFar 1B vecesE 0d 0a EGE 1 a12B 0C1B:012B ,=> C:?000H C veces Iue se des.le)ara la cadena 0C1B:0127 ,=> D:?0102 C co.ia cadena al re)istro D: 0C1B:012B ,=> *D?0% C co.ia valor 0% al re)istro *D 0C1B:012D +3@ 21 C des.lie)a cadena 0C1B:012H 2==/ 012D C si C:J0 brinca a 012D 0C1B:01!1 +3@ 20 C termina el .ro)rama& Por medio del comando BeB es posible introducir una cadena de caracteres en una determinada localidad de memoria$ dada como par-metro$ la cadena se introduce entre comillas$ le sigue un espacio$ luego el "alor 3e/adecimal del retorno de carro$ un espacio$ el "alor de linea nue"a ' por 0ltimo el s)mbolo TUT que el ensamblador interpreta como final de la cadena. La interrupcin 91 utili#a el "alor almacenado en el registro *? 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 2I. La instruccin LHHP decrementa automaticamente el registro CI en uno ' si no 3a llegado el "alor de este registro a cero brinca a la casilla indicada como par-metro$ lo cual crea un ciclo que se repite el n0mero de "eces especificado por el "alor de CI. La interrupcin 9% termina la ejecucin del programa. Htra forma de reali#ar la misma funcin pero sin utili#ar el comando LHHP es la siguiente1 1 a100 0C1B:0100 Am. 12B C brinca a la direccin 12BD 0C1B:0102 45nter6 1 e 102 ECadena a visualiFar 1B vecesE 0d 0a EGE 1 a12B 0C1B:012B ,=> B:?000H C veces Iue se des.le)ara la cadena 0C1B:0127 ,=> D:?0102 C co.ia cadena al re)istro D: 0C1B:012B ,=> *D?0% C co.ia valor 0% al re)istro *D 0C1B:012D +3@ 21 C des.lie)a cadena 0C1B:012H D5C B: C decrementa en 1 a B: 0C1B:01!0 K3L 012D C si B: es diferente a 0 brinca a 012D 0C1B:01!2 +3@ 20 C termina el .ro)rama& (n este caso se utili#a el registro 4I como contador para el programa$ ' por medio de la instruccin B2(CB se disminu'e su "alor en 1. La instruccin BV6QB "erifica si el "alor de 4 es diferente a %$ esto con base en la bandera 6Q$ en caso afirmati"o brinca 3acia la direccin %192. (n caso contrario contin0a la ejecucin normal del programa ' por lo tanto se termina. !na 0tima "ariante del programa es utili#ando de nue"o a CI como contador$ pero en lugar de utili#ar LHHP utili#aremos decrementos a CI ' comparacin de CI a %. 1 a100 0C1B:0100 Am. 12B C brinca a la direccin 12BD 0C1B:0102 45nter6 1 e 102 ECadena a visualiFar 1B vecesE 0d 0a EGE 1 a12B 0C1B:012B ,=> D:?0102 C co.ia cadena al re)istro D: 0C1B:0127 ,=> C:?000H C veces Iue se des.le)ara la cadena 0C1B:012B ,=> *D?0% C co.ia valor 0% al re)istro *D 0C1B:012D +3@ 21 C des.lie)a cadena 0C1B:012H D5C C: C decrementa en 1 a C: 0C1B:01!0 KC:L 01!" C si C: es i)ual a 0 brinca a 01!" 0C1B:01!2 K,/ 012D C brinca a la direcciMoauten 012D 0C1B:01!" +3@ 20 C termina el .ro)rama

(n este ejemplo se us la instruccin VCIQ para controlar la condicin de salto$ el significado de tal funcin es1 brinca si CI:% (l tipo de control a utili#ar depender- de las necesidades de programacin en determinado momento. +nterru.ciones 2efinicin de interrupcin1 !na interrupcin es una instruccin que detiene la ejecucin de un programa para permitir el uso de la !CP a un proceso prioritario. !na "e# concluido este 0ltimo proceso se de"uel"e el control a la aplicacin anterior. Por ejemplo$ cuando estamos trabajando con un procesador de palabras ' en ese momento llega un a"iso 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. !na "e# terminada la transferencia de informacin se reanudan las funciones normales del procesador de palabras. Las interrupciones ocurren mu' seguido$ sencillamente la interrupcin que actuali#a la 3ora del d)a ocurre apro/imadamente 18 "eces 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 !CP ejecutar- para despues regresar a la aplicacin en proceso. (n los programas anteriores 3icimos uso de la interrupcion n0mero 9%? para terminar la ejecucin de nuestros programas$ a3ora utili#aremos otra interrupcin para mostrar informacin en pantalla1 !tili#ando 2ebug tecleamos1 1 a100 2C1B:0100 K,/ 011D 2C1B:0102 453@5-6 1 5 102 EDola? como estas&E 0D 0* EGE 1 *011D 2C1B:011D ,=> D:?0102 2C1B:0120 ,=> *D?0% 2C1B:0122 +3@ 21 2C1B:012! +3@ 20 (n este programa la interrupcin 91? manda al monitor la cadena locali#ada en la direccin a la que apunta el registro 2I. (l "alor que se le da a *? determina cual de las opciones de la interrupcin 91? sera utili#ada$ 'a que esta interrupcin cuenta con "arias 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 dispositi"os internos ' e/ternos de una computadora gracias al completo control que se tiene sobre operaciones de entrada ' salida.

Software necesario Para poder crear un programa se requieren varias herramientas: Primero un editor para crear el programa fuente. Segundo un compilador que no es mas que un programa que "traduce" el programa fuente a un programa objeto. Y tercero un enlazador o linker, que genere el programa ejecutable a partir del programa objeto. l editor puede ser cualquier editor de te!tos que se tenga a la mano, como compilador utilizaremos el "#S" $macro ensamblador de "icrosoft% &a que es el mas com'n, & como enlazador utilizaremos el programa link.

(a e!tensi)n usada para que "#S" reconozca los programas fuente en ensamblador es .#S"* una vez traducido el programa fuente, el "#S" crea un archivo con la e!tensi)n .+,-, este archivo contiene un "formato intermedio" del programa, llamado as. porque a'n no es ejecutable pero tampoco es &a un programa en lenguaje fuente. l enlazador genera, a partir de un archivo .+,- o la combinaci)n de varios de estos archivos, un programa e!ecutable, cu&a e!tensi)n es usualmente . / aunque tambi0n puede ser .1+", dependiendo de la forma en que se ensambl). ste tutorial describe la forma de trabajar con la versi)n 2.3 o posterior del "#S", la diferencia principal de esta versi)n con otras anteriores es la forma en que se declaran los segmentos de c)digo, datos & la pila, pero la estructura de programaci)n es la misma. Utilizacin del MASM 4na vez que se cre) el programa objeto se debe pasar al "#S" para crear el c)digo intermedio, el cual queda guardado en un archivo con e!tensi)n .+,-. l comando para realizar esto es: MASM Nombre_Archivo; [Enter] 5onde 6ombre7#rchivo es el nombre del programa fuente con e!tensi)n .#S" que se va a traducir. l punto & coma utilizados despues del nombre del archivo le indican al macro ensamblador que genere directamente el c)digo intermedio, de omitirse este caracter el "#S" pedir8 el nombre del archivo a traducir, el nombre del archivo que se generar8 as. como opciones de listado de informaci)n que puede proporcionar el traductor. s posible ejecutar el "#S" utilizando par8metros para obtener un fin determinado, toda la lista de los mismos se encuentra en el manual del programa. Solo recordar0 en este tutorial la forma de pasar dichos par8metros al "#S": 9odo par8metro va despues del simbolo ":". s posible utilizar varios par8metros a la vez. 4na vez tecleados todos los par8metros se escribe el nombre del archivo a ensamblar. Por ejemplo, si queremos que el "#S" ensamble un programa llamado prueba, & ademas deseamos que despliege el n'mero de lineas fuente & s.mbolos procesados $eso lo realiza con el parametro :v%, & si ocurre un error que nos diga en que linea ocurri) $con el parametro :z%, entonces tecleamos: MASM /v /z r!eba; Uso del enlazador "lin#er$

l "#S" unicamente puede crear programas en formato .+,-, los cuales no son ejecutables por si solos, es necesario un enlazador que genere el c)digo ejecutable. (a utilizaci)n del enlazador es mu& parecida a la del "#S", unicamente se teclea en el indicador del 5+S: %&N' Nombre_Archivo ; 5onde 6ombre7#rchivo es el nombre del programa intermedio $+,-%. sto generara directamente un archivo con el nombre del programa intermedio & la e!tensi)n . / (ormato interno de !n ro)rama Para poder comunicarnos en cualquier lenguaje, inclu&endo los lenguajes de programaci)n, es necesario seguir un conjunto de reglas, de lo contrario no podr.amos e!presar lo que deseamos. n este apartado veremos algunas de las reglas que debemos seguir para escribir un programa en lenguaje ensamblador, enfocandonos a la forma de escribir las instrucciones para que el ensamblador sea capaz de interpretarlas. ,asicamente el formato de una linea de c)digo en lenguaje ensamblador consta de cuatro partes: tiqueta, variable o constante: 6o siempre es definida, si se define es necesario utilizar separadores para diferenciarla de las otras partes, usualmente espacios, o alg'n s.mbolo especial. 5irectiva o instrucci)n: es el nombre con el que se conoce a la instrucci)n que queremos que se ejecute. +perando$s%: la ma&or.a de las instrucciones en ensamblador trabajan con dos operandos, aunque ha& instrucciones que funcionan solo con uno. l primero normalmente es el operando destino, que es el dep)sito del resultado de alguna operaci)n* & el segundo es el operando fuente, que lleva el dato que ser8 procesado. (os operandos se separan uno del otro por medio de una coma ",". 1omentario: como su nombre lo indica es tan solo un escrito informativo, usado principalmente para e!plicar que est8 haciendo el programa en determinada linea* se separa de las otras partes por medio de un punto & coma "*". sta parte no es necesaria en el programa, pero nos a&uda a depurar el programa en caso de errores o modificaciones.

1omo ejemplo podemos ver una linea de un programa escrito en ensamblador: Eti*+, M-. A/011+A2 ; &nicializa A/ con el valor 11+A #qu. tenemos la etiqueta " tiq;" $<dentificable como etiqueta por el s.mbolo final ":"%, la instrucci)n ""+=", & los operandos "#/" como destino & "33;#" como fuente, ademas del comentario que sigue despues del "*". 4n ejemplo de una declaraci)n de una constante esta dado por: UN- E3U 111+2 5onde "46+" es el nombre de la constante que definimos, " >4" es la directiva utilizada para usar a "46+" como constante, & "333;?" es el operando, que en este caso sera el valor que guarde 46+. (ormato E4terno de !n ro)rama #demas de definir ciertas reglas para que el ensamblador pueda entender una instrucci)n es necesario darle cierta informaci)n de los recursos que se van a utilizar, como por ejemplo los segmentos de memoria que se van a utilizar, datos iniciales del programa & tambi0n donde inicia & donde termina nuestro c)digo. 4n programa sencillo puede ser el siguiente: 5M-6E% SMA%% 57-6E 8ro)rama, M-. A/097112 &N: ;+2 5S:A7' EN6 8ro)rama l programa realmente no hace nada, unicamente coloca el valor @133? en el registro #/, para que la interrupci)n A;? termine el programa, pero nos da una idea del formato e!terno en un programa de ensamblador. (a directiva ."+5 ( define el tipo de memoria que se utilizar8* la directiva .1+5 nos indica que lo que esta a continuaci)n es nuestro programa* la etiqueta Programa indica al ensamblador el inicio del programa* la directiva .S9#1B le pide al ensamblador que reserve un espacio de memoria para las operaciones de la pila* la instrucci)n 65 Programa marca el final del programa. E<em lo r=ctico de !n ro)rama

#qu. se ejemplificar8 un programa que escriba una cadena en pantalla: 5M-6E% SMA%% 57-6E 8ro)rama, M-. A/0 >6A:A M-. 6S0 A/ M-. 6/0 -ffset :e4to M-. A20 ? &N: ;+2 M-. A/097112 &N: ;+2 56A:A :e4to 6@ AMensa<e en antalla5BA 5S:A7' EN6 8ro)rama (os primeros pasos son iguales a los del programa anterior: se define el modelo de memoria, se indica donde inicia el c)digo del programa & en donde comienzan las instrucciones. # continuaci)n se coloca C5#9# en el registro #/ para despues pasarlo al registro 5S &a que no se puede copiar directamente una constante a un registro de segmento. l contenido de C5#9# es el n'mero del segmento que ser8 utilizado para los datos. (uego se guarda en el registro 5/ un valor dado por "+ffset 9e!to" que nos da la direcci)n donde se encuentra la cadena de caracteres en el segmento de datos. (uego utiliza la opci)n D $5ada por el valor de #?% de la interrupci)n A;? para desplegar la cadena posicionada en la direcci)n que contiene 5/. Por 'ltimo utiliza la opci)n @1? de la interrupci)n A;? para terminar la ejecuci)n del programa $aunque cargamos al registro #/ el valor @133? la interrupci)n A;? solo toma como opci)n el contenido del registro #?%. (a directiva .5#9# le indica al ensamblador que lo que est8 escrito a continuaci)n debe almacenarlo en el segmento de memoria destinado a los datos. (a directiva 5, es utilizada para 5efinir ,&tes, 0sto es, asignar a cierto identificador $en este caso "9e!to"% un valor, &a sea una constante o una cadena de caracteres, en este 'ltimo caso deber8 estar entre comillas sencillas E & terminar con el simbolo "F". Se)mentos (a arquitectura de los procesadores !GH obliga al uso de segmentos de memoria para manejar la informaci)n, el tamaIo de estos segmentos es de H@kb.

(a raz)n de ser de estos segmentos es que, considerando que el tamaIo m8!imo de un n'mero que puede manejar el procesador esta dado por una palabra de ;H bits o registro, no ser.a posible accesar a m8s de H22JH localidades de memoria utilizando uno solo de estos registros, ahora, si se divide la memoria de la pc en grupos o segmentos, cada uno de H22JH localidades, & utilizamos una direcci)n en un registro e!clusivo para localizar cada segmento, & entonces cada direcci)n de una casilla espec.fica la formamos con dos registros, nos es posible accesar a una cantidad de @AD@DHKADH b&tes de memoria, lo cual es, en la actualidad, m8s memoria de la que veremos instalada en una P1. Para que el ensamblador pueda manejar los datos es necesario que cada dato o instrucci)n se encuentren localizados en el 8rea que corresponde a sus respectivos segmentos. l ensamblador accesa a esta informaci)n tomando en cuenta la localizaci)n del segmento, dada por los registros 5S, S, SS & 1S, & dentro de dicho registro la direcci)n del dato espec.fico. s por ello que cuando creamos un programa empleando el 5ebug en cada linea que vamos ensamblando aparce algo parecido a lo siguiente: +7@1,1+1; M-. A/0@/ n donde el primer n'mero, ;1,3, corresponde al segmento de memoria que se est8 utilizando, el segundo se refiere la la direcci)n dentro de dicho segmento, & a continuaci)n aparecen las instrucciones que se almacenaran a partir de esa direcci)n. (a forma de indicarle al ensamblador con cuales de los segmentos se va a trabajar es por medio de las directivas .1+5 , .5#9# & .S9#1B. l ensamblador se encarga de ajustar el tamaIo de los segmentos tomando como base el n'mero de b&tes que necesita cada instrucci)n que va ensamblando, &a que ser.a un desperdicio de memoria utilizar los segmentos completos. Por ejemplo, si un programa unicamente necesita ;3kb para almacenar los datos, el segmento de datos unicamente sera de ;3kb & no de los H@kb que puede manejar. :abla de sCmbolos # cada una de las partes de una linea de c)digo en ensamblador se le conoce como token, por ejemplo en la linea de c)digo M-. A/0.ar tenemos tres tokens, la instrucci)n "+=, el operando #/, & el operando =#L. l ensamblador lo que hace para generar el c)digo +,- es leer cada

uno de los tokens & buscarlo en una tabla interna de "equivalencias" conocida como tabla de palabras reservadas, que es donde se encuentran todos los significados de los mnem)nicos que utilizamos como instrucciones. Siguiendo este proceso, el ensamblador lee "+=, lo busca en su tabla & al encontrarlo lo identifica como una instrucci)n del procesador, as. mismo lee #/ & lo reconoce como un registro del procesador, pero al momento de buscar el token =ar en la tabla de palabras reservadas no lo encuentra & entonces lo busca en la tabla de s.mbolos que es una tabla donde se encuentran los nombres de las variables, constantes & etiquetas utilizadas en el programa donde se inclu&e su direcci)n en memoria & el tipo de datos que contiene. #lgunas veces el ensamblador se encuentra con alg'n token no definido en el programa, lo que hace en estos casos es dar una segunda pasada por el programa fuente para verificar todas las referencias a ese s.mbolo & colocarlo en la tabla de s.mbolos. !isten s.mbolos que no los va a encontrar &a que no pertenecen a ese segmento & el programa no sabe en que parte de la memoria se encontrara dicho segmento, en este momento entra en acci)n el enlazador, el cual crea la estructura que necesita el cargador para que el segmento & el token sean definidos cuando se cargue el programa & antes de que el mismo sea ejecutado. Movimiento de datos n todo programa es necesario mover datos en la memoria & en los registros de la 41P* e!isten diversas formas de hacer esto: puede copiar datos de la memoria a alg'n registro, de registro a registro, de un registro a una pila, de la pila a un registro, transmitir datos hacia dispositivos e!ternos as. como recibir datos de dichos dispositivos. ste movimiento de datos est8 sujeto a reglas & restricciones. #lgunas de ellas son las que se citan a continuaci)n. 6o es posible mover datos de una localidad de memoria a otra directamente, es necesario primero mover los datos de la localidad origen hacia un registro & luego del registro a la localidad destino. 6o se puede mover una constante directamente a un registro de segmentos, primero se debe mover a un registro de la 41P. s posible mover bloques de datos por medio de las instrucciones movs, que copia una cadena de b&tes o palabras* movsb que copia n b&tes de una localidad a otra* & movsw copia n palabras de una localidad a otra. (as dos

'ltimas instrucciones toman los valores de las direcciones definidas por 5S:S< como grupo de datos a mover & S:5< como nueva localizaci)n de los datos. Para mover los datos tambi0n e!isten las estructuras llamadas pilas, en este tipo de estructuras los datos se introducen con la instrucci)n !sh & se e!traen con la instrucci)n o n una pila el primer dato introducido es el 'ltimo que podemos sacar, esto es, si en nuestro programa utilizamos las instrucciones: 8US2 A/ 8US2 @/ 8US2 7/ Para devolver los valores correctos a cada registro al momento de sacarlos de la pila es necesario hacerlo en el siguiente orden: 8-8 7/ 8-8 @/ 8-8 A/ Para la comunicaci)n con dispositivos e!ternos se utilizan el comando o!t para mandar informaci)n a un puerto & el comando in para leer informaci)n recibida desde algun puerto. (a sinta!is del comando out es: -U: 6/0A/ 5onde 5/ contiene el valor del puerto que se utilizar8 para la comunicaci)n & #/ contiene la informaci)n que se mandar8. (a sinta!is del comando in es: &N A/06/ 5onde #/ es el registro donde se guardar8 la informaci)n que llegue & 5/ contiene la direcci)n del puerto por donde llegar8 la informaci)n. - eraciones l)icas D aritmEticas (as instrucciones de las operaciones l)gicas son: and, not, or & 4or, 0stas trabajan sobre los bits de sus operandos. Para verificar el resultado de operaciones recurrimos a las instrucciones cm & test.

(as instrucciones utilizadas para las operaciones algebraicas son: para sumar add, para restar s!b, para multiplicar m!l & para dividir div. 1asi todas las instrucciones de comparaci)n est8n basadas en la informaci)n contenida en el registro de banderas. 6ormalmente las banderas de este registro que pueden ser directamente manipuladas por el programador son la bandera de direcci)n de datos 6(, usada para definir las operaciones sobre cadenas. +tra que tambi0n puede ser manipulada es la bandera &( por medio de las instrucciones sti & cli, para activar & desactivar respectivamente las interrupciones. Saltos0 ciclos D rocedimientos (os saltos incondicionales en un programa escrito en lenguaje ensamblador est8n dados por la instrucci)n <m , un salto es alterar el flujo de la ejecuci)n de un programa enviando el control a la direcci)n indicada. 4n ciclo, conocido tambi0n como iteraci)n, es la repetici)n de un proceso un cierto n'mero de veces hasta que alguna condici)n se cumpla. n estos ciclos se utilizan los brincos "condicionales" basados en el estado de las banderas. Por ejemplo la instrucci)n <nz que salta solamente si el resultado de una operaci)n es diferente de cero & la instrucci)n <z que salta si el resultado de la operaci)n es cero. Por 'ltimo tenemos los procedimientos o rutinas, que son una serie de pasos que se usar8n repetidamente en el programa & en lugar de escribir todo el conjunto de pasos unicamente se les llama por medio de la instrucci)n call. 4n procedimiento en ensamblador es aquel que inicie con la palabra 8roc & termine con la palabra ret. Lealmente lo que sucede con el uso de la instrucci)n call es que se guarda en la pila el registro &8 & se carga la direcci)n del procedimiento en el mismo registro, conociendo que <P contiene la localizaci)n de la siguiente instrucci)n que ejecutara la 41P, entonces podemos darnos cuenta que se desv.a el flujo del programa hacia la direcci)n especificada en este registro. #l momento en que se llega a la palabra ret se saca de la pila el valor de <P con lo que se devuelve el control al punto del programa donde se invoc) al procedimiento. s posible llamar a un procedimiento que se encuentre ubicado en otro segmento, para 0sto el contenido de 7S $que nos indica que segmento se est8 utilizando% es empujado tambi0n en la pila. &nstr!ccin M-.

Prop)sito: 9ransferencia de datos entre celdas de memoria, registros & acumulador. Sinta!is: M-. 6estino0(!ente 5onde 5estino es el lugar a donde se mover8n los datos & fuente es el lugar donde se encuentran dichos datos. (os diferentes movimientos de datos permitidos para esta instrucci)n son: 5estino: memoria. Muente: acumulador 5estino: acumulador. Muente: memoria 5estino: registro de segmento. Muente: memoria:registro 5estino: memoria:registro. Muente: registro de segmento 5estino: registro. Muente: registro 5estino: registro. Muente: memoria 5estino: memoria. Muente: registro 5estino: registro. Muente: dato inmediato 5estino: memoria. Muente: dato inmediato jemplo: M-. A/0111Fh M-. @/0A/ M-. A/09711h &N: ;+2 ste pequeIo programa mueve el valor 333H? al registro #/, luego mueve el contenido de #/ $333Hh% al registro ,/, por 'ltimo mueve el valor @133h al registro #/ para terminar la ejecuci)n con la opci)n @1 de la interrupci)n A;h. &nstr!ccin M-.S "M-.S@$ "M-.SG$ Prop)sito: "over cadenas de b&tes o palabras desde la fuente, direccionada por S<, hasta el destino direccionado por 5<. Sinta!is: M-.S ste comando no necesita parametros &a que toma como direcci)n fuente el contenido del registro S< & como destino el contenido de 5<. (a secuencia de instrucciones siguiente ilustran esto:

M-. S&0 -((SE: .AH+ M-. 6&0 -((SE: .AH; M-.S Primero inicializamos los valores de S< & 5< con las direcciones de las variables =#L; & =#LA respectivamente, despues al ejecutar "+=S se copia el contenido de =#L; a =#LA. (os comandos "+=S, & "+=SN se utilizan de la misma forma que "+=S, el primero mueve un b&te & el segundo una palabra. &nstr!ccin %-6S "%-6S@$ "%-6SG$ Prop)sito: 1argar cadenas de un b&te o palabra al acumulador. Sinta!is: %-6S sta instrucci)n toma la cadena que se encuentre en la direcci)n especificada por S<, la carga al registro #( $o #/% & suma o resta ; $segun el estado de 5M% a S< si la transferencia es de b&tes o A si la transferencia es de palabras. M-. S&0 -((SE: .AH+ %-6S (a primer linea carga la direcci)n de =#L; en S< & la segunda linea lleva el contenido de esa localidad al registro #(. (os comandos (+5S, & (+5SN se utilizan de la misma forma, el primero carga un b&te & el segundo una palabra $utiliza el registro completo #/%. &nstr!ccin %A2( Prop)sito: 9ransfiere al registro #? el contenido de las banderas Sinta!is: %A2( sta instrucci)n es 'til para verificar el estado de las banderas durante la ejecuci)n de nuestro programa. (as banderas quedan en el siguiente orden dentro del registro: S( I( JK A( JK 8( JK 7(

l simbolo "OP" significa que en esos bits habr8. un valor indefinido. &nstr!ccin %6S Prop)sito: 1argar el registro del segmento de datos Sinta!is: %6S destino0 f!ente l operando fuente debe ser una palabra doble en memoria. (a palabra asociada con la direcci)n mas grande es transferida a 5S, o sea que se toma como la direcci)n del segmento. (a palabra asociada con la direcci)n menor es la direcci)n del desplazamiento & se deposita en el registro seIalado como destino. &nstr!ccin %EA Prop)sito: 1arga la direcci)n del operando fuente. Sinta!is: %EA destino0 f!ente l operando fuente debe estar ubicado en memoria, & se coloca su desplazamiento en el registro .ndice o apuntador especificado en destino. Para ilustrar una de las facilidades que tenemos con este comando pongamos una equivalencia: M-. S&0 -((SE: .AH+ quivale a: %EA S&0 .AH+ s mu& probable que para el programador sea mas sencillo crear programas e!tensos utilizando este 'ltimo formato. &nstr!ccin %ES Prop)sito: 1arga el registro del segmento e!tra Sinta!is: %ES destino0 f!ente

l operando fuente debe ser un operando en memoria de palabra doble. l contenido de la palabra con la direcci)n ma&or se interpreta como la direcci)n del segmento & se coloca en S. (a palabra con la direcci)n menor es la direcci)n del desplazamiento & se coloca en el registro especificado en el par8metro destino. &nstr!ccin 8-8 Prop)sito: Lecupera un dato de la pila Sinta!is: 8-8 destino sta instrucci)n transfiere el 'ltimo valor almacenado en la pila al operando destino, despues incrementa en dos el registro SP. ste incremento se debe a que la pila va creciendo desde la direcci)n mas alta de memoria del segmento hacia la mas baja, & la pila solo trabaja con palabras $A b&tes%, entonces al incrementar en dos el registro SP realmente se le esta restando dos al tamaIo real de la pila. &nstr!ccin 8-8( Prop)sito: !trae las banderas almacenadas en la pila. Sinta!is: 8-8( ste comando transfiere bits de la palabra almacenada en la parte superior de la pila hacia el registro de banderas. (a forma de transferencia es la siguiente: ,<9 ,#65 L# 3 1M A PM @ #M H QM K SM G 9M D <M ;3 5M ;; +M

stas localizaciones son las mismas para el comando P4S?M 4na vez hecha la transferencia se incrementa en A el registro SP disminu&endo as. el tamaIo de la pila. &nstr!ccin 8US2 Prop)sito: 1oloca una palabra en la pila. Sinta!is: 8US2 f!ente (a instrucci)n P4S? decrementa en dos el valor de SP & luego transfiere el contenido del operando fuente a la nueva direcci)n resultante en el registro reci0n modificado. l decremento en la direcci)n se debe a que al agregar valores a la pila 0sta crece de la direcci)n ma&or a la direcci)n menor del segmento, por lo tanto al restarle A al valor del registro SP lo que hacemos es aumentar el tamaIo de la pila en dos b&tes, que es la 'nica cantidad de informaci)n que puede manejar la pila en cada entrada & salida de datos. &nstr!ccin 8US2( Prop)sito: 1oloca el valor de las banderas en la pila Sinta!is: 8US2( ste comando decrementa en A el valor del registro SP & luego se transfiere el contenido del registro de banderas a la pila, en la direcci)n indicada por SP. (as banderas quedan almacenadas en memoria en los mismos bits indicados en el comando P+PM &nstr!ccin AN6 Prop)sito: Lealiza la conjunci)n de los operandos bit por bit. Sinta!is: AN6 destino0 f!ente

1on esta instrucci)n se lleva a cabo la operaci)n "&" l)gica de los dos operandos: Muente 5estino R 5estino SSSSSSSSSSSSSSSSSSSSSSSSSS ;;R; ;3R3 3;R3 33R3 l resultado de la operaci)n se almacena en el operando destino. &nstr!ccin NEL Prop)sito: Tenera el complemento a A Sinta!is: NEL destino sta instrucci)n genera el complemento a A del operando destino & lo almacena en este mismo operando. Por ejemplo, si #/ guarda el valor de ;AJ@?, entonces: NEL A/ 6os dejar.a almacenado en el registro #/ el valor 511?. &nstr!ccin N-: Prop)sito: (leva a cabo la negaci)n bit por bit del operando destino. Sinta!is: N-: destino l resultado se guarda en el mismo operando destino. &nstr!ccin -H Prop)sito: +L inclusivo l)gico Sinta!is: -H destino0 f!ente

(a instrucci)n +L lleva a cabo, bit por bit, la dis&unci)n inclusiva l)gica de los dos operandos: Muente 5estino R 5estino SSSSSSSSSSSSSSSSSSSSSSSSSS ;;R; ;3R; 3;R; 33R3 &nstr!ccin :ES: Prop)sito: 1omparar logicamente los operandos Sinta!is: :ES: destino0 f!ente Lealiza una conjunci)n, bit por bit, de los operandos, pero a diferencia de #65 esta instrucci)n no coloca el resultado en el operando destino, solo tiene efecto sobre el estado de las banderas. &nstr!ccin /-H Prop)sito: +L e!clusivo Sinta!is: /-H destino0 f!ente Su funci)n es efectuar bit por bit la dis&unci)n e!clusiva l)gica de los dos operandos. Muente 5estino R 5estino SSSSSSSSSSSSSSSSSSSSSSSSSS ;;R3 33R; 3;R; 33R3 &nstr!ccin A67 Prop)sito: #dici)n con acarreo.

Sinta!is: A67 destino0 f!ente (leva a cabo la suma de dos operandos & suma uno al resultado en caso de que la bandera 1M est0 activada, esto es, en caso de que e!ista acarreo. l resultado se guarda en el operando destino. &nstr!ccin A66 Prop)sito: #dici)n de los operandos. Sinta!is: A66 destino0 f!ente Suma los dos operandos & guarda el resultado en el operando destino. &nstr!ccin 6&. Prop)sito: 5ivisi)n sin signo Sinta!is: 6&. f!ente l divisor puede ser un b&te o palabra & es el operando que se le da a la instrucci)n. Si el divisor es de G bits se toma como dividendo el registro de ;H bits #/ & si el divisor es de ;H bits se tomara como dividendo el registro par 5/:#/, tomando como palabra alta 5/ & como baja #/. Si el divisor fu0 un b&te el cociente se almacena en el registro #( & el residuo en #?, si fu0 una palabra el cociente se guarda en #/ & el residuo en 5/. &nstr!ccin &6&. Prop)sito: 5ivisi)n con signo Sinta!is: &6&. f!ente 1onsiste basicamente en lo mismo que la instrucci)n 5<=, solo que esta 'ltima realiza la operaci)n con signo.

Para sus resultados utiliza los mismos registros que la instrucci)n 5<=. &nstr!ccin MU% Prop)sito: "ultiplicaci)n sin signo Sinta!is: MU% f!ente l ensamblador asume que el multiplicando sera del mismo tamaIo que el del multiplicador, por lo tanto multiplica el valor almacenado en el registro que se le da como operando por el que se encuentre contenido en #? si el multiplicador es de G bits o por #/ si el multiplicador es de ;H bits. 1uando se realiza una multiplicaci)n con valores de G bits el resultado se almacena en el registro #/ & cuando la multiplicaci)n es con valores de ;H bits el resultado se almacena en el registro par 5/:#/. &nstr!ccin &MU% Prop)sito: "ultiplicaci)n de dos enteros con signo. Sinta!is: &MU% f!ente ste comando hace lo mismo que el anterior, solo que si toma en cuenta los signos de las cantidades que se multiplican. (os resultados se guardan en los mismos registros que en la instrucci)n "4(. &nstr!ccin S@@ Prop)sito: Substracci)n con acarreo Sinta!is: S@@ destino0 f!ente sta instrucci)n resta los operandos & resta uno al resultado si 1M est8 activada. l operando fuente siempre se resta del destino. ste tipo de substracci)n se utiliza cuando se trabaja con cantidades de JA bits.

&nstr!ccin SU@ Prop)sito: Substracci)n Sinta!is: SU@ destino0 f!ente Lesta el operando fuente del destino.

(as instrucciones del ensamblador


<nstrucciones de salto Son utilizadas para transferir el flujo del proceso al operando indicado. -"P -# $-6, % -# $-6, % -, $-6# % -, $-6#% - $-Q% -6 $-6Q% -T $-6( % -T $-6(% -( $-6T % -( $-6T% -1 -61 -6+ -6P $-P+% -6S -+ -P $-P % -S <nstrucciones para ciclos: (++P 9ransfieren el flujo del proceso, condicional o incondicionalmente, a un destino repitiendose esta acci)n hasta que el contador sea cero. (++P (++P (++P6 <nstrucciones de conteo Se utilizan para decrementar o incrementar el contenido de los contadores. 5 1 <61

<nstrucciones de comparaci)n Son usadas para comparar operandos, afectan al contenido de las banderas. 1"P 1"PS $1"PS,% $1"PSN% <nstrucciones de banderas #fectan directamente al contenido de las banderas. 1(1 1(5 1(< 1"1 S91 S95 S9<

&nstr!ccin MM8 Prop)sito: Salto incondicional Sinta!is: MM8 destino sta instrucci)n se utiliza para desviar el flujo de un programa sin tomar en cuenta las condiciones actuales de las banderas ni de los datos. &nstr!ccin MA "MN@E$ Prop)sito: ,rinco condicional Sinta!is: MA Eti*!eta 5espu0s de una comparaci)n este comando salta si est8 arriba o salta si no est8 abajo o si no es igual. sto significa que el salto se realiza solo si la bandera 1M esta desactivada o si la bandera QM esta desactivada $que alguna de las dos sea igual a cero%. &nstr!ccin MAE "MN@$ Prop)sito: salto condicional Sinta!is:

MAE eti*!eta Salta si est8 arriba o si es igual o salta si no est8 abajo. l salto se efectua si 1M esta desactivada. &nstr!ccin M@ "MNAE$ Prop)sito: salto condicional Sinta!is: M@ eti*!eta Salta si est8 abajo o salta si no est8 arriba o si no es igual. Se efect'a el salto si 1M esta activada. &nstr!ccin M@E "MNA$ Prop)sito: salto condicional Sinta!is: M@E eti*!eta Salta si est8 abajo o si es igual o salta si no est8 arriba. l salto se efect'a si 1M est8 activado o si QM est8 activado $que cualquiera sea igual a ;%. &nstr!ccin ME "MI$ Prop)sito: salto condicional Sinta!is: ME eti*!eta Salta si es igual o salta si es cero. l salto se realiza si QM est8 activada. &nstr!ccin MNE "MNI$ Prop)sito: salto condicional

Sinta!is: MNE eti*!eta Salta si no es igual o salta si no es cero. l salto se efectua si QM est8 desactivada. &nstr!ccin ML "MN%E$ Prop)sito: salto condicional, se toma en cuenta el signo. Sinta!is: ML eti*!eta Salta si es m8s grande o salta si no es menor o igual. l salto ocurre si QM U 3 u +M U SM. &nstr!ccin MLE "MN%$ Prop)sito: salto condicional, se toma en cuenta el signo. Sinta!is: MLE eti*!eta Salta si es m8s grande o igual o salta si no es menor que. l salto se realiza si SM U +M &nstr!ccin M% "MNLE$ Prop)sito: salto condicional, se toma en cuenta el signo. Sinta!is: M% eti*!eta Salta si es menor que o salta si no es ma&or o igual. l salto se efect'a si SM es diferente a +M. &nstr!ccin M%E "MNL$ Prop)sito: salto condicional, se toma en cuenta el signo.

Sinta!is: M%E eti*!eta Salta si es menor o igual o salta si no es m8s grande. l salto se realiza si QM U ; o si SM es diferente a +M &nstr!ccin M7 Prop)sito: salto condicional, se toman en cuenta las banderas. Sinta!is: M7 eti*!eta Salta si ha& acarreo. l salto se realiza si 1M U ; &nstr!ccin MN7 Prop)sito: salto condicional, se toma en cuenta el estado de las banderas. Sinta!is: MN7 eti*!eta Salta si no ha& acarreo. l salto se efect'a si 1M U 3. &nstr!ccin MNProp)sito: salto condicional, se toma en cuenta el estado de las banderas. Sinta!is: MN- eti*!eta Salta si no ha& desbordamiento. l salto se efectua si +M U 3. &nstr!ccin MN8 "M8-$ Prop)sito: salto condicional, toma en cuenta el estado de las banderas.

Sinta!is: MN8 eti*!eta Salta si no ha& paridad o salta si la paridad es non. l salto ocurre si PM U 3. &nstr!ccin MNS Prop)sito: salto condicional, toma en cuenta el estado de las banderas. Sinta!is: MN8 eti*!eta Salta si el signo esta desactivado. l salto se efect'a si SM U 3. &nstr!ccin MProp)sito: salto condicional, toma en cuenta el estado de las banderas. Sinta!is: M- eti*!eta Salta si ha& desbordamiento $overfloV%. l salto se realiza si +M U ;. &nstr!ccin M8 "M8E$ Prop)sito: salto condicional, toma en cuenta el estado de las banderas. Sinta!is: M8 eti*!eta Salta si ha& paridad o salta si la paridad es par. l salto se efect'a si PM U ;. &nstr!ccin MS Prop)sito: salto condicional, toma en cuenta el estado de las banderas.

Sinta!is: MS eti*!eta Salta si el signo est8 prendido. l salto se efect'a si SM U ;. &nstr!ccin %--8 Prop)sito: Tenerar un ciclo en el programa. Sinta!is: %--8 eti*!eta (a instrucci)n loop decrementa 1/ en ;, & transfiere el flujo del programa a la etiqueta dada como operando si 1/ es diferente a ;. &nstr!ccin %--8E Prop)sito: Tenerar un ciclo en el programa considerando el estado de QM Sinta!is: %--8E eti*!eta sta instrucci)n decrementa 1/ en ;. Si 1/ es diferente a cero & QM es igual a ;, entonces el flujo del programa se transfiere a la etiqueta indicada como operando. &nstr!ccin %--8NE Prop)sito: Tenerar un ciclo en el programa, considerando el estado de QM Sinta!is: %--8NE eti*!eta sta instrucci)n decrementa en uno a 1/ & transfiere el flujo del programa solo si QM es diferente a 3. &nstr!ccin 6E7 Prop)sito: 5ecrementar el operando Sinta!is:

6E7 destino sta operaci)n resta ; al operando destino & almacena el nuevo valor en el mismo oeprando. &nstr!ccin &N7 Prop)sito: <ncrementar el operando. Sinta!is: &N7 destino (a instrucci)n suma ; al operando destino & guarda el resultado en el mismo operando destino. &nstr!ccin 7M8 Prop)sito: 1omparar los operandos. Sinta!is: 7M8 destino0 f!ente sta instrucci)n resta el operando fuente al operando destino pero sin que 0ste almacene el resultado de la operaci)n, solo se afecta el estado de las banderas. &nstr!ccin 7M8S "7M8S@$ "7M8SG$ Prop)sito: 1omparar cadenas de un b&te o palabra. Sinta!is: 7M8 destino0 f!ente 1on esta instrucci)n la cadena de caracteres fuente se resta de la cadena destino. Se utilizan 5< como indice para el segmento e!tra de la cadena fuente & S< como indice de la cadena destino. Solo se afecta el contenido de las banderas & tanto 5< como S< se incrementan. &nstr!ccin 7%7 Prop)sito: (impiar bandera de acarreo.

Sinta!is: 7%7 sta instrucci)n apaga el bit correspondiente a la bandera de acarreo, o sea, lo pone en cero. &nstr!ccin 7%6 Prop)sito: (impiar bandera de direcci)n Sinta!is: 7%6 (a instrucci)n 1(5 pone en cero el bit correspondiente a la bandera de direcci)n. &nstr!ccin 7%& Prop)sito: (impiar bandera de interrupci)n Sinta!is: 7%& 1(< pone en cero la bandera de interrupciones, desabilitando as. aquellas interrupciones enmascarables. 4na interrupci)n enmascarable es aquella cu&as funciones son desactivadas cuando <M U 3. &nstr!ccin 7M7 Prop)sito: 1omplementar la bandera de acarreo. Sinta!is: 7M7 sta instrucci)n complementa el estado de la bandera 1M, si 1M U 3 la instrucci)n la iguala a ;, & si es ; la instrucci)n la iguala a 3. Podemos decir que unicamente "invierte" el valor de la bandera. &nstr!ccin S:7

Prop)sito: #ctivar la bandera de acarreo. Sinta!is: S:7 sta instrucci)n pone la bandera 1M en ;. &nstr!ccin S:6 Prop)sito: #ctivar la bandera de direcci)n. Sinta!is: S:6 (a instrucci)n S95 pone la bandera 5M en ;. &nstr!ccin S:& Prop)sito: #cticar la bandera de interrupci)n. Sinta!is: S:& (a instrucci)n activa la bandera <M, esto habilita las interrupciones e!ternas

<nterrupciones & manejo de archivos


Interrupciones: <nterrupciones internas de hardVare <nterrupciones e!ternas de hardVare <nterrupciones de softVare Interrupciones mas usuales: <nt A;? $interrupci)n del 5+S% <nt ;3? $interrupci)n del ,<+S% <nt ;H? $<nterrupci)n del ,<+S% <nt ;K? $<nterrupci)n del ,<+S%

&nterr! ciones internas de hardware

(as interrupciones internas son generadas por ciertos eventos que surgen durante la ejecuci)n de un programa. ste tipo de interrupciones son manejadas en su totalidad por el hardVare & no es posible modificarlas. 4n ejemplo claro de este tipo de interrupciones es la que actualiza el contador del reloj interno de la computadora, el hardVare hace el llamado a esta interrupci)n varias veces durante un segundo para mantener la hora actualizada. #unque no podemos manejar directamente esta interrupci)n $no podemos controlar por softVare las actualizaciones del reloj%, es posible utilizar sus efectos en la computadora para nuestro beneficio, por ejemplo para crear un "reloj virtual" actualizado continuamente gracias al contador del reloj interno. 4nicamente debemos escribir un programa que lea el valor actual del contador & lo traduzca a un formato entendible para el usuario. &nterr! ciones e4ternas de hardware (as interrupciones e!ternas las generan los dispositivos perifericos, como pueden ser: teclado, impresoras, tarjetas de comunicaciones, etc. 9ambi0n son generadas por los coprocesadores. 6o es posible desactivar a las interrupciones e!ternas. stas interrupciones no son enviadas directamente a la 41P, sino que se mandan a un circuito integrado cu&a funci)n es e!clusivamente manejar este tipo de interrupciones. l circuito, llamado P<1 GA2D#, si es controlado por la 41P utilizando para tal control una serie de vias de comunicaci)n llamadas puertos. &nterr! ciones de software (as interrupciones de softVare pueden ser activadas directamente por el ensamblador invocando al n'mero de interrupci)n deseada con la instrucci)n <69. l uso de las interrupciones nos a&uda en la creaci)n de programas, utilizandolas nuestros programas son m8s cortos, es m8s f8cil entenderlos & usualmente tienen un mejor desempeIo debido en gran parte a su menor tamaIo. ste tipo de interrupciones podemos separarlas en dos categorias: las interrupciones del sistema operativo 5+S & las interrupciones del ,<+S.

(a diferencia entre ambas es que las interrupciones del sistema operativo son m8s f8ciles de usar pero tambi0n son m8s lentas &a que estas interrupciones hacen uso del ,<+S para lograr su cometido, en cambio las interrupciones del ,<+S son mucho m8s r8pidas pero tienen la desventaja que, como son parte del hardVare son mu& espec.ficas & pueden variar dependiendo incluso de la marca del fabricante del circuito. (a elecci)n del tipo de interrupci)n a utilizar depender8 unicamente de las caracteristicas que le quiera dar a su programa: velocidad $utilizando las del ,<+S% o portabilidad $utilizando las del 5+S%. &nterr! cin ;+2 Prop)sito: (lamar a diversas funciones del 5+S. Sinta!is: &nt ;+2 6ota: 1uando trabajamos en "#S" es necesario especificar que el valor que estamos utilizando es he!adecimal. sta interrupci)n tiene varias funciones, para accesar a cada una de ellas es necesario que el el registro #? se encuentre el n'mero de funci)n que se requiera al momento de llamar a la interrupci)n. Funciones para desplegar informacin al video. 3A? !hibe salida 3D? <mpresi)n de cadena $video% @3? scritura en dispositivo:#rchivo Funciones para leer informacin del teclado. 3;? ntrada desde teclado 3#? ntrada desde teclado usando buffer JM? (ectura desde dispositivo:archivo Funciones para trabajar con archivos. n esta secci)n unicamente se e!pone la tarea espec.fica de cada funci)n, para una referencia acerca de los conceptos empleados refierase a la unidad K, titulada: "<ntroducci)n al manejo de archivos". !todo F"# 3M? #brir archivo ;@? (ectura secuencial

;2? scritura secuencial ;H? 1rear archivo A;? (ectura aleatoria AA? scritura aleatoria $andles J1? 1rear archivo J5? #brir archivo J ? 1ierra manejador de archivo JM? (ectura desde archivo:dispositivo @3? scritura en archivo:dispositivo @A? "over apuntador de lectura:escritura en archivo (!ncin 1;2 Uso, 5espliega un caracter a la pantalla. He)istros de llamada, #? U 3A? 5( U =alor del caracter a desplegar. He)istros de retorno, 6inguno sta funci)n nos despliega el caracter cu&o codigo he!agesimal corresponde al valor almacenado en el registro 5(, no se modifica ning'n registro al utilizar este comando. s recomendado el uso de la funci)n @3? de la misma interrupci)n en lugar de esta funci)n. (!ncin 1?2 Uso, 5espliega una cadena de carateres en la pantalla. He)istros de llamada, #? U 3D? 5S:5/ U 5irecci)n de inicio de una cadena de caracteres He)istros de retorno, 6inguno. sta funci)n despliega los caracteres, uno a uno, desde la direcci)n

indicada en el registro 5S:5/ hasta encontrar un caracter B, que es interpretado como el final de la cadena. Se recomienda utilizar la funci)n @3? en lugar de esta funci)n. (!ncin 912 Uso, scribir a un dispositivo o a un archivo. He)istros de llamada, #? U @3? ,/ U =.a de comunicaci)n 1/ U 1antidad de b&tes a escribir 5S:5/ U 5irecci)n del inicio de los datos a escribir He)istros de retorno, 1M U 3 si no hubo error #/ U 6'mero de b&tes escritos 1M U ; si hubo error #/ U 1)digo de error l uso de esta funci)n para desplegar informaci)n en pantalla se realiza dandole al registro ,/ el valor de ; que es el valor preasignado al video por el sistema operativo "SS5+S. (!ncin 1+2 Uso, (eer un caracter del teclado & desplegarlo. He)istros de llamada, #? U 3;? He)istros de retorno, #( U 1aracter le.do 1on esta funci)n es mu& sencillo leer un caracter del teclado, el c)digo he!adecimal del caracter le.do se guarda en el registro #(. n caso de que sea un caracter e!tendido el registro #( contendra el valor de 3 & ser8 necesario llamar de nuevo a la funci)n para obtener el c)digo de este caracter. (!ncin 1A2 Uso, (eer caracteres del teclado & almacenarlos en un buffer. He)istros de llamada, #? U 3#?

5S:5/ U 5irecci)n del 8rea de almacenamiento ,Y9 3 U 1antidad de b&tes en el 8rea ,Y9 ; U 1antidad de b&tes le.dos desde ,Y9 A hasta ,Y9 3 W A U caracteres le.dos He)istros de retorno, 6inguno (os caracteres son le.dos & almacenados en un espacio predefinido de memoria. (a estructura de este espacio le indica que en el primer b&te del mismo se indican cuantos caracteres ser8n le.dos. n el segundo b&te se almacena el n'mero de caracteres que &a se le&eron, & del tercer b&te en adelante se escriben los caracteres le.dos. 1uando se han almacenado todos los caracteres indicados menos uno la bocina suena & cualquier caracter adicional es ignorado. Para terminar la captura de la cadena es necesario darle X 69 LY. (!ncin N(2 Uso, (eer informaci)n de un dispositivo o archivo. He)istros de llamada, #? U JM? ,/ U 6'mero asignado al dispositivo 1/ U 6'mero de b&tes a procesar 5S:5/ U 5irecci)n del 8rea de almacenamiento He)istros de retorno, 1M U 3 si no ha& error & #/ U n'mero de b&tes leidos. 1M U ; si ha& error & #/ contendra el c)digo del error. (!ncin 1(2 Uso, #brir archivo M1, He)istros de llamada, #? U 3M? 5S:5/ U #puntador a un M1, He)istros de retorno, #( U 33? si no hubo problema, de lo contrario regresa 3MM? (!ncin +92 Uso, (eer secuencialmente un archivo M1,. He)istros de llamada,

#? U ;@? 5S:5/ U #puntador a un M1, &a abierto. He)istros de retorno, #( U 3 si no hubo errores, de lo contrario se regresara el c)digo correspondiente de error: ; error al final del archivo, A error en la estructura del M1, & J error de lectura parcial. sta funci)n lo que hace es que lee el siguiente bloque de informaci)n a partir de la direcci)n dada por 5S:5/, & actualiza este registro. (!ncin +O2 Uso, scribir secuencialmente a un archivo M1, He)istros de llamada, #? U ;2? 5S:5/ U #puntador a un M1, &a abierto He)istros de retorno, #( U 33? si no hubo errores, de lo contrario contendra el c)digo del error: ; disco lleno o archivo de solo lectura, A error en la formaci)n o especificaci)n del M1,. (a funci)n ;2? despu0s de escribir el registro al bloque actual actualiza el M1,. (!ncin +F2 Uso, 1rear un archivo M1,. He)istros de llamada, #? U ;H? 5S:5/ U #puntador a un M1, &a abierto. He)istros de retorno, #( U 33? si no hubo errores, de lo contrario contendra el valor 3MM? Se basa en la informaci)n proveida en un M1, para crear un archivo en el disco. (!ncin ;+2 Uso, (eer en forma aleatoria un archivo M1,. He)istros de llamada, #? U A;? 5S:5/ U #puntador a un M1, &a abierto.

He)istros de retorno, # U 33? si no hubo error, de lo contrario #? contendra el c)digo del error: ; si es fin de archivo, A si e!iste error de especificaci)n de M1, & J si se le&) un registro parcial o el apuntador del archivo se encuentra al final del mismo. sta funci)n lee el registro especificado por los campos del bloque actual & registro actual de un M1, abierto & coloca la informaci)n en el 59# $8rea de transferencia de disco o 5isk 9ransfer #rea%. (!ncin ;;2 Uso, scribir en forma aleatoria en un archivo M1,. He)istros de llamada, #? U AA? 5S:5/ U #puntador a un M1, abierto. He)istros de retorno, #( U 33? si no hubo error, de lo contrario contendr8 el c)digo del error: ; si el disco est8 lleno o es archivo de solo lectura & A si ha& error en la especificaci)n de M1,. scribe el registro especificado por los campos del bloque actual & registro actual de un M1, abierto. scribe dicha informaci)n a partir del contenido del 59# $8rea de transferencia de disco%. (!ncin N72 Uso, 1rear un archivo si no e!iste o dejarlo en longitud 3 si e!iste. $?andle% He)istros de llamada, #? U J1? 1? U #tributo de archivo 5S:5/ U #puntador a una especificai)n #S1<<Q He)istros de retorno, 1M U 3 & #/ el n'mero asignado al handle si no ha& error, en caso de haberlo 1M ser8 ; & #/ contendra el c)digo de error: J ruta no encontrada, @ no ha& handles disponibles para asignar & 2 acceso negado. sta funci)n sustitu&e a la ;H?. l nombre del archivo es especificado en una cadena #S1<<Q, la cual tiene como caracter.stica la de ser una cadena de b&tes convencional terminada con un caracter 3. l archivo creado contendra los atributos definidos en el registro 1/ en la

siguiente forma: =alor #tributos 33? 6ormal 3A? scondido 3@? Sistema 3H? scondido & de sistema l archivo se crea con los permisos de lectura & escritura. 6o es posible crear directorios utilizando esta funci)n. (!ncin N62 Uso, #bre un archivo & regrese un handle He)istros de llamada, #? U J5? #( U modo de acceso 5S:5/ U #puntador a una especificaci)n #S1<<Q He)istros de retorno, 1M U 3 & #/ U n'mero de handle si no ha& errores, de lo contrario 1M U ; & #/ U c)digo de error: 3;? si no es v8lida la funci)n, 3A? si no se encontr) el archivo, 3J? si no se encontrZo la ruta, 3@? si no ha& handles disponibles, 32? en caso de acceso negado, & 31? si el c)digo de acceso no es v8lido. l handle regresado es de ;H bits. l c)digo de acceso se especifica en la siguiente forma: ,<9S KH2@JA; . . . . 3 3 3 Solo lectura . . . . 3 3 ; Solo escritura . . . . 3 ; 3 (ectura: scritura . . . / . . . L S L=#5+ (!ncin NE2 Uso, 1errar archivo $?andle%. He)istros de llamada, #? U J ?

,/ U ?andle asignado He)istros de retorno, 1M U 3 si no hubo errores, en caso contrario 1M ser8 ; & #/ contendr8 el c)digo de error: 3H? si el handle es inv8lido. sta funci)n actualiza el archivo & libera o deja disponible el handle que estaba utilizando. (!ncin N(2 Uso, (eer de un archivo abierto una cantdad definida de b&tes & los almacena en un buffer espec.fico. He)istros de llamada, #? U JM? ,/ U ?andle asignado 1/ U 1antidad de b&tes a leer 5S:5/ U #puntador a un 8rea de trabajo. He)istros de retorno, 1M U 3 & #/ U n'mero de b&tes leidos si no hubo error, en caso contrario 1M U ; & #/ U c)digo de error: 32? si acceso negado & 3H? si no es v8lido el handle. (!ncin 912 Uso, scribe a un archivo &a abierto una cierta cantidad de b&tes a partir del buffer designado. He)istros de llamada, #? U @3? ,/ U ?andle asignado 1/ U 1antidad de b&tes a escribir. 5S:5/ U #puntador al buffer de datos. He)istros de retorno, 1M U 3 & #/ U n'mero de b&tes escritos si no ha& errores, en caso de e!istir 1M U ; & #/ U c)digo del error: 32? si el acceso es negado & 3H? si el handle es inv8lido. (!ncin 9;2 Uso, "over apuntador al archivo $?andle% He)istros de llamada, #? U @A? #( U m0todo utilizado

,/ U ?andle asignado 1/ U (a parte m8s significativa del offset 5/ U (a parte menos significativa del offset He)istros de retorno, 1M U 3 & 5/:#/ U la nueva posici)n del apuntador. n caso de error 1M ser8 ; & #/ U c)digo de error: 3;? si la funci)n no es v8lida & 3H? si el handle no es v8lido. l m0todo utilizado se configura como sigue: =alor de #( "0todo 33? # partir del principio del archivo 3;? # partir de la posici)n actual 3A? # partir del final del archivo &nterr! cin +12 Prop)sito: (lamar a diversas funciones de video del ,<+S. Sinta!is: &nt +12 sta interrupci)n tiene diversas funciones, todas ellas nos sirven para controlar la entrada & salida de video, la forma de acceso a cada una de las opciones es por medio del registro #?. n este tutorial unicamente veremos algunas de las funciones de esta interrupci)n. Munciones comunes de la interrupci)n ;3?. 3A? Selecci)n de posici)n del cursor 3D? scribe atributo & caracter en el cursor 3#? scribe caracter en la posici)n del cursor 3 ? scritura de caracteres en modo alfanum0rico (!ncin 1;2 Uso, Posiciona el cursor en la pantalla dentro de las coordenadas v8lidas de te!to. He)istros de llamada, #? U 3A? ,? U P8gina de video en la que se posicionar8 el cursor.

5? U Mila 5( U 1olumna He)istros de retorno, 6inguno. (as posiciones de localizaci)n del cursor son definidas por coordenadas iniciando en 3,3, que corresponde a la esquina superior izquierda hasta KD,A@ correspondientes a la esquina inferior derecha. 9enemos entonces que los valores que pueden tomar los registros 5? & 5( en modo de te!to de G3 ! A2 son de 3 hasta A@ & de 3 hasta KD respectivamente. (!ncin 1?2 Uso, 5esplegar un caracter un determinado n'mero de veces con un atributo definido empezando en la posici)n actual del cursor. He)istros de llamada, #? U 3D? #( U 1aracter a desplegar ,? U P8gina de video en donde se desplegar8 ,( U #tributo a usar 6'mero de repeticiones. He)istros de retorno, 6inguno sta funci)n despliega un caracter el n'mero de veces especificado en 1/ pero sin cambiar la posici)n del cursor en la pantalla. (!ncin 1A2 Uso, 5esplegar un caracter en la posici)n actual del cursor. He)istros de llamada, #? U 3#? #( U 1aracter a desplegar ,? U P8gina en donde desplegar ,( U 1olor a usar $s)lo en gr8ficos%. 1/ U 6'mero de repeticiones He)istros de retorno, 6inguno. (a 'nica diferencia entre esta funci)n & la anterior es que 0sta no permite modificar los atributos, simplemente usa los atributos actuales.

9ampoco se altera la posici)n del cursor con esta funci)n. (!ncin 1E2 Uso, 5eplegar un caracter en la pantalla actualizando la posici)n del cursor. He)istros de llamada, #? U 3 ? #( U 1aracter a desplegar ,? U P8gina donde se desplegara el caracter ,( U 1olor a usar $solo en gr8ficos% He)istros de retorno, 6inguno &nterr! cin +F2 Prop)sito: "anejar la entrada:salida del teclado. Sinta!is: &nt +F2 =eremos dos opciones de la interrupci)n ;H?, estas opciones, al igual que las de otras interrupciones, son llamadas utilizando el registro #?. Munciones de la interrupci)n ;H? 33? (ee un caracter de teclado 3;? (ee estado del teclado (!ncin 112 Uso, (eer un caracter del teclado. He)istros de llamada, #? U 33? He)istros de retorno, #? U c)digo de barrido $scan code% del teclado #( U =alor #S1<< del caracter. 1uando se utiliza esta interrupci)n se detiene la ejecuci)n del programa hasta que se introduzca un caracter desde el teclado, si la tecla presionada es un caracter #S1<< su valor ser8 guardado en el registro #?, de lo contrario el c)digo de barrido ser8 guardado en #( & #? contendr8 el

valor 33?. l c)digo de barrido fu0 creado para manejar las teclas que no tienen una representaci)n #S1<< como X#(9Y, X1+69L+(Y, las teclas de funci)n, etc. (!ncin 1+2 Uso, (eer estado del teclado. He)istros de llamada, #? U 3;? He)istros de retorno, Si la bandera de cero, QM, est8 apagada significa que ha& informaci)n en el buffer, si se encuentra prendida es que no ha& teclas pendientes. n caso de e!istir informaci)n el registro #? contendr8 el c)digo de la tecla guardada en el buffer. &nterr! cin +P2 Prop)sito: "anejar la entrada:salida de la impresora. Sinta!is: &nt +P2 sta interrupci)n es utilizada para escribir caracteres a la impresora, inicializarla & leer su estado. Munciones de la interrupci)n ;H? 33? <mprime un caracter #S1<< 3;? <nicializa la impresora 3A? Proporciona el estado de la impresora (!ncin 112 Uso, scribir un caracter a la impresora. He)istros de llamada, #? U 33? #( U 1aracter a imprimir 5/ U Puerto a utilizar He)istros de retorno, #? U stado de la impresora.

l puerto a utilizar, definido en 5/, se especifica as.: (P9; U 3, (P9A U ;, (P9J U A ... l estado de la impresora se codifica bit por bit como sigue: ,<9 ;:3 S<T6<M<1#5+ SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS 3 ; Se agot) el tiempo de espera ;S AS J ; rror de entrada:salida @ ; <mpresora seleccionada 2 ; Papel agotado H ; Leconocimiento de comunicaci)n K ; (a impresora se encuentra libre (os bits ; & A no son relevantes. (a ma&oria de los ,<+S unicamente soportan J puertos paralelos aunque e!isten algunos que soportan @. (!ncin 1+2 Uso, <nicializar un puerto de impresi)n. He)istros de llamada, #? U 3;? 5/ U Puerto a utilizar He)istros de retorno, #? U Status de la impresora l puerto a utilizar, definido en 5/, se especifica as.: (P9; U 3, (P9A U ;, etc. l estado de la impresora se codifica bit por bit como sigue: ,<9 ;:3 S<T6<M<1#5+ SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS 3 ; Se agot) el tiempo de espera ;S AS J ; rror de entrada:salida @ ; <mpresora seleccionada

2 ; Papel agotado H ; Leconocimiento de comunicaci)n K ; (a impresora se encuentra libre (os bits ; & A no son relevantes. (a ma&oria de los ,<+S unicamente soportan J puertos paralelos aunque e!isten algunos que soportan @. (!ncin 1;2 Uso, +btener el estado de la impresora. He)istros de llamada, #? U 3;? 5/ U Puerto a utilizar He)istros de retorno, #? U Status de la impresora. l puerto a utilizar, definido en 5/, se especifica as.: (P9; U 3, (P9A U ;, etc. l estado de la impresora se codifica bit por bit como sigue: ,<9 ;:3 S<T6<M<1#5+ SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS 3 ; Se agot) el tiempo de espera ;S AS J ; rror de entrada:salida @ ; <mpresora seleccionada 2 ; Papel agotado H ; Leconocimiento de comunicaci)n K ; (a impresora se encuentra libre (os bits ; & A no son relevantes. (a ma&oria de los ,<+S unicamente soportan J puertos paralelos aunque e!isten algunos que soportan @. enmascarables $las que funcionan unicamente cuando <M U

También podría gustarte