Está en la página 1de 133

UNIVERSIDAD GRUPO CEDIP

DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

DEDICATORIA
Una meta ha sido cumplida, mil palabras no bastaran para agradecer, su apoyo, su comprensin y sus consejos en los momentos difciles Gracias por haberme fomentado en mi, El deseo de superacin en la vida, por compartir mis penas y mis alegras, siempre con palabras de aliento para continuar luchando. Y mirarme aqu convertida en un profesionista para conquistar nuevas metas y lograr la reali acin personal. ! ustedes les debo este logro y con ustedes feli mente lo comparto, por darme las herramientas necesarias, que "ios los bendiga y los guarde para siempre, por eso y mucho mas quiero dar Gracias a "ios por permitirme vivir este momento y a ustedes mi reconocimiento una ve mas. #on admiracin y respeto $aria Guadalupe %orres !ndr&s ING. SISTEMAS COMPUTACIONALES ELECTRNICA Y ELECTROMECANICA

MARIA GUADALUPE TORRES ANDRES

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

PREFACIO

El tutora se enfoca completamente hacia las computadoras que operan con procesadores de la familia '() 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 f,cil acceso a cada uno de los tpicos 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 contin-a con el tutorial propiamente dicho.

MARIA GUADALUPE TORRES ANDRES

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

CONTENIDO
I DESCRIPCION BASICA DE UN SISTEMA DE CMPUTO.................6 *.* .rocesador #entral...............................................................................) *.** $emoria #entral...................................................................................) *.*** Unidades de Entrada y +alida............................................................../ *.*0 Unidades de $emoria !u'iliar............................................................./ CAPITULO 1 SISTEMAS NUMERICOS...........................................................................8 1.1 Unidades de informacin.....................................................................( 1.2 +istemas num&ricos.............................................................................( 1.3 #onvertir n-meros binarios a decimales..............................................4 1.5 #onvertir n-meros decimales a binarios..............................................4 1.6 +istema numeracin octal..................................................................17 1.6.1 #onversin de octal a decimal.........................................................11 1.6.2 #onversin de decimal a octal.........................................................11 1.6.3 #onversin de octal a binario...........................................................12 1.6.5 #onversin de binario a octal...........................................................12 1.) +istema numeracin he'adecimal.......................................................13 1.).1 #onversin de he'adecimal a decimal.............................................15 1.).2 #onversin de decimal a he'adecimal.............................................15 1.).3 #onversin de he'adecimal a binario...............................................16 1.).5 #onversin de binario a he'adecimal...............................................16 CAPITULO II METODOS DE REPRESENTACIN DE DATOS DE UNA COMPUTADORA..............................................................................16 2.1 #digo !+#**.....................................................................................1) 2.2 $&todo 8#"......................................................................................1) 2.3 9epresentacin de punto flotante.....................................................1( CAPITULO III INTRODUCCION AL LENGUAJE ENSAMBLADOR................................19 3.1 *mportancia del :enguaje Ensamblador..............................................14 3.2 0entajas y desventajas del :enguaje Ensamblador............................14 3.3 9elacin del lenguaje ensamblador con los #omponentes internos del procesador.................................................21 3.5 $anejo de la memoria; "ireccionamiento <interno y e'terno=..............23

MARIA GUADALUPE TORRES ANDRES

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

CAPITULO IV INTRODUCCION AL MICROPROCESADOR.........................................25 5.1 :a evolucin del microprocesador......................................................26 5.2 !rquitectura 8,sica del microprocesador...........................................2( 5.3 :a memoria y el microprocesador.....................................................33 5.5 El modelo de programacin................................................................3/ 5.6 "ireccionamiento de la memoria en modo real..................................52 5.) "ireccionamiento de la memoria en modo protegido........................5( 5./ >ormatos de datos..............................................................................67 5.( El conjunto de instrucciones...............................................................63 CAPITULO V PROGRAMACION AL LENGUAJE ENSAMBLADOR............................58 6.1 .roceso de creacin de un programa................................................6( 6.2 9egistros de la U#............................................................................6( 6.3 :a estructura del ensamblador...........................................................)7 6.5 ?uestro primer programa....................................................................)1 6.6 Guardar y cargar programas...............................................................)3 6.) #ondiciones, ciclos y bifurcaciones.....................................................)6 6./ *nterrupciones......................................................................................)( CAPITULO VI INSTRUCCIONES DE TRANSFERENCIA DE DATOS.............................74 ).1 *ntroduccin.........................................................................................../5 ).2 *nstruccin $@0..................................................................................../5 ).3 .U+AB.@............................................................................................./4 ).5 #argar la direccin efectiva...................................................................(2 ).6 %ransferencia de cadenas de datos......................................................(3 ).) @tras instrucciones de transferencia de datos......................................(4 )./ .refijo para cambio de segmentos........................................................41 CAPITULO VII INSTRUCCIONES ARITM TICAS Y LOGICAS........................................9! /.1 *ntroduccin...........................................................................................43 /.2 +uma, 9esta y #omparacin.................................................................43 /.3 $ultiplicacin..........................................................................................44 /.5 "ivisinCCCCCCCCCCCCCCCCCCCCCCCCCCC171 /.6 *nstrucciones lgicas b,sicas...............................................................175 /.) #orrimientos y rotaciones.....................................................................176 /./ #omparaciones en cadenas.................................................................17( AP NDICE A." MACROS.........................................................................111 APENDICE B." DIRECTIVAS DEL MASM................................................116 AP NDICE C." JUEGO DE INSTRUCCIONES DEL 8#86$8#87$8#186$8#286 Y 8#287...............................................................114 GLOSARIO............................................................................................................

MARIA GUADALUPE TORRES ANDRES

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

DESCRIPCION BASICA DE UN SISTEMA DE CMPUTO

Esta seccin tiene como finalidad dar una breve reseDa de las partes principales de un sistema de cmputo a un nivel b,sico, que permita al usuario un mayor entendimiento de los conceptos que se trataran a lo largo del tutorial. :e 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. I.I P%&'()*+&% C(,-%*.. Esta parte es conocida tambi&n como unidad central de procesamiento o U#.. >ormada a su ve 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 instrucciones de un programa. El procesador cuenta con una serie de celdas de memoria que se utili an con mucha frecuencia y lo cual forman parte de la U#.. Estas celdas son conocidas con el nombre de registros. Un procesador puede tener una docena o dos de estos registros. :a unidad aritm&tica y lgica de la U#. reali a las operaciones relacionadas con los c,lculos num&ricos y simblicos. %picamente estas unidades slo tienen capacidad de efectuar operaciones muy elementales como; suma y resta de dos n-meros de punto fijo, multiplicacin y divisin de punto fijo, manipulacin de bits de los registros y comparacin del contenido de dos registros. :as computadoras personales pueden clasificarse por lo que se conoce como tamaDo de palabra, esto es, la cantidad de bits que el procesador puede manejar a la ve . I.II M(/&%0* C(,-%*.. 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 direccionables, esto es, que se pueden distinguir una de otra por medio de un n-mero -nico o direccin para cada celda. El nombre gen&rico de estas memorias es 9andom !ccess $emory <$emoria de acceso aleatorio= o 9!$ por sus siglas en ingl&s. :a principal desventaja de este tipo de memoria es que los circuitos integrados pierden la

MARIA GUADALUPE TORRES ANDRES

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

informacin que tienen almacenada cuando se interrumpe la alimentacin el&ctrica. Esto lleva a la creacin de memorias cuya informacin no se pierda cuando se apaga el sistema. Estas memorias reciben el nombre de 9ead @nly $emory <$emoria de solo lectura= o 9@$. I.III U,0+*+() +( E,-%*+* 1 S*.0+*. .ara que una computadora nos sea -til es necesario que el procesador se comunique al e'terior por medio de interfaces que permiten la entrada y la salida de datos del procesador y la memoria. Aaciendo uso de estas comunicaciones es posible introducir datos para su procesamiento y la posterior visuali acin de los datos ya procesados. !lgunas de las unidades de entrada m,s comunes son teclados, lectoras de tarjetas, mouse, etc. :as unidades de salida m,s comunes son las terminales de video y las impresoras. I.IV U,0+*+() +( M(/&%0* A230.0*%. #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 pr,cticos y econmicos. !dem,s, la memoria central pierde su contenido al apagarse la m,quina, por lo que no es conveniente utili arla para almacenamiento permanente de datos. Estos y otros inconvenientes dan lugar a la creacin de unidades perif&ricas de memoria que reciben el nombre de memoria au'iliar o secundaria. "e estas unidades perif&ricas las m,s comunes son las cintas y los discos magn&ticos. :a informacin almacenada en estos medios magn&ticos recibe el nombre de archivo. Un archivo est, formado por un n-mero variable de registros, generalmente de tamaDo fijoE los registros pueden contener datos o programas.

MARIA GUADALUPE TORRES ANDRES

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

CAPITULO 1 SISTEMAS NUMERICOS

1.1 U,0+*+() +( 0,4&%/*'05, .ara que la .# pueda procesar la informacin es necesario que est, se encuentre en celdas especiales llamadas registros. :os registros son conjuntos de ( o 1) flipFflops <basculadores o biestables=. Un flipFflop es un dispositivo capa de almacenar dos niveles de voltaje, uno bajo, regularmente de 7.6 volts y otro alto com-nmente de 6 volts. El nivel bajo de energa en el flipFflop se interpreta como apagado o 7, y el nivel alto como prendido o 1. ! estos estados se les conoce usualmente como bits, que son la unidad m,s pequeDa de informacin en una computadora. ! un grupo de 1) bits se le conoce como palabra, una palabra puede ser dividida en grupos de ( bits llamados bytes, y a los grupos de 5 bits les llamamos nibbles. 1.2 S0)-(/*) ,2/6%0'&) El sistema num&rico que utili amos a diario es el sistema decimal, pero este sistema no es conveniente para las m,quinas debido a que la informacin se maneja codificada en forma de bits prendidos o apagadosE esta forma de codificacin nos lleva a la necesidad de conocer el c,lculo posicional que nos permita e'presar un n-mero en cualquier base que lo necesitemos. Es posible representar un n-mero determinado en cualquier base mediante la siguiente formula; "onde , es la posicin del dgito empe ando de derecha a i quierda y numerando a partir de cero. D es el dgito sobre el cual operamos y B es la base num&rica empleada. El sistema de numeracin binario es el m,s importante en los sistemas digitales, pero hay otros que tambi&n lo son. :a importancia del sistema decimal radica en que se utili a universalmente para representar cantidades fuera de un sistema digital. Ello significa que habr, situaciones en las cuales los valores decimales tengan que convertirse en valores binarios antes de que se introdu can en el sistema digital. .or ejemplo cuando se presiona un n-mero decimal en una calculadora port,til <o una computadora=, los circuitos que est,n dentro del dispositivo convierten el n-mero decimal en un valor binario.

MARIA GUADALUPE TORRES ANDRES

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

"e igual manera, habr, situaciones en que los valores binarios de las salidas de un circuito digital tengan tengan que convertirse a valores decimales para presentarse en el mundo e'terior. .or ejemplo una calculadora <o computadora= utili a n-meros binarios para calcular respuestas a un problema, luego los convierte a un valor decimal, antes de mostrarlos en la pantalla. ! dem,s el binario y el decimal, otros dos sistemas de numeracin encuentran amplias aplicaciones en los sistemas digitales. :os sistemas octal <base (= y he'adecimal <base 1)= se usan con la misma finalidad; ofrecer un efica medio de representacin de n-meros binarios grandes. !lgo muy importante la relacin entre el cdigo binario y el lenguaje ensamblador; En el cdigo binario se utili an ceros y unos, mientras que el lenguaje ensamblador es una coleccin de smbolos mnemnicos que representan; operaciones, nombres simblicos, operadores y smbolos especiales. :a relacin entre estos dos lenguajes sera que el binario es el lenguaje que la m,quina entiende y el ensamblador se acerca mas lenguaje de esta. 1.! C&,7(%-0% ,8/(%&) 90,*%0&) * +('0/*.() %rabajando en el lenguaje ensamblador nos encontramos con la necesidad de convertir n-meros del sistema binario, que es el empleado por las computadoras, al sistema decimal utili ado por las personas. El sistema binario est, basado en -nicamente dos condiciones o estados, ya sea encendido <1= o apagado <7=, por lo tanto su base es dos. .ara la conversin podemos utili ar la formula de valor posicional; .or ejemplo, si tenemos el n-mero binario 17711, tomamos de derecha a i quierda, cada dgito y lo multiplicamos por la base <2= y elevando a la posicin que ocupan reali ando as la sumatoria del mismo obteniendo el n-mero decimal; ?-mero binario; 1 1 7 7 1 de derecha a i quierda G 1 7 7 1 1

#onversin; 1H2I7 J 1H2I1 J 7H2I2 J 7H2I3 J 1H2I5 +umatoria; 1 J 2 J 7 J 7 J 1) G 14 ?-mero decimal G 14 El car,cter I es utili ado en computacin como smbolo de potenciacin y el car,cter H se usa para representar la multiplicacin. 1.4 C&,7(%-0% ,8/(%&) +('0/*.() * 90,*%0&) E'isten dos maneras de convertir un n-mero decimal entero a su representacin equivalente en el sistema binario. El primer m&todo es inverso al proceso descrito en la seccin 1.3E El n-mero decimal se e'presa simplemente como una suma de potencias de 2 y luego los unos y los ceros se

MARIA GUADALUPE TORRES ANDRES

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

escriben en las posiciones adecuadas de los bits, para ilustrar lo anterior, considerando en siguiente ejemplo; 56 decimal G 32 J( J5 J1 G 2I6 J 7 J 2I3 J 2I2 J7 J2I7 G 1 7 1 1 7 1 binario "ivisin repetida; otro m&todo emplea la divisin por 2. :a conversin, que se ilustra a continuacin para 53 decimal, requiere dividir repetidamente el numero decimal entero entre 2 y que se escriban los residuos despu&s de cada divisin hasta que se obtenga un cociente de 7. ?tese que el resultado binario se obtiene al escribir el primer residuo como el :+8 y el $+8. El m&todo que se e'plicar, utili a la divisin sucesiva entre dos, guardando el residuo como dgito binario y el resultado como la siguiente cantidad a dividir. %omemos como ejemplo el n-mero 53 decimal. 43/2 = 21 y ! "# $%!& # 1 21/2 = 1' y ! "# $%!& # 1 1'/2 = 5 y ! "# $%!& # ' 5/2 = 2 y ! "# $%!& # 1 2/2 = 1 y ! "# $%!& # ' 1/2 = ' y ! "# $%!& # 1 MSB 1 0 1 0 1 1 LSB

!rmando el n-mero de abajo hacia arriba tenemos que el resultado en binario es 171711 1.5 S0)-(/* ,2/(%*'05, &'-*.

El sistema de numeracin octal es muy importante en el trabajo que se reali a en una computadora digital. Este tiene una base de ocho, lo cual significa que tiene ocho posibles dgitos; 7, 1, 2, 3, 5, 6, ) y /. !s, cada digito de un numero octal puede tener cualquier valor del 7 al /. las posiciones de los dgitos en un sistema octal tienen los siguientes valores;

8(4

8(3

8(2

8(1 8('

8()1

8()2

8()3

8()4

8()5

MARIA GUADALUPE TORRES ANDRES

1'

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

.unto octal 1.5.1 C&,7(%)05, +( &'-*. * +('0/*.. .or lo tanto, un n-mero octal puede convertirse f,cilmente a su equivalente decimal multiplicando cada digito por su valor posicional por ejemplo; 372 &*+,- = 3. /8(20 1 7. /8(10 1 2. /8('0 = /3 . 64 0 1 /7 . 80 1 /2 . 10 = 25' %#*$2,#onsideremos otro ejemplo; 24.6 &*+,- = 2. /8(10 1 4. /8('0 1 6./8()10 = 16 1 4 1 ' .75 = 2'.75 %#*$2,-.

1.5.2 C&,7(%)05, +( +('0/*. * &'-*. Un entero decimal se puede convertir a octal con el mismo m&todo de divisin repetida que se uso en la conversin de decimal a binario, pero con un factor de divisin de ( en lugar de 2. ! continuacin se muestra un ejemplo de esto. ?-mero octal G 2))

266/ 8 =33 y ! "# $%!& = 2 33/8 = 4 y ! "# $%!& = 1 4/8 = ' y ! "# $%!& = 4 266 %#*$2,- = 4 1 2 &*+,-

?otase que el primer residuo se transforma en el digito menos significativo <:+"= del n-mero octal y el -ltimo n-mero se convierte en el digito m,s significativo <$+"=. +i se emplea una calculadora para reali ar las divisiones del proceso anterior, el resultado incluir, una fraccin decimal en lugar de un residuo. +in embargo el residuo puede obtenerse multiplicando la fraccin decimal por (. .or ejemplo 2))B( produce 33.26. el residuo se convierte en 7.26 H ( G 2. En forma similar dar, como resultado 5.126 y el residuo se transforma en 7.126 H ( G 1.

MARIA GUADALUPE TORRES ANDRES

11

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

1.5.! C&,7(%)05, +( &'-*. * 90,*%0& :a ventaja principal del sistema de numeracin octal es la facilidad con que se puede reali ar la conversin entre n-meros binarios y octales. :a conversin de octal a binario se lleva a cabo convirtiendo cada dgito octal en su equivalente binario de 3 bits. :os ocho dgitos posibles se convierten como se indica en la tabla 1F1. .or medio de estas conversiones, cualquier n-mero octal se convierte a binario, convirti&ndolo de manera individual. .or ejemplo, podemos convertir 5/2 octales a binario de la siguiente manera; 4 7 2

1''

111

'1'

.or lo tanto, el n-mero octal 5/2 es equivalente a binario 177111717. .ara dar otro ejemplo, consideremos convertir el numero 6531 octal a binario; 5 4 3 1

1'1

1''

'11

''1

.or lo tanto, 6531 octal G 171177711771 binario. %abla 1F1 Dgito Octal Equivale te !i a"io ' ' 1 1 2 1' 3 4 5 6 7

11 1'' 1'1 11' 111

1.5.4 C&,7(%)05, +( 90,*%0& * &'-*. :a conversin de enteros binarios a octales es simplemente la operacin inversa del proceso anterior. :os bits del n-mero binario se agrupan en conjuntos de tres comen ando por el :+8. :uego, cada grupo se convierte a su equivalente octal <tabla 1F1=. .ara ilustrarlo, consideremos la conversin de 177111717 binario a octal. 1'' 111 '1'

MARIA GUADALUPE TORRES ANDRES

12

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

2 &*+,-

!lgunas veces el n-mero binario no tendr, grupos pares de 3 bits. En esos casos, podemos agregar uno o dos ceros a la i quierda del $+8 del numero binario a fin de completar el ultimo grupo. Esto se ilustra a continuacin para el numero binario 11717117. +e le agrega cero<s= al -ltimo grupo. 011 '1' 11'

6 &*+,-.

1.6 S0)-(/* +( ,2/(%*'05, :(3*+('0/*. El sistema he'adecimal emplea la base 1). !s, tiene posibles smbolos digitales. Utili a los dgitos del 7 al 4 mas las letras !, 8, #, ", E y > como sus 1) smbolos digitales. :a tabla 1F2 muestra las relaciones entre los sistemas he'adecimal, decimal y binario. ?tese que cada digito Ae'adecimal representa un grupo de cuatro dgitos binarios. Es importante recordar que los dgitos he' <abreviatura de he'adecimal= de ! a > son equivalentes a los valores decimales 17 a 16. %abla 1F2. #e$a%eci&al Deci&al ' 1 2 3 4 5 6 7 8 9 A B C D E 3 ' 1 2 3 4 5 6 7 8 9 1' 11 12 13 14 15 'i a"io ' 1 1' 11 1'' 1'1 11' 111 1''' 1''1 1'1' 1'11 11'' 11'1 111' 1111

MARIA GUADALUPE TORRES ANDRES

13

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

1.6.1 C&,7(%)05, +( :(3*+('0/*. * +('0/*.. Un n-mero he' se puede convertir a su equivalente decimal utili ando el hecho de que cada posicin de los dgitos he' tiene un valor que es potencia de 1). El :+" tiene un valor de 1)I7 G 1E el siguiente digito en secuencia tiene un valor de 1)I1 G 1)E el siguiente tiene un valor de 1)I2 G 26) y as sucesivamente. El, proceso de conversin se demuestra en los ejemplos que siguen4 356 5#6 = 3 . 16(2 15 . 16(1 1 6 . 16(' = 768 18' 16 = 854 %#*$2,-# . 2A3 5#6 = 2. 16(2 1 1' . 16(1 115 . 16(' = 512 1 16' 1 15 = 687 %#*$2,-# . ?tese que el segundo ejemplo el valor 17 se sustituyo por ! y el valor por > en la conversin al sistema decimal. 1.6.2 C&,7(%)05, +( +('0/*. * :(3*+('0/*.. 9ecuerde que efectuamos la conversin de decimal a binario por medio de la divisin repetida entre 2 y decimal a octal por medio de la divisin repetida entre (. "e igual manera, la conversin de decimal a he'adecimal se puede efectuar por medio de la divisin repetida entre 1). .or ejemplo; #onversin de 523 decimales a he'. 423/16 = 26 y #- "# $%!& = 7 26/16 = 1 y #- "# $%!& = 1' 4/ 16 = ' y #- "# $%!& = 1 423 %#*$2,- = 1 A 3 5#6.

#onversin de 215 decimales a he'. 214/16 = 13 y ! "# $%!& = 6 13/16 = ' y ! "# $%!& = 13 214 %#*$2,- = D 6 5#6.

MARIA GUADALUPE TORRES ANDRES

14

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

1.6.! C&,7(%)05, +( :(3*+('0/*. * 90,*%0& !l igual que el sistema de numeracin octal, el sistema he' se usa principalmente como m&todo Ktaquigr,ficoL en la representacin de n-meros binarios. Es una tarea relativamente simple de convertir un n-mero he'adecimal en binario. #ada digito he'adecimal se convierte en su equivalente binario de 5 bits <%abla 1F2=. Esto se ilustra a continuacin para el numero 4>2 he'. 932 5#6. = 9 1''1 3 1111 2 ''1'

= 1''1111''1' 7$8,"$&. 1.6.4 C&,7(%)05, +( 90,*%0& * :(3*+('0/*. :a conversin entre numeracin binaria y he'adecimal es sencilla. :o primero que se hace para una conversin de un n-mero binario a he'adecimal es dividirlo en grupos de 5 bits, empe ando de derecha a i quierda. En caso de que el -ltimo grupo <el que quede m,s a la i quierda= sea menor de 5 bits se rellenan los faltantes con ceros. %omando como ejemplo el n-mero binario 171711 lo dividimos en grupos de 5 bits y nos queda; ?umero binario; 1'1'11 "ividir en gpos de 5 bits de derecha a i quierda grupo 1' 1'11 9"$2#" :"!9& !-+$2& :"!9&

9ellenando con ceros el -ltimo grupo <el de la i quierda=; 001'; 1'11 "espu&s tomamos cada grupo como un n-mero independiente y consideramos su valor en decimal; ''1' = 2; 1'11 = 11 .ero como no podemos representar este n-mero he'adecimal como 211 porque sera un error, tenemos que sustituir todos los valores mayores a 4 por su respectiva representacin en he'adecimal, anali ando la tabla anterior el n-mero 11 lo sustituimos por la letra 8 en su representacin he'adecimal con lo que obtenemos; 28A <"onde la A representa la base he'adecimal=

MARIA GUADALUPE TORRES ANDRES

15

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

CAPITULO II METODOS DE REPRESENTACIN DE DATOS DE UNA COMPUTADORA


punto flotante

2.1 C5+0;& ASCII


!+#** generalmente se pronuncia MasNiM, es un acrnimo de !merican +tandard #ode for *nformation *nterchange. Este cdigo asigna a las letras del alfabeto, a los dgitos decimales del 7 al 4 y a varios smbolos adicionales un n-mero binario de / bits <poni&ndose el bit ( en su estado de apagado o 7=. "e esta forma cada letra, dgito o car,cter especial ocupa un byte en la memoria de la computadora. .odemos 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 n-meros de 7 a 266, en cambio con el cdigo !+#** un byte puede representar -nicamente un dgito. "ebido a esta ineficiencia, el cdigo !+#** es principalmente utili ado en la memoria para representar te'to.

2.2

M6-&+& +( BCD

#uando se representan n-meros, letras o palabras por medio de un grupo especial de smbolos, se dice que se encuentran codificados, y al grupo de smbolos se le llama cdigo. .robablemente uno de los m,s conocidos es el $orse, en el cual las series de puntos y rayas representan letras de alfabeto. Aemos visto que en cualquier n-mero decimal se puede representar por medio de un n-mero binario equivalente. El grupo de ceros y unos contenidos en el n-mero binario se puede considerar como un cdigo que representa el n-mero decimal. #uando un n-mero decimal se representa con su n-mero binario equivalente, recibe el nombre de codificacin binaria directa. %odos los sistemas digitales emplean alguna forma de n-meros binarios para su operacin interna, aunque el mundo e'tremo es naturale a decimal.

Ello significa que las conversiones entre los sistemas decimal y binario llevan acabo con frecuencia. Aemos visto que estas conversiones pueden ser largas y complicadas si se trabaja con n-meros grandes. .or esta ra n, se emplea,

MARIA GUADALUPE TORRES ANDRES

16

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

en ciertas situaciones, un medio de codificacin de n-meros decimales que combina caractersticas de los sistemas decimal y binario.

C5+0;& +('0/*. '&+040'*+& (, 90,*%0& +i cada digito de un n-mero decimal se representa con su equivalente binario, el resultado es un cdigo llamado decimal codificado en binario <en lo sucesivo se abreviara 8#" es un acrnimo de 8inary #oded "ecimal=, ya que el mayor digito decimal es el 4, se necesitan 5 bits para codificar cada digito <el cdigo binario correspondiente de 4 es 1771=. .ara ilustrar el cdigo 8#" tomemos un n-mero decimal como (/5. #ada digito se cambia por su equivalente binario de la siguiente manera;

/%#*$2,-0

1'''

'111

'1''

/BCD0

.ara poner otro ejemplo, cambiemos 453 por su representacin en el cdigo binario

/%#*$2,-0

1''1

'1''

''11

/BCD0

Una ve m,s, cada digito decimal se cambia por su equivalente binario directo. ?tese que siempre se usan 5 bits por cada digito. El cdigo 8#", por lo tanto, representa cada digito del n-mero decimal por medio de un n-mero binario de 5 bits. "e hecho, solo se utili a n-meros binarios de 5 bits del 7777 al 1771. El cdigo 8#" no se usa los n-meros 1717, 1711, 1177, 1117, y 1111. En otras palabras, solo se emplean 17 de los 1) posibles grupos del cdigo binario de 5 bits. +i alguno de estos n-meros KprohibidosL de 5 bits aparece en una maquina que emplee el cdigo 8#" es una indicacin, por lo general, de que se ha cometido un error.

MARIA GUADALUPE TORRES ANDRES

17

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

Este m&todo es mucho m,s pr,ctico para representacin de n-meros en la memoria en comparacin al !+#**, todava se queda por debajo del binario, ya que con un byte en el m&todo 8#" solo podemos representar dgitos del 7 al 44, en cambio, en formato binario podemos representar todos los dgitos desde 7 hasta 266. Este formato es utili ado principalmente para representar n-meros muy grandes en aplicaciones mercantiles ya que facilita las operaciones con los mismos evitando errores de redondeo.

2.! R(<%()(,-*'05, +( <2,-& 4.&-*,-(


Esta representacin esta basada en la notacin cientfica, esto es, representar un n-mero en dos partes; su mantisa y su e'ponente. .oniendo como ejemplo el n-mero 1235777, podemos representarlo como 1.123H17I), en esta -ltima notacin el e'ponente nos indica el n-mero de espacios que hay que mover el espacio hacia la derecha para obtener el resultado original. En caso de que el e'ponente fuera negativo nos estara indicando el n-mero de espacios que hay que recorrer el punto decimal hacia la i quierda para obtener el original.

MARIA GUADALUPE TORRES ANDRES

18

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

CAPITULO III INTRODUCCION AL LENGUAJE ENSAMBLADOR

!.1 I/<&%-*,'0* +(. L(,;2*=( E,)*/9.*+&%. :a importancia del lenguaje ensamblador radica principalmente que se trabaja directamente con el microprocesadorE por lo cual se debe de conocer el funcionamiento interno de este, tiene la ventaja de que en el se puede reali ar cualquier tipo de programas que en los lenguajes de alto nivel no lo pueden reali ar. @tro punto sera que los programas en ensamblador ocupan menos espacio en memoria. Es importante como se puede ver, el :enguaje Ensamblador es directamente traducible al :enguaje de $,quina, y viceversaE simplemente, es una abstraccin que facilita su uso para los seres humanos. .or otro lado, la computadora no entiende directamente al :enguaje EnsambladorE es necesario traducirle a :enguaje de $,quina. .ero, al ser tan directa la traduccin, pronto aparecieron los programas Ensambladores, que son traductores que convierten el cdigo fuente <en :enguaje Ensamblador= a cdigo objeto <es decir, a :enguaje de $,quina. +urge como una necesidad de facilitar al programador la tarea de trabajar con lenguaje m,quina sin perder el control directo con el hardOare. El :enguaje Ensamblador es la forma m,s b,sica de programar un microprocesador para que &ste sea capa de reali ar las tareas o los c,lculos que se le requieranE es conocido como un lenguaje de bajo nivel, esto significa que nos permite controlar el 177 P de las funciones de un microprocesador, as como los perif&ricos asociados a &ste. ! diferencia de los lenguajes de alto nivel, por ejemplo M.ascalM, el lenguaje ensamblador no requiere de un compilador, esto es debido a que las instrucciones en lenguaje ensamblador son traducidas directamente a cdigo binario y despu&s son colocadas en memoria para que el microprocesador las tome directamente. !. 2 V(,-*=*) 1 +()7(,-*=*) +(. L(,;2*=( E,)*/9.*+&%. V(,-*=*) :a primera ra n para trabajar con ensamblador es que proporciona la oportunidad de conocer m,s a fondo la operacin de su .#, lo que permite el desarrollo de softOare de una manera m,s consistente. :a segunda ra n es el control total de la .# que se tiene con el uso del mismo.

MARIA GUADALUPE TORRES ANDRES

19

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

@tra ra n es que los programas de ensamblador son m,s r,pidos, m,s compactos y tienen mayor capacidad que los creados en otros lenguajes. .or -ltimo el ensamblador permite una optimi acin ideal en los programas tanto en su tamaDo como en su ejecucin. 7(.&'0+*+." #omo trabaja directamente con el microprocesador al ejecutar un programa, pues como este lenguaje es el m,s cercano a la m,quina la computadora lo procesa m,s r,pido. $ayor control sobre el hardOare de la computadora E40'0(,'0* +( -*/*>&." Un programa en ensamblador no ocupa mucho espacio en memoria porque no tiene que cargar libreras y dem,s como son los lenguajes de alto nivel. F.(3090.0+*+." Es fle'ible porque todo lo que puede hacerse con una m,quina, puede hacerse en el lenguaje ensamblador de esta m,quinaE los lenguajes de alto nivel tienen en una u otra forma limitante para e'plotar al m,'imo los recursos de la m,quina. @ sea que en lenguaje ensamblador se pueden hacer tareas especficas que en un lenguaje de alto nivel no se pueden llevar acabo porque tienen ciertas limitantes que no se lo permiten.

D()7(,-*=*) 9epeticin constante de grupos de instrucciones ?o e'iste una sinta'is estandari ada "ificultad para encontrar errores en los programas <bugs= T0(/<& +( <%&;%*/*'05,." #omo es un lenguaje de bajo nivel requiere m,s instrucciones para reali ar el mismo proceso, en comparacin con un lenguaje de alto nivel. .or otro lado, requiere de m,s cuidado por parte del programador, pues es propenso a que los errores de lgica se reflejen m,s fuertemente en la ejecucin. P%&;%*/*) 42(,-( ;%*,+()." .or las mismas ra ones que aumenta el tiempo, crecen los programas fuentesE simplemente requerimos m,s instrucciones primitivas para describir procesos equivalentes. Esto es una desventaja porque dificulta el mantenimiento de los programas, y nuevamente reduce la productividad de los programadores.

P(.0;%& +( *4('-*% %('2%)&) 0,()<(%*+*/(,-(." %enemos la ventaja de que todo lo que se puede hacer en la m,quina, se puede hacer con el :enguaje Ensamblador <fle'ibilidad=. El problema es que todo error que podamos cometer, o todo riesgo que podamos tener, podemos afectar 2'

MARIA GUADALUPE TORRES ANDRES

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

los recursos de la maquina, programar en este lenguaje lo m,s com-n que pueda pasar es que la m,quina se bloquee o se reiniciali e. .orque con este lenguaje es perfectamente posible <y sencillo= reali ar secuencias de instrucciones inv,lidas, que normalmente no aparecen al usar un lenguaje de alto nivel. En ciertos casos e'tremos, puede llegarse a sobrescribir informacin del #$@+ de la m,quinaE esto puede causar que dejemos de MverM el disco duro, junto con toda su informacin. F*.-* +( <&%-*90.0+*+." .orque para cada m,quina e'iste un lenguaje ensambladorE por ello, evidentemente no es una seleccin apropiada de lenguaje cuando deseamos codificar en una m,quina y luego llevar los programas a otros sistemas operativos o modelos de computadoras.

!.! R(.*'05, +(. .(,;2*=( (,)*/9.*+&% '&, .&) '&/<&,(,-() 0,-(%,&) +(. <%&'()*+&% En la /(/&%0* se almacena la informacin en celdas especiales llamados registros los cuales tienen un nivel alto y un nivel bajo. U,0+*+ *%0-/6-0'* 1 .5;0'*? es la responsable de reali ar como su nombre lo indica operaciones aritm&ticas y lgicas. U,0+*+ +( '&,-%&.? +e encarga de coordinar los componentes se ejecuten las operaciones correctamente. B2)? interno son los canales por donde pasa la informacin que la m,quina va a procesar <bus de entrada= o procesada <bus de salida=. :a U#. contiene registros para el manejo de comunicacin con el microprocesador los cuales son; R(;0)-%&) +( 2)& ;(,(%*. A@ G 9egistro acumulador, dividido en !A y !: <( bits cada uno=.F *nterviene en las operaciones aritm&ticas y lgicas, despu&s de la operacin arroja un resultado. B@ G 9egistro base, dividido en 8A y 8:.F +e utili a en transferencias de datos entre la memoria y el procesador. C@ G 9egistro contador, dividido en #A y #:.F +e utili a como contador en bucles <:@@.=, en operaciones con cadenas <9E.=, y en despla amientos <#:=. D@ G 9egistro de datos, dividido en "A y ":.F +e utili a en operaciones de multiplicacin y divisin junto con !' y en operaciones de entrada y salida de puertos, su mitad inferior ": contiene el n-mero de puertos.
MARIA GUADALUPE TORRES ANDRES

21

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

R(;0)-%&) +( E)-*+& Aay nueve indicadores de un bit en este registro de 1) bits. :os cuatro bits m,s significativos est,n indefinidos, mientras que hay tres bits con valores determinados; los bits 6 y 3 siempre valen cero y el bit 1 siempre vale uno. CF AC*%%1 F.*;$ 90- #B? +i vale 1, indica que hubo MarrastreM <en caso de suma= o Mpr&stamoM <en caso de resta=. Este indicador es usado por instrucciones que suman o restan n-meros que ocupan varios bytes. :as instrucciones de rotacin pueden aislar un bit de la memoria o de un registro poni&ndolo en el #>. PF AP*%0-1 F.*;$ 90- 2B? +i vale uno, el resultado tiene paridad par, es decir, un n-mero par de bits a 1. Este indicador se puede utili ar para detectar errores en transmisiones. AF AA230.0*%1 '*%%1 F.*;$ 90- 4B? +i vale 1, indica que hubo MarrastreM o Mpr&stamoM del nibble <cuatro bits= menos significativo al nibble m,s significativo. Este indicador se usa con las instrucciones de ajuste decimal. CF AC(%& F.*;$ 90- 6B? +i este indicador vale 1, el resultado de la operacin es cero. SF AS0;, F.*;$ 90- 7B? 9efleja el bit m,s significativo del resultado. #omo los n-meros negativos se representan en la notacin de complemento a dos, este bit representa el signo; 7 si es positivo, 1 si es negativo. TF AT%*< F.*;$ 90- 8B? +i vale 1, el procesador est, en modo paso a paso. En este modo, la #.U autom,ticamente genera una interrupcin interna despu&s de cada instruccin, permitiendo inspeccionar los resultados del programa a medida que se ejecuta instruccin por instruccin. IF AI,-(%%2<- F.*;$ 90- 9B? +i vale 1, la #.U reconoce pedidos de interrupcin e'ternas. +i vale 7, no se reconocen tales interrupciones DF AD0%('-0&, F.*;$ 90- 1#B? +i vale 1, las instrucciones con cadenas sufrir,n MautoFdecrementoM, esto es, se procesar,n las cadenas desde las direcciones m,s altas de memoria hacia las m,s bajas. +i vale 7, habr, MautoFincrementoM, lo que quiere decir que las cadenas se procesar,n de Mi quierda a derechaM.

MARIA GUADALUPE TORRES ANDRES

22

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

OF AO7(%4.&D 4.*;$ 90- 11B? +i vale 1, hubo un desborde en una operacin aritm&tica con signo, esto es, un dgito significativo se perdi debido a que tamaDo del resultado es mayor que el tamaDo del destino. R(.*'05, (,-%( (. '5+0;& 90,*%0& 1 (. .(,;2*=( (,)*/9.*+&% En el cdigo binario se utili an ceros y unos, mientras que el lenguaje ensamblador es una coleccin de smbolos mnemnicos que representan; operaciones, nombres simblicos, operadores y smbolos especiales. :a relacin entre estos dos lenguajes sera que el binario es el lenguaje que la m,quina entiende y el ensamblador se acerca mas lenguaje de esta.

!.4 M*,(=& +( .* /(/&%0*? D0%(''0&,*/0(,-& A0,-(%,& 1 (3-(%,&B. El manejo de la memoria depende de que procesador tenga la m,quina, entre los cuales a continuacin se mencionan los siguientes; $emoria de .rograma $emoria E'terna de "atos $emoria *nterna de "atos 9egistros de funciones Especiales $emoria de 8it.

El espacio de la $emoria de .rograma contiene todas las instrucciones, datos, tablas y cadenas de caracteres <strings= usadas en los programas. Esta memoria se direcciona principalmente usando el registro de 1) bits llamado "ata .ointer. El tamaDo m,'imo de la $emoria de .rograma es de )5 Qbytes. :a $emoria E'terna de "atos contiene todas las variables y estructuras de datos que no caben en la memoria interna del $icroprocesador. Esta memoria se direcciona principalmente por el registro de 1) bits "ata .ointer , aunque tambi&n se puede direccionar un banco de $emoria E'terna de "atos de 26) bytes usando los dos primeros registros de propsito general . El espacio de $emoria *nterna de "atos funcionalmente es la memoria de datos m,s importante, ya que ah es donde residen cuatro bancos de registros de propsito generalE la pila o stacN del programaE 12( bits de los 26) bits de un ,rea de memoria direccionable por bit y todas las variables y estructuras de datos operadas directamente por el programa. El tamaDo m,'imo de la $emoria *nterna de "atos es de 26) bytes.

MARIA GUADALUPE TORRES ANDRES

23

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

#ontiene un espacio para los denominados 9egistros de funciones Especiales destinado para los puertos de entrada B salida, tempori adores y puerto serie del circuito integrado. Estos registros incluyen al +tacN .ointerE al registro de la palabra de estado del programa y al !cumulador. :a cantidad m,'ima de 9egistros de >unciones Especiales es 12(. %odos los 9egistros de >unciones Especiales tienen direcciones mayores a 12/ y se ubican en los 12( bytes superiores de la $emoria *nterna de "atos. Estas dos ,reas de la $emoria *nterna de "atos se diferencian por el modo de direccionamiento usado para accesarlas. :os 9egistros de >unciones Especiales solo se pueden accesar usando el modo de direccionamiento "irecto, mientras que los 12( bytes superiores solo se pueden accesar con el modo de direccionamiento *ndirecto. .or otra parte, el espacio de $emoria de 8it se usa para almacenar variables y banderas de un bit. El tamaDo m,'imo de la $emoria de 8it es de 26) bits, 12( de los bits comparten su espacio con 1) bytes del espacio de la $emoria *nterna de "atos y los otros 12( bits lo hacen con los 9egistros de >unciones Especiales.

MARIA GUADALUPE TORRES ANDRES

24

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

CAPITULO IV INTRODUCCION AL MICROPROCESADOR

4.1 L* (7&.2'05, +(. /0'%&<%&'()*+&%

!ntes de comentar los microprocesadores modernos, se debe primero entender que fue lo que puso a estos dispositivos en primer plano. :a historia dice que los antiguos babilonios empe aron a usar el ,baco,<calculadora primitiva hecha con cuentas o esferas ahuecadas=, alrededor del aDo 677 a de R#. #on el tiempo, esta sencilla calculadora, estimulo a la humanidad para perfeccionar una maquinaria calculadora en que se utili aban engranes y ruedas <8las .ascal en 1)52=. +e continuaron los progresos con las gigantescas maquinas computadoras de las d&cadas de 1457 y 1467, construidas con relevadores y tubos de vacio <bulbos=. $as adelante, se utili aron los transistores y los componentes electrnicos de estado slido para construir las poderosas computadoras de la d&cada de 14)7. #on el advenimiento de los circuitos integrados se llego el perfeccionamiento del microprocesador y de los sistemas de microcomputadoras. #on la aparicin de las computadoras personales <.#= y la reduccin en el costo de las mismas, el microprocesador se convirti en uno de los dispositivos electrnicos m,s importantes en la historia de la electrnica. 8,sicamente, un microprocesador es un circuito electrnico de muy alta escala de integracin, capa de reali ar una infinidad de tareas de forma repetitiva a velocidades muy altas. Esto se logra por medio de la lgica dictada por un conjunto de instrucciones que el microprocesador interpreta y ejecuta y que recibe el nombre de programa. "esde su aparicin en 14/1 el microprocesador ha sufrido una gran cantidad de cambios, todos ellos hacia el lado de aumentar su capacidad y velocidad de procesamiento. .ara poder utili ar todo el potencial que encierra un microprocesador, es necesario conocer y comprender su lenguaje natural, esto es; el .(,;2*=( (,)*/9.*+&%.

E. /0'%&<%&'()*+&% +( 4 90-). En 14/1, *ntel #orporation y el talento creativo de $arcian E. @ff, lan aron el primer microprocesador; el 5775, de 5 bits. Este controlador integrado.

MARIA GUADALUPE TORRES ANDRES

25

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

.rogramable en un solo encapsulado era suficiente, seg-n las normas actuales, porque solo direccionaba 574) localidades de 5 bits en la memoria. El 5775 contena un conjunto de instrucciones que ofrecan solo 56 instrucciones diferentes. #omo consecuencia, el 5775 solo se odia emplear en aplicaciones limitadas, como en los primeros juegos de video y en controladores pequeDos basadas en microprocesadores. #uando surgieron aplicaciones m,s complejas para el microprocesador, el 5775 resulto inadecuado. E. /0'%&<%&'()*+&% +( 8 90-). $as tarde, en 14/1, al percatarse que el microprocesador era un producto viable para comerciali acin, *ntel #orporation produjo el (77(, el primer microprocesador de ( bits. El tamaDo ampliado de la memoria <1)Q (= y las instrucciones adicionales <un total de 5(= en este nuevo microprocesador brindaron la oportunidad de muchas aplicaciones mas avan adas <1 Q es igual a 1725 byte es un numero de ( bits=. #onforme los ingenieros desarrollaban usos mas demandantes para el microprocesador, la memoria y el juego de instrucciones, m,s o menos pequeDos del (77( pronto limitaron su utilidad. .or lo tanto, en 14/3, *ntel #orporation introdujo el (7(7, el primero de los microprocesadores modernos de ( bits. .ronto, otras empresas empe aron a lan ar sus propias versiones de los procesadores de 5 y de ( bits. S.ero que tenia en especial el (7(7T ?o solo direccionaba mas en la memoria y ejecutaba mas instrucciones, y con die veces mas rapide que el (77(. Una suma que tardaba 27 ms en un sistema basado en un (7(7. !dem,s, el (7(7 era compatible con la lgica transistorFtransistor <%%:= lo cual significaba que se poda interconectar con componentes de lgica %%: est,ndar. %odas estas ventajas introdujeron la era del (7(7 y la &poca siempre en e'pansin del microprocesador. *ntel #orporation introdujo en 14//, una nueva versin del (7(7; el (7(6. !unque solo ligeramente mas avan ado que el (7(7, el (7(6 direcciona la misma cantidad de memoria, ejecuta mas o menos el mismo n-mero de instrucciones y suma en 1.3 ms en lugar de 2.7 ms. :as principales ventajas del (7(6 son el generador de reloj y el controlador del sistema integrados, que eran componentes e'ternos en un sistema basado en el (7(7. %an solo *ntel ha vendido mas de 177 millones de pie as del microprocesador (7(6. Estas caractersticas han hecho del (7(6 uno de los microprocesadores *ntel mas conocidos. E. /0'%&<%&'()*+&% +( 16 90-). En 14/(, *ntel #orporation lan o el microprocesador (7() y mas o menos un aDo mas tarde, el (7((. !mbos dispositivos son microprocesadores de 1) bits, ejecutan instrucciones en escasos 577 nsE una gran mejora en la relacin con la velocidad de ejecucin del (7(6. El (7() y el (7(( tienen tambi&n capacidad para direccionar a un 1 $ byte <( bits= o una memoria de 612Q palabra <1) bits de ancho=. :as velocidades m,s altas de ejecucin y el tamaDo de

MARIA GUADALUPE TORRES ANDRES

26

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

memoria m,s grande, permitieron al (7() y al (7(( sustituir computadoras pequeDas en muchas aplicaciones.

mini

Una necesidad importante que acelero la evolucin del microprocesador de 1) bits fue la multiplicacin y la divisin por hardOare. Estas funciones no est,n disponibles en la mayor parte de los microprocesadores de ( bits, e'cepto el motorola $#)(74, que puede multiplicar, pero no dividir. .ero el microprocesador de 1) bits evolucion tambi&n por otras ra ones. @frece un espacio direccionable de memoria mas grande que el microprocesador de ( bits, lo cual le permite le permite efectuar operaciones muy complejas para los cuales no hay espacios en )5N bytes de memoria. El (7() y el (7(( tienen un gran n-mero de registros internos, accesibles a 277 ns, por comparacin con los (7 que se necesitan para llegar hasta un registro en un microprocesador de ( bits. Estos registros adicionales permiten escribir softOare con mucha m,s eficiencia. !simismo, los programas de aplicacin del softOare <sistemas administrativos basados en datos, listados, procesadores de palabra y verificaciones de ortografa= empe aron a requerir m,s de )5N bytes de memoria disponibles en el microprocesador de ( bits. El momento llegado para el microprocesador de 1) bits. :a evolucin del microprocesador de 1) bits no termino en el (7() y el (7((, sino que contin-o con la introduccin del (71(), una versin altamente integrada del (7(). El microprocesador (71() de 1) bits es uno de los m,s conocidos del *ntel. El (71() se utili a en muchas aplicaciones de sistemas de control, pero no como el microprocesador principal en los sistemas de computadoras personales. +i se encuentra el (71() en un a computadora personal es solo en una tarjeta enchufable en la tarjeta madre que podra controlar una memoria en disco duro o una interface para comunicaciones. El mas reciente microprocesador de 1) bits producido por *ntel es el (72(), una versin mejorada del (7(), que contiene una unidad de administracin de memoria y direcciona a una memoria de 1)$ en lugar de 1$ byte. :a velocidad de reloj del (72() se ha aumentado tambi&n a 1) $A , en las -ltimas versiones producidas por *ntel. :a versin b,sica del (7() y del (7(( ejecutaba hasta 2.6 $*. <millones de instrucciones por segundo=, en tanto la versin b,sica del (72() ejecuta hasta ( $*..

E. /0'%&<%&'()*+&% +( !2 90-). :a versin mas reciente del microprocesador es el de 32 bits. <#onsulte en la tabla 5F1 la lista de todos los microprocesadores *ntel. *ntel produce en la actualidad dos versiones principales; el (73() y el (75(). El (73() fue el primer microprocesador de 32 bits producido por *ntel, cuya principal ventaja es una frecuencia de reloj mucho mas alta <33 $A en el (73() y )) $A en la versin doble reloj del (75()=, as como un espacio mucho mayor en la memoria <5G bytes=.

MARIA GUADALUPE TORRES ANDRES

27

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

El microprocesador (75() contiene b,sicamente un (73() mejorado, un coprocesador aritm&tico <para la versin "U del (75()= y una memoria cach& interna de (Q bytes. El (73() ejecuta muchas instrucciones en 2 ciclos de reloj, mientras que el (75(), que ejecuta muchas instrucciones en un solo ciclo de reloj. Estas mejoras, combinadas con un reloj de )) $A <(75()"U2= permiten que las instrucciones se ejecuten a 65 $*., de acuerdo con *ntel #orporation. Esto puede compararse con el (7(6, presentando 12 aDos antes que el (75(), que ejecutaba las instrucciones a una velocidad de alrededor de 7.6 $*.. Estas mejoras en la velocidad continuaron con las versiones m,s nuevas del microprocesador de 32 bits conforme sea disponible. :a pr'ima generacin <.entium= promete lograr velocidades de 177 $*..
N2/(%& +( <0(E* (75( (761 (7(6! (7() (7(( (74) (71() (71(( (72() (73()"U (73()": (73()+U (75()"U (75()+U .entium H A,':& +(. '*,*. +( +*-&) ( ( ( 1) ( 1) 1) ( 1) 32 1) 1) 32 32 32B)5 T*/*>& +( /(/&%0* 2Q interna (Q interna )5Q 1$ 1$ (Q interna 1$ 1$ 1)$ 5G 32$ 1)$ 5G 5G 5G

4.2 A%F20-('-2%* BG)0'* +(. /0'%&<%&'()*+&%.

:a programacin e interface eficiente requiere una comprensin clara de la arquitectura b,sica de la familia de microprocesadores de *ntel en esta seccin se presenta una descripcin detallada de la arquitectura b,sica de estos microprocesadores. A%F20-('-2%* 0,-(%,* 9G)0'* :os microprocesadores modernos, igual que los anteriores, buscan instrucciones en la memoria, pero lo hacen en una forma totalmente nueva. :os microprocesadores modernos est,n estructurados de modo que contengan muchas mas unidades internas de procesamiento, cada una de la cuales efect-an una tarea especifica. <%&ngase en cuenta que cada una de estas unidades de procesamiento es, realidad, un microprocesador para fines especiales.= Esto significa que el microprocesador moderno puede a menudo
MARIA GUADALUPE TORRES ANDRES

28

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

procesar cierto n-mero de instrucciones en forma simult,nea, en diversas etapas de la ejecucin. Esta capacidad recibe a menudo el nombre de paralelismo. En la figura 5F1<a= se ilustra el funcionamiento normal de un (7(6, que es tpico de la mayor parte de los microprocesadores de ( bits. ?tese que las instrucciones se recuperan de la memoria con una operacin de lectura. :uego, mientras el (7(6 ejecuta la instruccin, el sistema de memoria esta ocioso. :a familia de los microprocesadores *ntel, empe ando con el (7() y el (7((, aprovecha este tiempo de memoria ociosa buscando con anticipacin la siguiente instruccin mientras ejecuta la actual. Esto acelera la ejecucin total de un programa. En la figura 5F1<b= se ilustra la secuencia de eventos en el microprocesador (75(). +e anotara que el canal esta casi siempre ocupado. +e vera tambi&n que el (75() tiene mas de una unidad interna. #ada unidad esta destinada a funcionar en paralelo con instrucciones en diversas fases de la ejecucin.

MARIA GUADALUPE TORRES ANDRES

29

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

9ecuperar "ecodificar Ejecutar 9ecuperar "ecodificar Ejecutar 9ecuperar "ecodificar Ejecutar 1 1 1 2 2 2 3 3 3

$icroprocesador #anal
@cupado @cioso @cupado @cupado @cioso @cupado @cupado @cioso @cupado

<a= Unidad de *nterface de 9ecuperar 9ecuperar 9ecuperar 9ecuperar !lmacenar 9ecuperar 9ecuperar canal 1 2 3 5 1 6 ) Unidad de *nstruccin
"ecodificar "ecodificar "ecodificar "ecodificar 1 2 3 5 9ecuperar /

:eer 2

@ciosa

"ecodificar "ecodificar 6 )

@ciosa

Unidad de ejecucin
Ejecutar 1 Ejecutar 2 Ejecutar 3 Ejecutar 5 @ciosa Generar direccin 2 Ejecutar 6 Ejecutar )

Unidad de direccionamiento

Generar direccin 1

<b=

MARIA GUADALUPE TORRES ANDRES

3'

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

(igu"a )*1 /,0 3!8*$&8,2$#8+& %# !8 2$*"&9"&*# ,%&" ,8+$:!& *&2& #- 8'85A; /70 3!8*$&8,2$#8+& %#- 2$*"&9"&*# ,%&" 8'486 *&8 ,"<!$+#*+!", 9,",-#-, /9$9#-$8#0.

MARIA GUADALUPE TORRES ANDRES

31

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

:a unidad de interface del canal <8*U=, es la que tiene la funcin de leer las instrucciones y de leer o escribir datos entre el microprocesador y la memoria. :a salida de la 8*U se conecta con la memoria cach& de (Q bytes, en donde se #ach& alimenta un prerrecuperador con una cola de 32 bytes de instrucciones sin ejecutar en el prerrecuperador. En la salida del prerrecuperador se encuentra un decodificador de instrucciones que decodifica las instrucciones para que la utilicen las diversas unidades de ejecucin dentro del microprocesador. Estas unidades de ejecucin incluyen la unidad de punto flotante, la unidad de control y prueba de proteccin y la unidad de paginacin, la unidad de segmentacin y el despla ador de barril, y la !:U. :a figura 5F2 ilustra la multitud de unidades que est,n dentro del microprocesador (75(). :os microprocesadores mas antiguos tenan una sola unidad que controlaba la interface del canal y efectuaba todas las operaciones. El (75() contiene unidades especiali adas que en, forma individual, efect-an estas funciones a fin de poder reali ar m,s de una operacin a la ve .

FIGURA 4"2 :a estructura interna del microprocesador (75()

MARIA GUADALUPE TORRES ANDRES

32

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

A%F20-('-2%* +(. )0)-(/* En la figura 5F3 se ilustra la arquitectura del sistema de un microprocesador moderno. +e vera que en las comunicaciones entre el sistema y el microprocesador ocurren por medio de estos canales; direcciones, datos y control. El canal de direcciones suministra una direccin en la memoria para la memoria del sistema o el espacio de entradaB salida <EB+= para los dispositivos de EB+ del sistema. El canal de datos transfiere estos entre el microprocesador, la memoria y los dispositivos de EB+ conectados en el sistema. El canal de control suministra seDales de control que hacen que la memoria o el espacio de EB+ efect-en una operacin de lectura y escritura. :as seDales de control se hacen posible la lectura y escritura en la memoria o el espacio de EB+.

FIGURA 4"! +istemas 8,sicos (7() y (7((. <a= El sistema (7() ilustra el canal de datos de 1) bits, el canal de direccionamiento de 27 bits y el canal de control. <b= El sistema del (7(( ilustra el canal de datos de ( bits, el canal d e direcciones de 27 bits y el canal de control.

Un e'amen cuidadoso de la figura 5F3 revelar, que el ancho del canal de datos y el de direcciones vara entre una versin y otra del microprocesador. En la tabla 5F3 se enumeran esta variaciones para comparacin y tambi&n la velocidad de reloj cuando hi o su aparicin el microprocesador. "espu&s de la
MARIA GUADALUPE TORRES ANDRES

33

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

versin inicial de cada microprocesador, se pusieron a disposicin versiones con frecuencias de reloj m,s altas. TABLA 4"!
M0'%&<%&'()*+&% (7() (7(( (71() (72() (73()"U (73()+U (73()+: (75()"U (75()+U A,':& +( '*,*. A,':& +(. '*,*. +(. R(.&= AMHEB +( +*-&) A90-)B +0%(''0&,() A90-)B 1) 27 6 ( 27 6 1) 27 ) 1) 25 ( 32 32 1) 1) 25 1) 1) 26 1) 32 32 26 32 32 27

El ancho del canal de datos determina cuantos bytes se transfieren a la ve entre el microprocesador y la memoria, mientras que el ancho del canal de direcciones determina cuanta memoria direcciona el microprocesador. En general, cuanto mas ancho sea el canal de datos, mas r,pido es el microprocesador.

4.! L* /(/&%0* 1 (. /0'%&<%&'()*+&% +e le denomina memoria lgica o memoria fsica al espacio de direccionamiento de un sistema basado en un microprocesador. :a estructura de la memoria lgica es diferente, en casi todos los casos, que la estructura de la memoria fsica. :a memoria fsica es la estructura real en el hardOare en el sistema de memoriaE la memoria lgica es el sistema de memoria tal como lo ve el programador. M(/&%0* .5;0'* El espacio b,sico de la memoria lgica es el mismo en todos los microprocesadores *ntel. :a memoria lgica se numera por bytes. En la figura 5F5 se ilustra la memoria lgica de todos los miembros de la familia *ntel. +e vera que la -nica diferencia es que algunos miembros contienen mas memoria que otros. !dem,s, se debe tener en cuenta que la memoria fsica puede diferir de la memoria lgica en muchos sistemas. :a memoria lgica del (7(), (7(( y (71() empie a en la localidad 77777A y llega hasta la >>>>>A. Este intervalo de direcciones especifica el 1$ de bytes de memoria disponible en estos sistemas. :a memoria lgica del (72() y el (73()+U empie a en la localidad de memoria 777777A y llega hasta la ubicacin >>>>>>A para tener un total de 1)$ bytes de memoria. El (73()+: contiene 32$ bytes de memoria que empie an en la localidad 1>>>>>>A. El
MARIA GUADALUPE TORRES ANDRES

34

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

(73()"U, (75()+U y (75()"U contienen memoria que empie a en la localidad 77777777A y termina >>>>>>>A, para un total de 5G bytes de memoria <1GG 1,725$ y 1$G 1725Q=. #uando estos microprocesadores direccionan una palabra de 1) bits en la memoria, se accesan dos bytes consecutivos. .or ejemplo, la palabra en la localidad 77122A se almacena en los bytes 77122A y 77123AE el byte menos significativo se almacena en la localidad 77122A. +i se accesa a una palabra doble de 32 bits, esta palabra doble la contienes cuatro bytes consecutivos. .or ejemplo, la doble palabra almacenada en la localidad 77127A se almacena en los bytes 77127A, 77121A, 77122A y 77123AE el byte menos significativo se almacena en 77127A y el byte mas significativo en 77123A.

M(/&%0* 4I)0'* :as memorias fsicas de los miembros de la familia *ntel difieren en ancho. :a memoria del (7(( es de ( bits de anchoE las memorias del (7(), (71(), (72() y (73()+U tienen 1) bits de anchoE las memorias del (73()"U y (75() son de 32 bits de ancho. .ara la programacin, no hay diferencia en el ancho de la memoria porque la memoria lgica siempre es de ( bits de anchoE pero como se puede ver en la figura 5F6, hay una diferencia para el diseDador del hardOare. :a memoria esta organi ada en bancos de memoria en todas las versiones del microprocesador, e'cepto (7(( que tiene un solo banco de memoria. Un banco de memoria es una seccin de ( bits de ancho. :os microprocesadores de 1) bits tienen dos bancos de memoria para formar una seccin de memoria de 1) bits de ancho, a la cual se direcciona por bytes o por palabras. :os microprocesadores de 32 bits tienen cuatro de bancos de memoria, pero se le direcciona como bytes, palabras o dobles palabras.

MARIA GUADALUPE TORRES ANDRES

35

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

FIGURA 4"5 :os sistemas de memoria fsica de la familia de microprocesadores (7()F (75().

L* /(/&%0* (, .* '&/<2-*+&%* <(%)&,*. #ualquier estudio de la familia *ntel requiere entender la estructura de la memoria de la computadora personal. "ebido a que la computadora personal original estuvo basada en el microprocesador (7((, se considera que su memoria principal tiene una longitud de 1$ byte. Esta memoria principal se le llama /(/&%0* %(*.. $,s tarde :*$ <:otusF*ntelF$icrosoft= crearon un est,ndar para un sistema de memoria ampliada <E$+=. :a memoria ampliada se coloc en un marco en un marco de pagina vaco <)5Q bytes= ubicado entre la memoria de solo de lectura <9@$= del 8*@+

MARIA GUADALUPE TORRES ANDRES

36

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

<+istema b,sico de entradaBsalida= en el sistema. #on este marco de pagina de )5Q bytes, el est,ndar :*$ permite acceso a un n-meros ilimitado de paginas de memoria ampliada de )5Q bytes, si bien el acceso a esas paginas es lento. El sistema de memoria ampliada se volvi obsoleto con el advenimiento del microprocesador (72() y otros mas nuevos, aunque todava esta soportando por los antiguos sistemas basados en (7() y (7((. #on los nuevos (72(), (73() y (75() se pueden direccionar memorias por encima del primer byte 1$. Esta memoria adicional, llamada sistema de memoria extendida <U$+= contiene 16$ bytes adicionales en el sistema de (72() y (73()+U, y 5,746$ bytes en los sistemas de (73()"U y (75(). El sistema U$+ ha sustituido al sistema E$+ de las primeras computadoras personales. En la figura 5F) se ilustra de la memoria de una computadora personal con la memoria etiquetada por onas. :os primeros )57Q bytes del sistema de memoria en todas las computadoras personales, se llama el rea de programa transitorio <%.!=. El %.! contiene una memoria 9!$ <lectura y escritura= para almacenar las aplicaciones de softOare, el sistema operativo y diversos programas que controlan los dispositivos de EB+. "espu&s del %.! esta almacenada la ona de sistemas que contiene varios 8*@+ < sistema bsico de entrada/salida= para controlar el sistema, una 9!$ de video y onas abiertas que se pueden utili ar para un marco de p,gina de E$+ y con opciones instalables en el sistema de la computadora. Encima de esta ona de memoria de 1$ byte, est, el sistema de memoria e'tendida, que tiene sistemas para discos en cacheo y otros segmentos de datos definidos por el sistema operativo.

FIGURA 4"6 $emoria de un sistema de computadora personal.

MARIA GUADALUPE TORRES ANDRES

37

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

4.4 M&+(.& +( <%&;%*/*'05, :a programacin requiere un conocimiento claro de la estructura de los registros internos de la familia de microprocesadores *ntel. En esta seccin se describe la estructura de los registros del microprocesador y se e'plica la forma en que se direcciona la memoria por medio de los registros de segmentos y de los despla amientos de direccin. En la figura 5F/ se ilustra el arreglo de registros internos del microprocesador. Este arreglo se aplica a todas las versiones del microprocesador. %enga en cuenta que las partes sombreadas slo est,n disponibles en los microprocesadores (73() y (75(). El arreglo de registros internos consta de tres grupos de registros; registros de uso general, apuntadores y registros de ndice y registros de segmentos. !dem,s esos grupos, hay tambi&n un registro de banderas que seDala las condiciones respecto al funcionamiento de la unidad aritm&tica y lgica <!:U=.

FIGURA 4"7 !rreglo de registros internos <modelo de programacin= de todas las versiones de los microprocesadores.

:a U#. tiene 15 registros internos, cada uno de 1) bits. :os primeros cuatro, !U, 8U, #U, y "U son registros de uso general como lo hemos
MARIA GUADALUPE TORRES ANDRES

38

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

mencionado en el capitulo anterior y tambi&n pueden ser utili ados como registros de ( bits, para utili arlos como tales es necesario referirse a ellos como por ejemplo; !A y !:, que son los bytes alto <high= y bajo <loO= del registro !U. Esta nomenclatura es aplicable tambi&n a los registros 8U, #U y "U. :os registros son conocidos por sus nombres especficos;
A@ B@ C@ D@ DS ES SS CS BP SI DI SP IP !cumulador 9egistro base 9egistro contador 9egistro datos 9egistro de segmento de datos 9egistro de segmento e'tra 9egistro de segmento de pila 9egistro de segmento de cdigo 9egistro de apuntadores base 9egistro indice fuente 9egistro indice destino 9egistro del apuntador de la pila 9egistro de apuntador de siguiente instruccin 9egistro de banderas

R(;0)-%& +( <%&<5)0-& ;(,(%*. :os registros de propsito general se utili an en la forma en que desee el programador. #ada registro de uso general se puede direccionar como un registro de 32 bits <E!U, E8U, E#U y E"U=, como uno de los 1) bits <!U, 8U, #U, y "U= o como uno de ( bits <!A, !:, 8A, 8:, #A, #:, "A:, y ":=. +e debe tener en cuenta que slo el (73() y el (75() contienen el grupo de registros de 32 bits. En algunas de las instrucciones que se e'plican en captulos anteriores tambi&n se los registros de uso general para tarea especficas. .or esta ra n, a cada uno se le da su nombre <!cumulador, 8ase, #ontar y datos=. En el lenguaje ensamblador, al registro de uso general siempre se le denomina con
MARIA GUADALUPE TORRES ANDRES

39

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

combinaciones de dos o de tres letras. .or ejemplo al acumulador se le denomina E!U, !U, !A o !:. :as funciones primarias de los registros de propsito general incluyen; A@ AA'2/2.*+&%B? a menudo conserva el resultado temporal despu&s de una operacin aritm&tica o lgica. %ambi&n se le direcciona como E!U, !A o !:. B@ AB*)(B? conserva la direccin base <despla amiento= de los datos que hay en la memoria o la direccin base de una tabla de datos referenciados por la instruccin para convertir <U:!%=. %ambi&n se le direcciona como, E8U, 8A o 8:. C@ AC&,-*+&%B? contiene el conteo de ciertas instrucciones para corrimientos <#:= y rotaciones del numero de bytes <#U= para las operaciones repetidas de cadena y un contador <#U o E#U= para la instruccin :@@.. %ambi&n se le direcciona como E#U, #A o #:. D@ AD*-&)B? es un registro de uso general que tambi&n contiene la parte mas significativa de un producto despu&s de una multiplicacin de 1) o de 32 bitsE la parte mas significativa del dividendo antes de la divisin y el numero de puerto de EB+ para la instruccin variable de EB+. %ambi&n se le direcciona como E"U, "A o ":. R(;0)-%&) *<2,-*+&%() ( I,+0'() !unque los registros apuntadores e ndices son tambi&n de uso general, se utili an mas a menudo para apuntar a la localidad de la memoria que contiene los datos del operando de muchas instrucciones. :os registros apuntadores e ndices; SP AA<2,-*+&% +( <0.*B? +e emplea para direccionar datos en una pila de memoria de :*>@ <-ltimo en entrar, primero en salir=. Esto ocurre cuando se ejecutan las instrucciones .U+A y .@. cuando se llama <#!::= o se regresa <9E%= de una subrutina desde un programa principal. Este registro es tambi&n el registro E+. de 32 bits. BP AA<2,-*+&% +( 9*)(B? Es un apuntador de uso general que se utili a para direccionar a una matri de datos en una pila de memoria. Este registro es tambi&n el registro E8. de 32 bits. SI AI,+0'( +( 42(,-(B? +e emplea para direccionar datos fuente en forma indirecta para utili arlos con las instrucciones de cadenas o arreglos. Este registro es tambi&n el registro E+* de 32 bits. DI AI,+0'( +( +()-0,&B? +e emplea para direccionar datos destino en forma indirecta, para utili arlos con las instrucciones de cadenas o arreglos. Es tambi&n el registro E"* de 32 bits.

MARIA GUADALUPE TORRES ANDRES

4'

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

IP AA<2,-*+&% +( 0,)-%2''0&,()B? +e utili a siempre para direccionar a la siguiente instruccin que va a ejecutar el microprocesador. .ara formar la localidad real de la siguiente instruccin se suma el contenido de *. con #+ <por= 17A, como se describe en la siguiente seccin. Este registro es tambi&n el registro E*. de 32 bits. +e hace direccionamiento indirecto de datos por medio de cuatro de estos cinco registros de 1) bits, pero nunca con el apuntador de instrucciones.

E. %(;0)-%& +( 9*,+(%*) :as banderas indican la condicin del microprocesador a la ve que controlan su funcionamiento. En la figura 5F( se ilustran los registros de banderas de todas las versiones de los microprocesadores (7() a (75(). +e debe tener en cuenta que las banderas son compatibles hacia arriba desde el (7()B(7(( hasta el (75(). El (7()F(72() contiene un registro de banderas, >:!G <1) bits= y los (73()F(75() contienen un registro E>:!G <registro de banderas e'tendido, de 32 bits=. :os bits de bandera cambian despu&s de ejecutar muchas de las instrucciones aritm&ticas y lgicas. !lgunas de las banderas se utili an para controlar ciertas caractersticas del microprocesador. ! continuacin aparece una lista con cada bit de bandera, con una breve descripcin e su funcin. ! medida que se han a conocer instrucciones en captulos posteriores, se dar,n detalles adicionales de los bits indicadores. C AA'*%%(&B. *ndica un acarreo despu&s de una suma o un pr&stamo despu&s de una resta. :a bandera de acarreo tambi&n indica condiciones de error en ciertos programas y procedimientos. P AP*%0+*+B. Es un cero par una paridad impar y un 1 para paridad par. :a paridad es un conteo de KunosL e'presado como un n-mero par o impar. .or ejemplo, si un n-mero contiene 3 bits con uno binario, tiene paridad impar. +i un n-mero contiene cero bits de uno, se considera que tiene paridad par. A AA'*%%(& *230.0*%B. %iene un acarreo despu&s de una suma o un Kpr&stamoL despu&s de una resta entre las posiciones de los bits 3 y 5 en el resultado. Este indicador especiali ado se prueba con las instrucciones "!! y "!+ para ajustar el valor de !: despu&s de una suma o resta 8#". El microprocesador, no utili a en otra forma el bit de bandera !. C AC(%&B. *ndica que el resultado de una operacin aritm&tica o lgica es cero, +i VG 1, el resultado es cero y si VG 7, el resultado no es cero. T AT%*/<*B. #uando se activa la bandera de trampa. +e habilita la caracterstica de depuracin del microprocesador.

MARIA GUADALUPE TORRES ANDRES

41

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

D AD0%(''05,B. #ontrola la seleccin de incremento o decremento de los registros "* o +* durante las instrucciones de cadenas o arreglos. +i "G 1 hay decremento autom,tico en los registros y si "G 7 hay incremento. :a bandera " se activa con las instrucciones +%" <activar direccin= o se borra con <#:"= quitar direccin. O AS&9%(4.2=&B. Es una condicin que ocurre cuando se suman o restan n-meros con signo. Un sobreflujo indica que el resultado a e'cedido de la capacidad de la maquina. .or ejemplo, si se suma un />A<J12/= a 71A<J1= el resultado es (7A <F12(=. Este resultado representa una situacin de sobreflujo seDalado por la bandera para la suma con signo. .ara operaciones sin signo, no se toma en cuenta esta bandera. IOPL AN07(. +( <%070.(;0& +( (,-%*+*J)*.0+*B. +e utili a en el funcionamiento en modo protegido para seleccionar el nivel de privilegio de los dispositivos de EB+. +i el nivel de privilegio actual es de mayor prioridad que el de *@.:, entonces se ejecuta la operacin de EB+. +i el nivel del *@.: es menor que el nivel de privilegio actual, ocurre una interrupcin y ocasiona que se suspenda la ejecucin. +e debe tener en cuenta que un *@.: de 77 es el de mayor prioridad y un *@.: de 11 es de menor prioridad. NT AT*%(* *,0+*+*B. *ndica que la tarea que esta en curso esta anidada dentro de otra tarea en el funcionamiento en modo protegido. Esta bandera se activa cuando el softOare anida la tarea. RF AR(*,2+*%B. +e emplea con la depuracin para controlar la reanulacin de la ejecucin despu&s de la siguiente instruccin. VM AM&+& 70%-2*.B. +elecciona el funcionamiento en modo virtual en un sistema con modo protegido. Un sistema de modo virtual permite particiones de la memoria con "@+. AC AC&/<%&9*'05, +( *.0,(*'05,B. +i se direcciona a una palabra o palabra doble en una direccin impar <byte= o no m-ltiplo de cuatro para doble palabra, se activa esta bandera. +olo el microprocesador (75()+U contiene el bit de comprobacin de alineacin cuyo empleo primordial es con el coprocesador num&rico ane'o. R(;0)-%&) +( )(;/(,-&) Unos registros adicionales, a los que se da el nombre de registros de segmentos, generan direcciones en la memoria juntos con otros registros en el microprocesador. Aay 5 o ) registros de segmentos en las diversas versiones de los microprocesadores (7()F(75(). Un registro de segmento funciona de una manera diferente en el modo real, por comparacin con el funcionamiento del microprocesador en modo protegido. CS AC5+0;&B. El segmento de cdigo es una seccin de la memoria que tiene los programas y procedimientos utili ados por los programas. El registro de segmento de cdigo define la direccin inicial de la seccin de memoria de

MARIA GUADALUPE TORRES ANDRES

42

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

)5Q bytes y en el modo protegido selecciona un descriptor que describe la direccin inicial y la longitud de la seccin de memoria que tiene el cdigo. El segmento de cdigo esta limitado a )5Q bytes de longitud en el (7((F(72() y a 5G bytes en el (73()B(75(). DS A+*-&)B. +egmento de datos es una seccin de la memoria que contiene la mayor parte de los datos utili ados por un programa. +e les accesa en el segmento de datos con un despla amiento o con el contenido de otros registros que tienen la direccin del despla amiento. ES AE3-%* & *+0'0&,*.B. El segmento e'tra o adicional de datos lo utili an algunas instrucciones para cadenas. SS AP0.*B. El segmento de pila define la superficie de la memoria utili ada para la pila. :a ubicacin del punto inicial de entrada a la pila, se determina por el registro apuntador de la pila. El registro 8. tambi&n direcciona los datos que hay dentro del segmento de pila. FS 1 GS. Estos registros de segmento adicionales est,n disponibles en los microprocesadores (73() y (75() a fin de contar con dos segmentos adicionales de memoria para acceso con los programas. 4"5 D0%(''0&,*/0(,-& +( .* /(/&%0* (, /&+& %(*.. :os microprocesadores (72()F(75() funcionan en e l modo real o en el protegido. :os (7(( y (71() solo funcionan en el modo real. El funcionamiento en el modo real permite que el microprocesador solo direccione al primer 1$ byte de espacio en la memoria, aunque sea un microprocesador(75(). En los sistemas de funcionamiento $+"@+ o .#"@+ se supone que el microprocesador funciona en el modo real en todo momento. El funcionamiento en el modo real permite que el softOare de aplicacin escrito para el (7() u (7(( que solo contienen 1$ byte de memoria, funcionan con los microprocesadores (72(), (73() y (75(). En todos los casos, cada uno de los microprocesadores empie a a funcionar en modo real en forma implcita <default=, siempre que se aplica la corriente o si se restablece el microprocesador. S(;/(,-&) 1 +()<.*E*/0(,-&) Una direccin de segmento y una direccin de despla amiento, generan una direccin en la memoria en el modo real. %odas las direcciones en la memoria en modo real consisten de un segmento y un despla amiento. El segmento ubicado en unos de los registros de segmento, define la direccin inicial de cualquier segmento de memoria de )5Q bytes. :a direccin de despla amiento selecciona una localidad dentro del segmento de memoria de )5Q bytes. En la 5F4 figura se ilustra como el esquema de direccionamiento de segmento de memoria mas despla amiento selecciona una localidad en la memoria. Esta ilustracin se muestra un segmento de memoria que empie a en la localidad 1777A y termina en la 1>>>>A, de )5Q bytes de longitud. %ambi&n se muestra la forma en que un despla amiento de >777A selecciona la localidad 1 >777A

MARIA GUADALUPE TORRES ANDRES

43

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

en el sistema de la memoria. +e ver, que la direccin de despla amiento es la distancia desde el inicio del segmento.

FIGURA 4"9 $odo de direccionamiento en modo real con el empleo de una direccin en el segmento m,s un despla amiento.

El registro de segmento de la figura 5F4, contiene 1777A, con lo que apunta una direccin inicial 17777A. En el modo real, a cada registro de segmento se le agrega un 7A en su e'tremo derecho, para formar una direccin de memoria de 27 bits que le permite colocar el inicio del segmento en casi cualquier localidad dentro del primer $byte de memoria. .or ejemplo, si un segmento de registro contiene una 1277A, direcciona a un segmento de memoria de )5Q bytes que empie a en la localidad 12777A. !simismo, si un registro de segmento contiene una 1271A direcciona a un segmento de memoria que comien a en la localidad 1271A. "ebido al 7A, que se agrega en forma interna,

MARIA GUADALUPE TORRES ANDRES

44

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

los segmentos pueden empe ar en cualquier m-ltiplo de 1) bytes en el sistema de memoria. Este lmite de 1) bytes se le llama un prrafo de memoria. "ebido que aun segmento de memoria a modo real tiene )5Q bytes de longitud, una ve que se conoce la direccin inicial, para encontrar la direccin final se agrega una >>>>A a la direccin inicial. .or ejemplo, si un registro de segmento contiene 3777A, la primera direccin en el segmento es 37777A y la ultima direccin es 37777A J>>>>A o 3>>>>A. En la tabla 5F5 se presentan algunos ejemplos de contenidos de registros de segmentos y las direcciones inicial y final de los segmentos de memoria, seleccionadas por cada direccin de segmento.

TABLA 4"4 9egistros de segmentos y las direcciones inicial y final


R(;0)-%& +( )(;/(,-& 2777A 2177A !877A 1235A D0%(''05, 0,0'0*. 27777A 21777A !8777A 12357A D0%(''05, 40,*. 2>>>>A 27>>>A 8!>>>A 2233>A

:a direccin de despla amiento se suma a la del segmento para ubicar una direccin en el segmento. .or ejemplo, si la direccin de segmento es 1777A y la direccin de despla amiento es 2777A, el microprocesador direcciona la localidad de memoria 12777A. :a direccin del segmento y del despla amiento, a veces, se escribe 1777;2777 para una direccin de segmento de 1777A y un despla amiento de 2777A. R(;0)-%&) +( )(;/(,-& 1 +()<.*E*/0(,-& 0/<.I'0-&) El microprocesador tiene un grupo de reglas que se aplican siempre que se direcciona a la memoria. Estas reglas, que se aplican en el modo real o en el protegido, definen la combinacin de registro de segmento y de despla amiento, que se utili an en ciertos modos de direccionamiento. .or ejemplo, el registro de segmentos de cdigos se emplea siempre con el apuntador de instrucciones para direccionar la siguiente instruccin a ejecutar en un programa. Esta combinacin es #+; *. o #+; E*., seg-n sean el microprocesador y el modo de funcionamiento. El registro de segmento de cdigo define el principio de un segmento de cdigo y el apuntador de instrucciones apunta a la siguiente instruccin dentro del segmento de cdigo a ejecutar por el microprocesador. .or ejemplo, si #+ G 1577A *.BE*. G 1277A,

MARIA GUADALUPE TORRES ANDRES

45

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

El microprocesador busca y lee la siguiente instruccin en la localidad 15777A J1277A o sea 16277A en la memoria. @tro direccionamiento implcito es el de la pila. +e hace referencia a los datos de la pila por medio del segmento de pila y por localidad de la memoria a la cual direcciona el apuntador de la pila <+.BE+.= o el apuntador de base. Esta combinaciones se refieren como ++;+. <++;E+.= o ++;8. <++;E8.=. .or ejemplo, si ++ G 2777A y 8.BE8. G 3777A, el microprocesador direcciona a la localidad 23777A en la memoria del segmento de pila direccionada por el registro 8.BE8.. +e debe tener en cuenta que en el modo real, solo los 1) bits en la e'trema derecha del registro e'tendido direccionan a una localidad dentro del segmento de memoria. ?unca ponga un n-mero mayor que >>>>A en un registro de despla amiento si el microprocesador funciona en el modo real. +i el modo real se direcciona a una memoria mayor que 177777A <7 17>>E>A si esta instalado en sistema A*$E$= ocasionara que el microprocesador interrumpa el programa e indique un error.

+egmentos #+ ++ "+ E+

"espla amiento *. +. o 8. 8U, "*, +* o un n-mero de bits "* para instrucciones para cadenas.

TABLA 4"5 +egmento y despla amiento implcitos del (7()F(72()

En la tabla 5F6 se ilustran otros direccionamientos implcitos para la memoria para microprocesadores (7()F(72(). En la tabla 5F) se muestran los direccionamientos implcitos en los microprocesadores (73() y (75(). +e debe tener en cuenta que los microprocesadores (73() y (75() tienen una seleccin mucho mayor de las combinaciones del segmento y despla amiento que los microprocesadores (7()F(72(). TABLA 4"6 +egmento y despla amientos, implcitos del (73() y (75() S(;/(,&) D()<.*E*/0(,-& 46

MARIA GUADALUPE TORRES ANDRES

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

#+ ++ "+ E+ >+ G+

E*. E+. o E8. E!U, E8U, E#U, E"U, E"*, E+*, un n-mero de ( bits o un n-mero de 32 bits. E"* para instrucciones para cadenas ?o implcito ?o implcito

:os (7()F(72() permiten tener cuatro segmentos de memoriaE el (73() y el (75() permiten tener ) segmentos de memoria. En la figura 5F17 se ilustra un sistema que contiene cuatro segmentos de memoria. +e debe tener en cuenta que los segmentos de memoria pueden tocarse o incluso traslaparse si no se requieren )5Q bytes de memoria para un segmento. .iense que los segmentos son como ventanas que se pueden mover en cualquier superficie de la memoria para accesar a datos o cdigos.

MARIA GUADALUPE TORRES ANDRES

47

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

FIGURA 4"1# Un ejemplo de sistema de memoria y se ilustran cuatro segmentos de memoria.

+upongamos que un programa de aplicacin requiere 1777A bytes de memoria para su cdigo 147A bytes de memoria para sus datos y 277A bytes de memoria de pila. Esta aplicacin no requiere un segmento adicional. #uando el dos coloca este programa en memoria, se carga el %.! en la primera ona disponible encima de los manejadores y otros programas de la %.!. En la figura 5F11 se muestra la forma en que esta aplicacin se almacena en el sistema de memoria. :os segmentos muestran un superposicin o traslape debido a que la cantidad de datos que hay en ellos no requiere de )5Q bytes de memoria, la vista lateral de los segmentos muestran con claridad el traslape y la forma en que los segmentos se pueden despla ar a cualquier parte de la memoria.

MARIA GUADALUPE TORRES ANDRES

48

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

FIGURA 4"11 $apa de memoria de una aplicacin, en que se ilustran segmentos traslapados.

MARIA GUADALUPE TORRES ANDRES

49

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

E. +0%(''0&,*/0(,-& %(.&'*.0E*'0K,

+(

)(;/(,-&

+()<.*E*/0(,-&

<(%/0-(

.*

El sistema de direccionamiento de segmento y despla amiento, permite el cambio de lugar de los programas en el sistema de memoria. Un programa relocali able es el que puede poner en cualquier ona de la memoria y ejecutarlo sin cambio. :os datos relocali ables son los que se pueden colocar en cualquier ona de memoria y utili arlos sin ning-n cambio en el programa. El sistema de direccionamiento de segmento y despla amiento permite relocali ar los programas y los datos si cambiar nada en un programa o datos.

4.6 D0%(''0&,*/0(,-& +( .* /(/&%0* (, /&+& <%&-(;0+& El direccionamiento de la memoria en modo protegido < solo (72(),(73() y (75()= permite acceso a los datos y programas ubicados arriba del primer $byte de memoria. El direccionamiento de esta seccin e'tendida del sistema de memoria <la memoria encima del primer $byte de memoria se denomina memoria e'tendida o U$+=, requiere un cambio en el sistema de direccionamiento de segmento y despla amiento, utili ando con el direccionamiento de la memoria en el modo real. :a diferencia entre los modos de real y protegido esta en la forma en que el registro de segmento accesa el segmento de memoria.

S(.('-&%() 1 +()'%0<-&%() El selector ubicado en el registro del segmento selecciona a uno de los (142 descriptores en la tabla descriptores. El descriptor describe la ubicacin, longitud y derechos de acceso de un segmento de memoria. El registro de segmento, en forma indirecta, todava selecciona un segmento de memoria, pero lo hace en forma directa como en el modo real. +e utili a dos tablas de descriptores con los registros de segmento; una contiene descriptores globales y, la otra, contiene descriptores locales. :os descriptores globales contienen segmentos que se aplican a todos los programas, mientras que los descriptores locales suelen ser e'clusivos de una aplicacin. #ada tabla de descriptores contiene (,142 descriptores con lo cual hay disponible en cualquier momento un total de 1), 3(5 descriptores. "ebido a que un descriptor describe un segmento de memoria, ello permite describir hasta 1), 3(5 segmentos de memoria para cada aplicacin. En la figura 5F12 se muestra el formato de un descriptor para los microprocesadores (72() y (73()B(75(). +e vera que cada descriptor tiene una longitud de ( bytes, con lo cual las tablas de descriptores globales y

MARIA GUADALUPE TORRES ANDRES

5'

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

locales tiene, cada una, una longitud m,'ima de )5Q bytes. :os descriptores para el (72() y los (73()B(75() tienen ligeras diferencias entre s, pero el descriptor (72() es compatible en forma ascendente con los microprocesadores (73() y (75(). :a parte de direccin base del descriptor, se utili a para indicar la ubicacin del inicio del segmento de memoria. En el microprocesador (72(), la direccin de base es una direccin de 25 bits, con lo cual los segmentos pueden empe ar en cualquiera de sus 1)$ bytes de memoria. En el (73() y (75() se utili a una direccin base de 32 bits, que permite que los segmentos que empiecen en cualquiera de las localidades de los 5G bytes de memoria. :a direccin base del descriptor del (72() es compatible hacia arriba con el descriptor del (73()B(75().

FIGURA 4"12 :os formatos del descriptor para los microprocesadores (72()B(75().

El lmite del segmento contiene la -ltima direccin de despla amiento que se encuentre en un segmento. .or ejemplo si un segmento empie a en la localidad de memoria >77777A y termina en la ubicacin >777>>A, la direccin base es >77777A y el lmite es >>A. En el microprocesador (72(), la direccin base es >77777A y el limite es 77>>A. En los microprocesadores (73()B(72() es de 1) bits y el limite para (73()B(75() es de 27 bits. El (72() accesa a los segmentos de memoria que tengan longitud entre 1 byte y )5Q bytes. El (73()B(75() accesan a los segmentos de memoria con longitud desde un byte hasta 1$ byte o desde 5Q bytes hasta 5G bytes. En el descriptor de (73()B(75() hay una caracterstica que no tiene el descriptor del (72(); el bit G de granularidad. +i G G 7, el limite especifica un limite de segmento con longitud entre 1 byte y 1$ byte de longitud. +i G G 1, el valor del limite se multiplica por 5Q bytes. +i G G 1, el limite puede ser cualquier m-ltiplo de 5Q bytes. Esto permite tener una longitud de segmento entre 5Q y 5G bytes, en etapas de 5Q bytes. :a ra n en que esta longitud de segmento sea de )5Q bytes en el (72(), es que la direccin de despla amiento de 1) bits, mientras que la direccin de despla amiento cuando se trabaja con (73()B(75() en modo de protegido, es de 32 bits. Esta direccin de despla amiento de 32 bits permite tener longitudes de segmento de 5G bytes y la direccin de despla amiento de 1) bits, permite tener segmentos de )5Q bytes de longitud.

MARIA GUADALUPE TORRES ANDRES

51

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

El bit !0 en el descriptor de (73()B(75() lo utili a el sistema operativo e indica que el segmento esta disponible <!0 G1= o no disponible <!0 G 7=. El bit " indica la forma en que las instrucciones del (73()B(75() accesan al registro y a los datos de memoria en el modo protegido. +i " G 7, entonces en el (73()B(75() se supone que las instrucciones son de 1) bits, compatibles con los microprocesadores (7()F(72(). Esto significa que las instrucciones emplean direcciones de despla amiento de 1) bits y registros de 1) bits. Este modo, a menudo, se llama modo de instruccin de 1) bits. +i " G 1, entonces en el (73()B(75() supone que las instrucciones son de 32 bits. El modo de instruccin de 32 bits, supone que todos los despla amientos, as como todos los registros, son de 32 bits. El sistema operativo $+"@+ o el .#"@+ requieren que las instrucciones se utilicen siempre en el modo de instruccin de 1) bits. 4.7 F&%/*-&) +( +*-&) En la programacin depende tambi&n de un entendimiento claro de los formatos de datos. En esta seccin se describen los formatos comunes de datos utili ados con la familia microprocesadores (7()F(75(). los datos se presentan como !+#**, 8#", enteros con signo y sin signos de ( bits <un byte=, enteros con signo y sin signo de 32 bits <una palabra= y enteros sin signo y n-meros reales largos y cortos < o n-meros con punto decimal, flotante=. D*-&) ASCII :os datos en cdigo !+#** <+iglas en ingles de cdigo est,ndar Estadounidense para *ntercambio de *nformacin= se suelen utili ar para representar caracteres alfanum&ricos en la memoria de un sistema de computadora. El cdigo !+#** es de / bits y el octavo bit, que es el m,s significativo, se emplea para mantener la paridad en algunos sistemas. En la tabla 5F/ se presentan los caracteres de control de !+#**, junto con una breve descripcin de la funcin de cada cdigo. TABLA 4"7 E: cdigo !+#**
+egundo U7 .rimero 7U 1U 2U 3U ?U: +@A +%U E%U E@% E?W !#Q 8E: 8+ A% :> 0% >> #9 +@ +* U1 U2 U3 U5 U6 U) U/ U4 U( U! U8 U# U" UE U>

":E "#1 "#2 "#3 "#5 ?!Q +Y? E%8 #!? E$ +U8 E+# >+ G+ 9+ U+ +. 7 X 1 K 2 3 Y 5 P 6 Z ) [ / < ( = 4 H ; J E , \ F G . ] B T

MARIA GUADALUPE TORRES ANDRES

52

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

5U 6U )U /U

^ . a p

! _ a q

8 9 b r

# + c s

" % d t

E U e u

> 0 f v

G _ g O

A U h '

* Y i y

R V j

: u l

? I n

@ ` o

=
N

>
m

BCD :a informacin decimal codificada en binario se almacena en forma empacada o no empacada en la memoria. :a informacin 8#" empacada, almacena dos dgitos 8#" por cada byte de memoriaE la 8#" sin empacar almacena un digito de 8#" por cada byte. #on los datos de 8#" los cdigos binarios validos de 5 bits son 7777<7= a 177<4=. En la tabla se muestra algunos n-meros decimales en formatos 8#" empacado y no empacado. TABLA 4"9 "atos de 8#" empacados y sin empacar ?-meros 23 23/ )12 1235 BYTE :os datos se almacenan en dos formas; enteros con signo y sin signo. En la figura 5F1/ se ilustran los formatos de enteros con signo y sin signo de ancho de un byte. :a -nica diferencia entre las formas con signo y sin signo es la ponderacin de la m,'ima posicin de bit hacia la i quierda. En la forma con signo, el bit mas a la i quierda es negativo y en la forma sin signo, es positivo Empacados 77177711 77777717 77117111 77777117 77717717 77717717 77117177 +in empacar 77777717 77777711 77777717 77777711 77777111 77777117 77777771 77777717 77777771 77777717 77777711 77777177

MARIA GUADALUPE TORRES ANDRES

53

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

o sin signo. .or ejemplo un (7A es igual a un valor sin signo de 12( y a un valor con signo de b12(. un (1A es igual a un valor con signo de b12/.
FIGURA 4"17 Enteros de ( bits. <a= Un entero de ( bits sin signoE <b= un entero de ( bits con signo.

!unque los n-meros con signo negativo se representan con el bits de b12( m,'imo a la i quierda, se almacenan en forma de complemento a dos. Este m&todo para evaluar un n-mero con signo <el bit m,'imo a la i quierda de b 12(= es mucho m,s f,cil que el acto de complementar a dos el n-mero para determinar su valor, en especial en donde se emplean calculadoras destinadas a los programadores. +i se desea, se puede hacer uso del complemento a dos para convertir un n-mero negativo a uno positivo a fin de determinar su valor. .ara formar el complemento a dos de un n-mero, se invierte cada bit, y luego se suma un uno al resultado. P*.*9%* Una palabra <1) bits= se forma con 2 bytes de datos. El byte menos significativo se almacena en la localidad de memoria que tenga el numero mas bajo y el byte mas significativo, en la mas alta. En la figura 5F1(<a= se ilustra los valores ponderados de cada bit en una palabra de datos y en la figura 5F1(<b= se ilustran como se almacena un 1235A en la memoria. :a -nica diferencia entre un numero con signo y uno sin signo es el bit de la posicin mas a la i quierda. El numero con signo su ponderacin es negativa y el numero sin signo no es significativa. %ambi&n en este caso el bit mas a la i quierda es el mismo que para los datos de byte, e'cepto que su valor posicional es diferente.

FIGURA 4"18 Enteros de 1) bits. <a= ponderaciones binarias de cada posicin de bit en una palabra de datos de 1) bits. 9ecuerde si el n-mero tiene signo, la ponderacin del bit mas a la i quierda es negativa. <b= Un 1235A almacenado en la memoria, a partir de la ubicacin en 17777A.

D&9.() <*.*9%*)

MARIA GUADALUPE TORRES ANDRES

54

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

El formato de doble palabra se utili a para almacenar n-meros de 32 bits <5 bytes=, que son el producto despu&s de la multiplicacin o el dividendo antes de una divisin. :as dobles palabras tambi&n se utili an en los (73() y (75() para la mayor parte de las operaciones, porque estos microprocesadores m,s modernos funcionan con datos de 32 bits as como datos de ( y 1) bits.

4.8 C&,=2,-& +( 0,)-%2''0&,() En esta seccin se presenta un breve panorama de cada categora general de conjunto de instrucciones de la familia (7()B(7((.

T%*,)4(%(,'0* +( +*-&) El conjunto de instrucciones de la familia (7()B(7(( incluye instrucciones para la transferencia de datos que transfieren bytes, palabras, o dobles palabras de datos entre la memoria y los registros as como el acumulador y los puertos de EB+. :as trasferencias dobles de palabras solo se pueden hacer en el (73() y el (75(). En siguiente la tabla se muestra las instrucciones y caractersticas del mismo. TABLA 4"11 *nstrucciones para transferencia de datos
C5+0;& O<. *? :!A> :E! :"+ :E+ HH:>+ HH:G+ H:++ $@0 F2,'05, $ete datos al acumulador desde un dispositivo de EB+ #arga de banderas en !A #arga de direccin efectiva #arga "+ y registro de 1) bits con los datos de memoria de 32 bits #arga E+ y registro de 1) bits con los datos de memoria de 32 bits #arga >+ y registro de 1) bits con los datos de memoria de 32 bits #arga G+ y registro de 1) bits con los datos de memoria de 32 bits #arga ++ y registro de 1) bits con los datos de memoria de 32 bits #arga byte, palabra o doble palabra

MARIA GUADALUPE TORRES ANDRES

55

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

@U% .@. H.@.! HH.@.!" HH.@." .@.> HH.@.>" .U+.A H.U+A! HH.U+A!" HH.U+A" .U+A> HH.U+A>" +!A> U#AG U:!%

+aca datos del acumulador a un EB+ 9ecupera una palabra de la pila 9ecupera todos los registros de la pila 9ecupera todos los registros de doble pila 9ecupera una palabra doble de la pila 9ecupera los indicadores de la pila 9ecupera los indicadores ampliados de la pila +alva las palabras en la pila +alva todos los registros en la pila +alva todos los registros de dobles palabras en la pila +alva doble palabra en la pila +alva banderas en la pila +alva banderas ampliadas en la pila #arga !A en las banderas *ntercambia bytes, palabras o dobles palabras Emplea !: para entrar a una tabla de conversin

NOTAS? HG instrucciones nuevas para los (71() hasta (75()E HHG instrucciones nuevas para (73() y (75().

A%0-/6-0'* :a familia (7()F(75() puede sumar, restar, multiplicar y dividir datos como bytes, palabras o dobles palabras de datos. +e debe tener en cuenta que las operaciones con dobles palabras solo se emplean para los microprocesadores (73() y (75(). El sistema suma y resta con el empleo de datos con signo o sin signo y datos 8#" o de !+#**. $ultiplica y divide n-meros !+#** con signo o sin signo. ! continuacin se muestra la siguiente tabla de instrucciones aritm&ticas.

MARIA GUADALUPE TORRES ANDRES

56

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

TABLA 4"12 *nstrucciones aritm&ticas


C5+0;& O<. !!! !!" !!$ !!+ !"" !"# #8_ H#"W #$. #_" "!! "!+ "E# "*0 *"*0 *$U: *?# H$@0+U H$@0VU $U: ?EG +88 +U8 F2,'05, !juste !+#** para suma !juste !+#** para divisin !juste !+#** para multiplicacin !juste !+#** para resta +uma de datos entre registros o la memoria y otro registro +uma de datos con la bandera de acarreo #onvierte byte a palabra #onvierte doble palabra a cu,druple palabra #ompara los datos #onvierte palabra a doble palabra !juste decimal de !: despu&s de una suma de 8#" !juste decimal de !: despu&s de una resta de 8#" "ecrementa "ivisin sin signo "ivisin con signo $ultiplicacin con signo *ncrementa #argar, ampliar y poner signo a los datos #argar, ampliar datos con ceros $ultiplicacin sin signo #ambia el signo <lo vuelve negativo= +uma con acarreo 9esta datos entre los registros y la memoria u otro registro

MARIA GUADALUPE TORRES ANDRES

57

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

NOTA? HG estas instrucciones solo aparecen en los microprocesadores (73() y (75().

M*,0<2.*'05, +( 90-) :as instrucciones para manipulacin de bits binarios se utili an para controlar los datos hasta el nivel de bits en la familia de los microprocesadores (7()F (75(). Estas instrucciones incluyen operaciones lgicas, corrimiento y rotaciones. En la siguiente tabla aparece una breve descripcin de cada instruccin y de su cdigo simblico de funcionamiento.

TABLA 4"1! *nstrucciones para manipulacin de bits.


C5+0;& O<. !?" H8+> H8+9 H8% H8%# H8%9 H8%+ ?@% @9 +!9 +A:B+!: HH+A:" +A9 HH+A9" 9#: 9@: 9#9 F2,'05, Y <!?"= lcgica 9astrear bits hacia al frente 9astrear bits hacia atr,s *nstruccin para prueba de bit .robar bit y complementarlo .robar bit y reactivarlo .robar bit y activarlo *nvertir < complemento a uno= @ lgica #orrimiento aritm&tico a la derecha #orrimiento a la i quierda #orrimiento a la i quierda, precisin doble #orrimiento lgico a la derecha #orrimiento lgico a la derecha, doble precisin 9otacin a la i quierda con acarreo 9otacin a la i quierda 9otacin a la derecha con acarreo

MARIA GUADALUPE TORRES ANDRES

58

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

9@9 %E+% U@9

9otacin a la derecha @peracin con el !?" lgico, pero solo afectado banderas @ e'clusivo el

NOTA? H G +olo en los microprocesadores (73() y (75()E HH G solo en microprocesador (75().

I,)-%2''0&,() <*%* '*+(,*) :as instrucciones para cadenas o arreglos se emplean para manipular cadenas de datos en la memoria. #ada cadena consta, ya sea, de bytes o de palabras y tiene hasta )5Q bytes de longitud. En los instrucciones para la cadena se emplean los registros +* y "* para direccionar los datos y el registro #U para contar el numero de bytes o de palabra en que se trabaj. :as instrucciones para las cadenas ocurren una ve salvo que tengan uno de los prefijos 9E., 9E.EB9E.V o 9E.?B9E.?V. +i una instruccin para cadena tiene uno de esos prefijos, se repite el n-mero de veces contenido en el registro de conteo #U. ! continuacin se muestra en la tabla las operaciones para cadenas disponibles en la familia de microprocesadores (7()F(75(). TABLA 4"14 *nstrucciones para cadenas
C5+0;& O<. #$.+ H*?+ :@"+ $@0+ H@U%+ +#!+ +%@+ F2,'05, #omparacin entre memoria y memoria $eter datos del EB+ a la memoria #argar el acumulador $over de memoria a memoria +acar datos de la memoria al espacio de EB+ #omparacin entre la memoria y el acumulador !lmacenar en el acumulador

NOTA? HG estas instrucciones funcionan en los microprocesadores (71()F(75().

T%*,)4(%(,'0* +( <%&;%*/* :as instrucciones para la transferencia de programa incluyen brinco, llamadas <#!::= y para retorno, ya conocidas en el microprocesador (7(6. !dem,s se enumeran algunas instrucciones adicionales para ciclos de programas. En la tabla siguiente se presentan las instrucciones para transferencia de programa.

MARIA GUADALUPE TORRES ANDRES

59

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

TABLA 4"15 *nstrucciones para la transferencia de programa


C5+0;& O<. H8@U?" #!:: HE?%E9 *?% *?% 3 *?%@ *9E% H*9E%" R! R!E R8 R8E R# REBRV RG RGE R: R:E R$. R?# R?EBR?V R?@ R?. 42,'05, .rueba el limite :lama a un procedimiento <subrutina= Entrar al procedimiento *nterrumpir *nterrupcin tipo 3 *nterrumpir por sobreflujo 9etornar de una interrupcin 9etornar de una interrupcin 8rincar si es mayor 8rincar si es mayor o igual 8rincar si es menor 8rincar si es menor o igual 8rincar si hay acarreo 8rincar si es igual o saltar si es cero 8rincar si es mayor que 8rincar si es mayor o igual 8rinca si es menor que 8rinca si es menor o igual 8rinca a otra parte del programa 8rinca si no hay acarreo 8rinca si no es igual o si no es cero 8rinca si no hay desbordamiento 8rinca si no tiene paridad <impar=

MARIA GUADALUPE TORRES ANDRES

6'

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

R?+ R@ R. R+ H:E!0E :@@. H:@@." :@@.E H:@@.E" :@@.?E H:@@.?E" R#UV HRE#VU 9E%

8rinca si no es signo positivo 8rinca si hay desbordamiento 8rinca si hay paridad <par= 8rinca si tiene signo <negativo= !bandona el procedimiento 9epite ciclo #U veces 9epite ciclo E#U veces >ormar ciclo mientras sea igual <#U G contador= 9epite ciclo mientras sea igual <EU# G contador= 9epite ciclo mientras no sea igual <#U G contador= 9epite ciclo mientras no sea igual <E#U G contador= 8rinca si #U es cero 8rinca si E#U es cero 9etorna de un procedimiento <subrutina=

NOTA? H G solo microprocesadores (73() y (75().

C&,-%&. +( <%&'()*+&% :as instrucciones para control del procesador habilitan y deshabilitan las interrupciones, modifican los bits de bandera y sincroni an los eventos e'ternos. En el (72(),(73() y (75() controlan el funcionamiento del sistema en el modo protegido. En la siguiente tabla se presenta un lista de las instrucciones de control del procesador. TABLA 4"16 *nstrucciones de control de procesador
#digo @p. !9.: #:# #:" >uncin !justa grado solicitado de privilegio 8orra bandera de acarreo Aabilitar incremento autom,tico

MARIA GUADALUPE TORRES ANDRES

61

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

#:* #$# #%+ E+# A:% :!9 :G"% :*"% ::"% :$+_ :@#Q :+: :%9 ?@. +G"% +*"% +:"% +$+_ +%# +%" +%* +%9 0E99 0E9_ _!*%

"eshabilitar terminal *?%9 #omplementa bandera de acarreo 8orra bandera de conmutacin tarea *nstruccin para el coprocesador !lto hasta que se reinicialice o e'ista interrupcin #arga derechos de acceso #arga registros de tabla de descriptores globales #arga tabla de registros descriptores de interrupcin #arga tabla de registros descriptores locales #arga registro de estado de la maquina <solo (72()= #ontrola la terminal :@#Q en el (7() y (7(( #arga limite de segmento #arga registro de tarea ?o operacin !lmacena tabla de registros de descriptores globales !lmacena tabla de registros de descriptores interrupcin !lmacena tabla de registros de descriptores locales !lmacena registro de estado de la maquina <solo (72()= !ctiva bandera de acarreo +eleccionar modo de decremento autom,tico Aabilitar interrupciones !lmacenar registro de tarea 0erificar acceso para lectura 0erificar acceso para escritura Espera a que la terminal %E+% G 7

MARIA GUADALUPE TORRES ANDRES

62

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

CAPITULO V PROGRAMACION AL LENGUAJE ENSAMBLADOR


5.1 P%&'()& +( '%(*'05, +( 2, <%&;%*/* .ara la creacin de un programa es necesario seguir cinco pasos; diseDo del algoritmo, codificacin del mismo, su traduccin a lenguaje m,quina, la prueba del programa y la depuracin. :a etapa de diseDo se plantea el problema a resolver y se propone la mejor solucin, creando diagramas esquem,ticos utili ados para el mejor planteamiento de la solucin. :a codificacin del programa consiste en escribir el programa en alg-n lenguaje de programacinE en este caso especfico en ensamblador, tomando como base la solucin propuesta en el paso anterior. :a traduccin al lenguaje m,quina 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. :a prueba del programa consiste en verificar que el programa funcione sin errores, o sea, que haga lo que tiene que hacer. :a -ltima etapa es la eliminacin de las fallas detectadas en el programa durante la fase de prueba. :a correccin de una falla normalmente requiere la repeticin de los pasos comen ando desde el primero o el segundo. .ara crear un programa en ensamblador e'isten dos opciones, la primera es utili ar el $!+$ <$acro !ssembler, de $icrosoft=, y la segunda es utili ar el debugger, en esta primera seccin utili aremos este -ltimo ya que se encuentra en cualquier .# con el sistema operativo $+F"@+, lo cual lo pone al alcance de cualquier usuario que tenga acceso a una m,quina con estas caractersticas. "ebug solo puede crear archivos con e'tensin .#@$, y por las caractersticas de este tipo de programas no pueden ser mayores de )5 Nb, adem,s deben
MARIA GUADALUPE TORRES ANDRES

63

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

comen ar en el despla amiento, offset, o direccin de memoria 7177A dentro del segmento especfico. 5.2 R(;0)-%&) +( .* UCP #omo lo mencionamos en el capitulo 5 la U#. tiene 15 registros internos, cada uno de 1) bits. :os primeros cuatro, !U, 8U, #U, y "U son registros de uso general y tambi&n pueden ser utili ados como registros de ( bits, para utili arlos como tales es necesario referirse a ellos como por ejemplo; !A y !:, que son los bytes alto <high= y bajo <loO= del registro !U. Esta nomenclatura es aplicable tambi&n a los registros 8U, #U y "U. Es posible visuali ar los valores de los registros internos de la U#. utili ando el programa "ebug. .ara empe ar a trabajar con "ebug digite en el prompt de la computadora; #;d] "ebug eEnterf En la siguiente lnea aparecer, un guin, &ste es el indicador del "ebug, en &ste momento se pueden introducir las instrucciones del "ebug. Utili ando el comando; F r eEnterf +e desplegaran todos los contenidos de los registros internos de la U#.E una forma alternativa de mostrarlos es usar el comando MrM utili ando como par,metro el nombre del registro cuyo valor se quiera visuali ar. .or ejemplo; F rb' Esta instruccin desplegar, -nicamente el contenido del registro 8U y cambia el indicador del "ebug de M F M a M ; M Estando as el prompt es posible cambiar el valor del registro que se visuali o tecleando el nuevo valor y a continuacin eEnterf, o se puede dejar el valor anterior presionando eEnterf sin teclear ning-n valor. Es posible cambiar el valor del registro de banderas, as como utili arlo como estructura de control en nuestros programas como se ver, m,s 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; @verfloO

?0 G no hay desbordamientoE @0 G s lo hay

MARIA GUADALUPE TORRES ANDRES

64

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

"irection

U. G hacia adelanteE "? G hacia atr,sE *nterrupts

"* G desactivadasE E* G activadas +ign

.: G positivoE ?G G negativo Vero

?V G no es ceroE V9 G si lo es !u'iliary #arry

?! G no hay acarreo au'iliarE !# G hay acarreo au'iliar .arity

.@ G paridad nonE .E G paridad parE #arry

?# G no hay acarreoE #Y G si lo hay

MARIA GUADALUPE TORRES ANDRES

65

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

5.! L* ()-%2'-2%* +(. (,)*/9.*+&% En el lenguaje ensamblador las lneas de cdigo constan de dos partes, la primera es el nombre de la instruccin que se va a ejecutar y la segunda son los par,metros del comando u operandos. .or ejemplo; add ah bh !qu MaddM es el comando a ejecutar <en &ste caso una adicin= y tanto MahM como MbhM son los par,metros. El nombre de las instrucciones en &ste lenguaje esta formado por dos, tres o cuatro letras. ! estas instrucciones tambi&n se les llama nombres mnemnicos o cdigos de operacin, ya que representan alguna funcin que habr, de reali ar el procesador. E'isten algunos comandos que no requieren par,metros para su operacin, as como otros que requieren solo un par,metro. !lgunas veces se utili aran las instrucciones como sigue; add al,e1/7f :os corchetes en el segundo par,metro nos indican que vamos a trabajar con el contenido de la casilla de memoria n-mero 1/7 y no con el valor 1/7, a esto se le conoce como direccionamiento directo. 5.4 N2()-%& <%0/(% <%&;%*/* 0amos 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 -nicamente en teclear debug eEnterf en el prompt del sistema operativo. .ara ensamblar un programa en el "ebug se utili a el comando MaM <assemble=E cuando se utili a &ste comando se le puede dar como par,metro la direccin donde se desea que se inicie el ensamblado. +i se omite el par,metro el ensamblado se iniciar, en la localidad especificada por #+;*., usualmente 7177A, que es la localidad donde deben iniciar los programas con e'tensin .#@$, y ser, la localidad que utili aremos debido a que debug solo puede crear &ste tipo especfico de programas. !unque en &ste momento no es necesario darle un par,metro al comando MaM es recomendable hacerlo para evitar problemas una ve que se haga uso de los registros #+;*., por lo tanto tecleamos; F a7177 eEnterf

MARIA GUADALUPE TORRES ANDRES

66

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

!l hacer esto aparecer, en la pantalla algo como; 7#18;7177 y el cursor se posiciona a la derecha de &stos n-meros, ntese que los primeros cuatro dgitos <en sistema he'agesimal= pueden ser diferentes, pero los -ltimos cuatro deben ser 7177, ya que es la direccin que indicamos como inicio. !hora podemos introducir las instrucciones; 7#18;7177 mov a',7772E coloca el valor 7772 en el registro a' 7#18;7173 mov b',7775E coloca el valor 7775 en el registro b' 7#18;717) add a',b' Ele adiciona al contenido de a' el contenido de b' 7#18;717( int 27 E provoca la terminacin del programa. 7#18;717! ?o es necesario escribir los comentarios que van despu&s del MEM. Una ve digitado el -ltimo comando, int 27, se le da eEnterf sin escribir nada mas, para volver al prompt del debuger. :a -ltima lnea escrita no es propiamente una instruccin de ensamblador, es una llamada a una interrupcin del sistema operativo, estas interrupciones ser n tratadas m,s a fondo en un captulo posterior, por el momento solo es necesario saber que nos ahorran un gran n-mero de lneas y son muy -tiles para accesar a funciones del sistema operativo. .ara ejecutar el programa que escribimos se utili a el comando MgM, al utili arlo veremos que aparece un mensaje que dice; M.rogram terminated normallyM. ?aturalmente con un mensaje como &ste no podemos estar seguros que el programa haya hecho la suma, pero e'iste una forma sencilla de verificarlo, utili ando el comando MrM del "ebug podemos ver los contenidos de todos los registros del procesador, simplemente teclee; F r eEnterf !parecer, en pantalla cada registro con su respectivo valor actual; !UG777)8UG7775#UG7777"UG7777+.G>>EE8.G7777+*G7777"*G7777 "+G7#18E+G7#18++G7#18#+G7#18*.G717! ?0 U. E* .: ?V ?! .@ ?# 7#18;717! 7> "8 o> E'iste la posibilidad de que los registros contengan valores diferentes, pero !U y 8U deben ser los mismos, ya que son los que acabamos de modificar. @tra forma de ver los valores, mientras se ejecuta el programa es utili ando como par,metro para MgM la direccin donde queremos que termine la ejecucin y muestre los valores de los registros, en &ste caso sera; g17(, esta instruccin ejecuta el programa, se detiene en la direccin 17( y muestra los contenidos de los registros. %ambi&n se puede llevar un seguimiento de lo que pasa en los registros utili ando el comando MtM <trace=, la funcin de &ste comando es ejecutar lnea

MARIA GUADALUPE TORRES ANDRES

67

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

por lnea lo que se ensamblag mostrando cada ve los contenidos de los registros. .ara salir del "ebug se utili a el comando MqM <quit=.

5.5 G2*%+*% 1 '*%;*% <%&;%*/*) ?o sera pr,ctico tener que digitar todo un programa cada ve que se necesite, para evitar eso es posible guardar un programa en el disco, con la enorme ventaja de que ya ensamblado no ser necesario correr de nuevo debug para ejecutarlo. :os 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 he'adecimal. "arle un nombre al programa y e'tensin .oner la longitud del programa en el registro #U @rdenar a "ebug que escriba el programa en el disco. Utili ando como ejemplo el programa del captulo anterior tendremos una idea m,s clara de como llevar &stos pasos; !l terminar de ensamblar el programa se vera as; 7#18;7177 mov a',7772 7#18;7173 mov b',7775 7#18;717) add a',b' 7#18;717( int 27 7#18;717! F h 17a 177 727a 777a F n prueba.com F rc'
MARIA GUADALUPE TORRES ANDRES

68

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

#U 7777 ;777a FO _riting 777! bytes .ara obtener la longitud de un programa se utili a el comando MhM, el cual nos muestra la suma y resta de dos n-meros en he'adecimal. .ara obtener la longitud del nuestro le proporcionamos como par,metros el valor de la direccin final de nuestro programa <17!= y el valor de la direccin inicial <177=. El primer resultado que nos muestra el comando es la suma de los par,metros y el segundo es la resta. El comando MnM nos permite poner un nombre al programa. El comando Mrc'M nos permite cambiar el contenido del registro #U al valor que obtuvimos del tamaDo del archivo con MhM, en &ste caso 777a, ya que nos interesa el resultado de la resta de la direccin inicial a la direccin final. .or -ltimo el comando O escribe nuestro programa en el disco, indic,ndonos cuantos bytes escribi. .ara cargar un archivo ya guardado son necesarios dos pasos; .roporcionar el nombre del archivo que se cargar,. #argarlo utili ando el comando MlM <load=. .ara obtener el resultado correcto de los siguientes pasos es necesario que previamente se haya creado el programa anterior. "entro del "ebug escribimos lo siguiente; F n prueba.com Fl F u 177 174 7#3";7177 8(7277 $@0 !U,7772 7#3";7173 887577 $@0 8U,7775 7#3";717) 71"( !"" !U,8U 7#3";717( #"27 *?% 27

MARIA GUADALUPE TORRES ANDRES

69

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

El -ltimo comando, MuM, se utili a para verificar que el programa se cargag en memoria, lo que hace es desensamblar el cdigo y mostrarlo ya desensamblado. :os par,metros le indican a "ebug desde donde y hasta donde desensamblar. "ebug siempre carga los programas en memoria en la direccin 177A, a menos que se le indique alguna otra.

5.6 C&,+0'0&,()$ '0'.&) 1 9042%'*'0&,() Estas estructuras, o formas de control le dan a la m,quina un cierto grado de decisin basado en la informacin que recibe. :a forma m,s sencilla de comprender &ste tema es por medio de ejemplos. 0amos a crear tres programas que hagan lo mismo; desplegar un n-mero determinado de veces una cadena de caracteres en la pantalla. F a177 7#18;7177 jmp 126 E brinca a la direccin 126A 7#18;7172 eEnterf F e 172 h#adena a visuali ar 16 veces si 7d 7a hYh F a126 7#18;7126 $@0 #U,777> E veces que se desplegar, la cadena 7#18;712( $@0 "U,7172 E copia cadena al registro "U 7#18;7128 $@0 !A,74 E copia valor 74 al registro !A 7#18;712" *?% 21 E despliega cadena 7#18;712> :@@. 712" E si #U]7 brinca a 712" 7#18;7131 *?% 27 E termina el programa. .or medio del comando MeM 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 valor he'adecimal del retorno de carro, un espacio, el valor de lnea nueva y por -ltimo el smbolo hYh
MARIA GUADALUPE TORRES ANDRES

7'

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

que el ensamblador interpreta como final de la cadena. :a interrupcin 21 utili a el valor almacenado en el registro !A 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 "U. :a instruccin :@@. decrementa autom,ticamente el registro #U en uno y si no ha llegado el valor de &ste registro a cero brinca a la casilla indicada como par,metro, lo cual crea un ciclo que se repite el n-mero de veces especificado por el valor de #U. :a interrupcin 27 termina la ejecucin del programa.

@tra forma de reali ar la misma funcin pero sin utili ar el comando :@@. es la siguiente; F a177 7#18;7177 jmp 126 E brinca a la direccin 126A 7#18;7172 eEnterf F e 172 h#adena a visuali ar 16 veces si 7d 7a hYh F a126 7#18;7126 $@0 8U,777> E veces que se desplegar, la cadena 7#18;712( $@0 "U,7172 E copia cadena al registro "U 7#18;7128 $@0 !A,74 E copia valor 74 al registro !A 7#18;712" *?% 21 E despliega cadena 7#18;712> "E# 8U E decrementa en 1 a 8U 7#18;7137 R?V 712" E si 8U es diferente a 7 brinca a 712" 7#18;7132 *?% 27 E termina el programa. En &ste caso se utili a el registro 8U como contador para el programa, y por medio de la instruccin M"E#M se disminuye su valor en 1. :a instruccin MR?VM verifica si el valor de 8 es diferente a 7, esto con base en la bandera ?V, en caso afirmativo brinca hacia la direccin 712". En caso contrario continua la ejecucin normal del programa y por lo tanto se termina. Una ultima variante del programa es utili ando de nuevo a #U como contador, pero en lugar de utili ar :@@. utili aremos decrementos a #U y comparacin de #U a 7.

MARIA GUADALUPE TORRES ANDRES

71

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

F a177 7#18;7177 jmp 126 E brinca a la direccin 126A 7#18;7172 eEnterf F e 172 h#adena a visuali ar 16 veces 7d 7a hYh F a126 7#18;7126 $@0 "U,7172 E copia cadena al registro "U 7#18;712( $@0 #U,777> E veces que se desplegar, la cadena 7#18;7128 $@0 !A,74 E copia valor 74 al registro !A 7#18;712" *?% 21 E despliega cadena 7#18;712> "E# #U E decrementa en 1 a #U 7#18;7137 R#UV 7135 E si #U es igual a 7 brinca a 7135 7#18;7132 R$. 712" E brinca a la direccin 712" 7#18;7135 *?% 27 E termina el programa En &ste ejemplo se usa la instruccin R#UV para controlar la condicin de salto, el significado de tal funcin es; brinca si #UG7 El tipo de control a utili ar depender, de las necesidades de programacin en determinado momento.

I,)-%2''0&,() <*%* '0'.&) El lenguaje ensamblador cuenta con una instruccin muy poderosa que permite la programacin de ciclos finitos, la instruccin :@@.. Esta instruccin trabaja en forma conjunta con el registro contador #U. El formato general de esta instruccin es; $ov #U,?o`0eces Etiqueta; FFFFFFF :oop Etiqueta :a instruccin :@@. ejecuta las instrucciones que se encuentran entre la Etiqueta; y :oop Etiqueta el numero de veces que indique el campo ?o`0eces. .or ejemplo, el siguiente grupo de instrucciones incrementa en 1 el registro !U, esto lo repite 17 veces. $ov #U,17 E17 veces
MARIA GUADALUPE TORRES ANDRES

72

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

@tro; *nc !U E !UG!UJ1 :oop @tro :a instruccin :oop decrementa el registro #U en cada iteracin y se detiene cuando #U es igual a cero. El siguiente programa da un ejemplo m,s ilustrativo; .#@$$E?% H .rograma; :oop.!+$ "escripcin; Este programa calcula la sucesin de >ibonacci para los 17 primeros t&rminos de la serie, utili ando para ello un ciclo controlado por la instruccin :oop. :a sucesin est, formada por n-meros, de modo tal que cada n-mero es la suma de los dos anterioresF Ejemplo; 1,1,2,3,6,(,13,21,35,66.... H .$@"E: tiny .#@"E *nicio; E.unto de entrada al programa $ov !U,7 E!UG7 $ov 8U,1 E8UG1 Estos son los dos primeros elementos 7J1G1 $ov #U,17 E9epetir 17 veces 9epite; $ov "U,!U E"UG!U !dd "U,8U E"UG!UJ8U $ov !U,8U E!van ar !U $ov 8U,"U E!van ar 8U :oop 9epite Esiguiente n-mero $ov !U,5#77h E%erminar programa y salir al "@+ *nt 21h E E?" *nicio E?"

5.7 I,-(%%2<'0&,() Una interrupcin es una instruccin que detiene la ejecucin de un programa para permitir el uso de la U#. a un proceso prioritario. Una ve concluido &ste -ltimo proceso se devuelve el control a la aplicacin anterior. Una interrupcin es un estado en el cual el microprocesador detiene la ejecucin de un programa para atender una peticin especial solicitada por el propio programa o por un dispositivo fsico conectado al microprocesador e'ternamente.

MARIA GUADALUPE TORRES ANDRES

73

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

:as interrupciones fueron creadas para facilitar al programador el acceso a los diferentes dispositivos de la computadora <puertos de comunicaciones, terminales, impresoras, etc.=. .or 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 est,bamos utili ando para permitir el uso del procesador al manejo de la informacin que est, llegando en ese momento. Una ve terminada la transferencia de informacin se reanudan las funciones normales del procesador de palabras. ! continuacin se muestra un ejemplo utili ando la interrupcin para mostrar informacin en pantalla; Utili ando "ebug tecleamos; F a177 2#18;7177 R$. 711" 2#18;7172 eE?%E9f F E 172 hAola, como estas.h 7" 7! hYh F !711" 2#18;711" $@0 "U,7172 2#18;7127 $@0 !A,74 2#18;7122 *?% 21 2#18;7123 *?% 27 En &ste programa la interrupcin 21A manda al monitor la cadena locali ada en la direccin a la que apunta el registro "U. El valor que se le da a !A determina cual de las opciones de la interrupcin 21A ser, utili ada, ya que esta interrupcin cuenta con varias opciones. En lo directo de interrupciones es una de las partes m,s fuertes del lenguaje ensamblador, ya que con ellas es posible controlar eficientemente todos los dispositivos internos y e'ternos de una computadora gracias al completo control que se tiene sobre operaciones de entrada y salida.

MARIA GUADALUPE TORRES ANDRES

74

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

E=('2'05, +( 2,* 0,-(%%2<'05, #uando durante la ejecucin de un programa se produce una interrupcin, el microprocesador reali a los siguientes pasos; 1.F "etiene la ejecucin del programa 2.F !lmacena los registros #+, *. y 8anderas en la pila 3.F $odifica el #+ y el *. para que apunten a la direccin donde se encuentra la rutina de interrupcin. 5.F Ejecuta las instrucciones de la rutina de interrupcin. 6.F 9establece usando la instruccin 9E%* los valores originales de los registros #+, *. y 8anderas. ).F #ontinua con la ejecucin del programa en el punto donde fue interrumpido. :as rutinas se almacenan en la memoria de la computadora cada ve que &sta es iniciali ada, a esto se le conoce como vector de interrupciones. T0<&) +( 0,-(%%2<'0&,() El microprocesador puede atender dos tipos de interrupciones; interrupciones por softOare e interrupciones por hardOare. :as interrupciones por softOare son llamadas desde los programas y son proporcionadas por el sistema operativo <$+F"@+=. E'isten dos tipos de estas; las interrupciones del "@+ y las interrupciones del 8*@+ <8asic *nput @utput +ystem o +istema 8,sico de EntradaB+alida=. Estas interrupciones son invocadas con la instruccin *?% del ensamblador. .or otro lado, las interrupciones por AardOare son proporcionadas por el propio microprocesador y tambi&n e'isten dos tipos; interrupciones por hardOare internas y las interrupciones por hardOare e'ternas. :as interrupciones internas son invocadas por el microprocesador cuando se produce alguna operacin incorrecta, como por ejemplo, un intento de dividir por cero o una transferencia de datos entre registros de diferentes longitudes. :as interrupciones e'ternas son provocadas por los dispositivos perif&ricos conectados al microprocesador. .ara lograr esto, a cada dispositivo perif&rico se le asigna una lnea fsica de interrupcin que lo comunica con el microprocesador por medio de un circuito integrado au'iliar, el cual se conoce como controlador programable de interrupciones <.*#=. :as computadoras basadas en el microprocesador (7()B(7(( cuentan solamente con un .*#, con lo cual pueden proporcionar hasta ( lneas de interrupcin <*9W=, las cuales son llamadas *9W7 a *9W/, por otro lado, las computadoras basadas en el microprocesador (72() y posteriores cuentan con dos chips controladores, con los cuales pueden proporcionar hasta un m,'imo de 1) lneas *9W, las cuales son llamadas *9W7 a *9W16. :a siguiente es una lista de las interrupciones por softOare disponibles por el sistema operativo. *nterrupciones del 8*@+ $anejo de dispositivos perif&ricos

*?% 17A $anejo de la pantalla. *?% 13A $anejo de unidades de disco.

MARIA GUADALUPE TORRES ANDRES

75

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

*?% 15A $anejo de los puertos de comunicaciones<9+232=. *?% 16A $anejo de cinta magn&tica. *?% 1)A $anejo del teclado. *?% 1/A $anejo de la impresora.

$anejo del estado del equipo


*?% 11A +ervicios de la lista de elementos de la computadora. *?% 12A +ervicios para el c,lculo del tamaDo de la memoria.

+ervicios de fecha y hora

*?% 1!A $anejo del reloj.

*mpresin de pantalla

*?% 6A *mpresin de la informacin contenida en la pantalla.

+ervicios especiales

*?% 1(A !ctivacin del lenguaje *nterprete 8asic de la 9@$. *?% 14A !ctivacin de la rutina de arranque de la computadora.

*nterrupciones del "@+


*?% 27A %ermina la ejecucin de un programa. *?% 22A "ireccin de terminacin. Guarda la direccin donde se transfiere el control cuando termina la ejecucin del programa. *?% 23A "ireccin de la interrupcin que se ejecuta cuando se presiona #trlF8reaN. *?% 25A $anejo de errores crticos. *?% 26A :ectura directa de sectores del disco. *?% 2)A Escritura directa de sectores del disco. *?% 2/A %erminar un programa y devolver el control al "@+ sin borrar el programa de la memoria. *?% 21A Esta interrupcin proporciona una gran cantidad de funciones, las cuales deben ser invocadas en conjunto con el registro !A. 1. %erminacin de un programa. 2. Entrada de car,cter con eco. 3. +alida a pantalla. 5. Entrada por el puerto serie. 6. +alida por el puerto serie. ). +alida a la impresora. /. EB+ directa por pantalla. (. Entrada directa de car,cter sin eco. 4. Entrada de car,cter sin eco. 17. 0isuali ar cadenas de caracteres. 11. Entrada desde el teclado. 12. #omprobacin del estado de entrada.

MARIA GUADALUPE TORRES ANDRES

76

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

13. 8orrar registro de entrada. 15. *niciali ar unidad de disco. ! continuacin se mostrar,n algunos programas que utili an llamadas a diferentes interrupciones por softOare tanto del 8*@+ como del "@+. El siguiente programa utili a la funcin 74h de la interrupcin 21 del "@+ para mostrar en la pantalla un mensaje. .#@$$E?% H .rograma; ejem.!+$ "escripcin; *mprime una cadena de caracteres en la pantalla por medio de la funcin 74h de la interrupcin 21h del "@+. H .$@"E: tiny ."!%! $ensaje db h*nterrupciones 21h del "@+h,13,17,hYh .#@"E *nicio; :ea "U,$ensaje $ov !h,74h *nt 21h $ov a',5#77h *nt 21h E?" *nicio E?" El siguiente programa e'hibe dos cadenas de caracteres en la pantalla, pero a diferencia del anterior &ste no regresa al "@+ inmediatamente, espera a que cualquier tecla sea presionada y entonces termina, para ello se utili a la funcin 17h de la interrupcin 1)h del 8*@+. .#@$$E?% H .rograma; ejem1.!+$ "escripcin; *mprime dos cadenas de caracteres en la pantalla por medio de la funcin 74h de la interrupcin 21h del "@+ y despu&s espera a que una tecla sea presionada, esto por medio de la interrupcin 1)h del 8*@+ con la funcin 17h. H .$@"E: tiny ."!%! $ensaje db h$as interrupcionesh,13,17,hYh $ensaje2 db h.resione cualquier tecla...h,13,17,hYh .#@"E *nicio; :ea "U,$ensaje $ov !h,74h *nt 21h :ea "U,$ensaje2 $ov !h,74h

MARIA GUADALUPE TORRES ANDRES

77

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

*nt 21h $ov !h,17h *nt 1)h $ov a',5#77h *nt 21h E?" *nicio E?" #omo -ltimo ejemplo de esta seccin, se mostrar, un programa que utili a otra funcin del 8*@+, pero esta ve para posicionar el cursor en diferentes coordenadas de la pantalla, esto con el fin de tener mejor control sobre el lugar en el que los mensajes son visuali ados. .#@$$E?% H .rograma; ejem3.!+$ "escripcin; *mprime dos cadenas de caracteres en la pantalla, controlando su posicin por medio de la funcin 72h de la *nt 17h del 8*@+. H .$@"E: tiny ."!%! $ensaje db h$as interrupcionesh,13,17,hYh $ensaje2 db h.resione cualquier tecla...h,hYh .#@"E *nicio; $ov 8h,7 E.agina de video 7 $ov dl,37 EUG37 $ov dh,6 EYG6 $ov !h,72h E.osicionar cursor *nt 17h E :ea "U,$ensaje E $ov !h,74h E*mprime $ensaje *nt 21h E $ov 8h,7 E.agina de video $ov dl,57 EUG57 $ov dh,25 EYG25 $ov !h,72h E#olocar cursor *nt 17h E :ea "U,$ensaje2 E $ov !h,74h E*mprimir $ensaje2 *nt 21h E $ov !h,17h EEsperar tecla *nt 1)h E $ov a',5#77h E%erminar programa y salir al "@+ *nt 21h E E?" *nicio E?"

MARIA GUADALUPE TORRES ANDRES

78

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

CAPITULO VI INSTRUCCIONES DE -%*,)4(%(,'0* +( D*-&)


6.1 I,-%&+2''05, En este capitulo se e'plican las instrucciones para transferencia de datos en los (7()F(75(). :as instrucciones para transferencia de datos incluyen $@0, $@0+U, $@0VU, .U+A, .@., 8+_!., U#AG, U:!%, *?, @U%, :E!, :"+, :E+, :>+, :G+, :++, :!A>, +!A> y las instrucciones para cadena $@0+, :@"+, +%@+, *?+, Y @U%+. +e presentan primero las instrucciones para las transferencia de datos porque son los las que se emplean m,s a menudo y son mas f,ciles de entender. El microprocesador requiere un programa ensamblador, que genera lenguaje maquina. En este capitulo se describen la sinta'is y algunos de los directivos del lenguaje ensamblador. 6.2 MOV 1 (. .(,;2*=( /*F20,* En este capitulo se utili a $@0 para presentar las instrucciones en el lenguaje de maquina disponibles para el programador, para varios modos de direccionamiento e instrucciones, se da a conocer el cdigo maquina lo cual es necesario para interpretar programas en lenguaje maquina producidos por un ensamblador. L(,;2*=( /*F20,* El lenguaje maquina es el cdigo binario nativo que entiende el microprocesador y lo utili a en las instrucciones que controlan su funcionamiento. :a longitud de las instrucciones en lenguaje maquina para los (7()F(75() varia entre 1 y 13 bytes.

MARIA GUADALUPE TORRES ANDRES

79

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

:as instrucciones para los (7()F(72() son el modo de 1) bits que tienen la configuracin que se ilustra en la figura )F1<a=.

FIGURA 6"1 :os formatos de las instrucciones para (7()F(75(). <a= la forma de 1) bitsE :a <b= forma de 32 bits.

Estas instrucciones en el modo de 1) bits son compatibles con los microprocesadores (73() y (75(), se supone que todas las instrucciones en el modo de 1) bits cuando la maquina trabaja en el modo real, en el modo protegido, el byte superior del descriptor del (73() y (75() contiene el bit " que selecciona el modo de instruccin de 1) o 32 bits. En esos microprocesadores se utili an tambi&n instrucciones en modo de 32 bits con la configuracin que se ilustra en la figura )F1<b=. Estas instrucciones pueden estar en el modo de instruccin de 1) bits, mediante el empleo de prefijos. :os primeros 2 bytes del formato del modo de instruccin de 32 bits, se llaman prefijos de cambio, porque no siempre est,n presentes. El primer byte modifica el tamaDo de la direccin utili ada por la instruccin y el segundo modifica el tamaDo del registro. El cdigo de instruccin. +elecciona la operacin <suma, resta, transferencia, etc.= que ejecuta el microprocesador. El cdigo de instruccin tiene uno o dos bytes de longitud para las instrucciones en el lenguaje maquina
MARIA GUADALUPE TORRES ANDRES

8'

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

Campo MOD. +elecciona el modo de direccionamiento y si hay despla amiento en el modo seleccionado. En la tabla )F1 se representan las formas de operandos disponibles para el campo $@", para el modo de instruccin de 1) bits en los microprocesadores (7()F(75(). si el campo $@" contiene un 11, selecciona el modo de direccionamiento de registro, en el cual se utili a el campo 9B$ para especificar un registro en lugar de una localidad de memoria. +i el campo $@" contiene 77,71 o 17, el campo 9B$ selecciona uno de los modos de direccionamiento para la memoria de datos. #uando $@" selecciona un direccionamiento para la memoria, indica que el modo de direccionamiento no contiene despla amiento <77=, un despla amiento de ( bits con signo e'tendido <71= o un despla amiento de <17=.

TABLA 6"1 Especificaciones del campo $@" para modo de instruccin de 1) bits.
MOD 77 71 17 11 F2,'05, ?o hay despla amiento "espla amiento e'tendido por signo de ( bits "espla amiento de 1) bits 9B$ es un registro

En los microprocesadores (73()B(75() el campo $@" puede ser el mismo que el de la tabla )F1 o, si el modo de instruccin es de 32 bits, es el de la tabla )F2. el campo $@" se interpreta como seleccionado por el prefijo de cambio de direccin o por el modo de funcionamiento del microprocesador. :a diferencia principal es cuando el campo $@" es un 17. esto hace que el despla amiento de 1) bits se convierta en uno de 32 bits para permitir accesar a cualquier localidad de memoria <5G bytes= en el modo protegido. :os (73() y (75() solo permiten un despla amiento de ( o de 32 bits cuando funcionan en el modo de instruccin de 32 bits. TABLA 6"2 Especificaciones del campo $@" para el modo de instruccin de 32 bits <solo (73()B(75()=
MOD 77 71 17 11 F2,'05, ?o hay despla amiento "espla amiento e'tendido por signo de ( bits "espla amiento de 32bits 9B$ es un registro

Asignaciones de registros. En la tabla )F3 aparecen las asignaciones de registros para el campo 9EG y el campo de 9B_ <$@" G 11=. :as tablas contiene 3 listas de asignaciones de registros; una se emplea cuando el bit

MARIA GUADALUPE TORRES ANDRES

81

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

_ G 7 y las otras dos cuando el bit _ G 1 <palabras o dobles palabras=. +e debe tener en cuenta que los registros de doble palabras solo est,n disponibles en los microprocesadores (73() y (75(). TABLA 6"! !signaciones a reg y 9B$ <cuando $@" G 11=
C5+0;& 777 771 717 711 177 171 117 111 L M # A91-(B !: #: ": 8: !A #A "A 8A L M 1 A<*.*9%*B !U #U "U 8U +. 8. +* "* L M 1 A +&9.( <*.*9%*B E!U EU# E"U E8U E+. E8. E+* E"*

Direccionamiento de la memoria R/M. +i el campo $@" contiene un 77, 71 o 17 el campo 9B$ adquiere un nuevo significado. En la tabla )F5 aparecen los modos de direccionamiento de la memoria que da el campo de 9B$ cuando $@" es 77, 71 o 17 para la instruccin de 1) bits. TABLA 6"4 $odos de direccionamiento de 1) bits de memoria 9B$
'5+0;& 777 771 717 711 177 171 117 111 F2,'05, "+; e8U J +*f "+; e8U J "*f ++; e8. J +*f ++; e8. J "*f "+; e+*f "+; e+*f ++; e8.Hf "+; e8Uf H NOTA; 0&ase $odos de "ireccionamiento en el te'to

Modo especial de direccionamiento. Aay un modo especial de direccionamiento <para las instrucciones de 1) bits= que no aparece en las tablas )F3, )F5 o )F6 y que ocurre siempre que se consultan los datos de la memoria con solo el modo de direccionamiento por despla amiento en las instrucciones de 1) bits. :os ejemplos son $@0 =1'''D>E DL y MOF NUMBEDL. :a primera instruccin transfiere el contenido del registro ": hacia la localidad 1777A de la memoria en el segmentos de datos. :a segunda instruccin transfiere el contenido del registro DL a la localidad ?U$8 del segmento de datos. +iempre que la instruccin tiene un solo despla amiento, el campo $@" es 77 y el campo 9B$ es siempre 117. Esta combinacin por lo general muestra que la instruccin no contiene despla amiento y se utili a el modo de direccionamiento indirecto e8.f sin un despla amiento en el lenguaje de maquina. El ensamblador se encarga de ello porque utili a un despla amiento de ( bits <$@" G 71= de 77A siempre que el modo de direccionamiento e8.f aparece una instruccin. Esto significa que el modo de direccionamiento e8.fse ensambla como e8. J 7f aunque utilice e8.f.

MARIA GUADALUPE TORRES ANDRES

82

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

En la figura )F) se muestra el patrn de bits binarios que se requieren para codificar la instruccin $@0 e1777Af, ": en el lenguaje maquina. +i la persona que traduce esta instruccin simblica al lenguaje de maquina no sabe el modo especial de direccionamiento, la traducir, en forma incorrecta como una instruccin $@0 e8.f,":. En la figura )F/ se ilustra la forma real de la instruccin $@0 e8.f,":.

FIGURA 6"6 Una instruccin $@0e1777Af,": codificada en binario. +e vera que se requieren 2 bytes adicionales para el despla amiento de 1777A.

FIGURA 6"7 :a instruccin $@0e8.f,": codificada en binario requiere un byte de despla amiento de 77Aa fin de que los (7()B(7(( ejecuten esta instruccin.

Modos de direccionamiento de 32 bits. .ara obtener los modos de direccionamiento de 32 bits que hay en los microprocesadores (73() y (75(), se hace trabajar estas maquinas en el modo de instruccin de 32 bits o en el modo de direccionamiento de 32 bits o en el modo de instruccin de 1) bits, con el empleo del prefijo <)/A= de tamaDo de direccin. En la siguiente tabla se muestra la codificacin de 9B$ utili ada para especificar los modos de direccionamiento de 32 bits. TABLA 6"5 $odos de direccionamiento de 32 bits seleccionados por 9B$
C5+0;& 777 F2,'05, "+; =EAG>

MARIA GUADALUPE TORRES ANDRES

83

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

771 717 711 177 171 117 111

"+; =ECG> "+; =EDG> "+; =EBG> +e emplea bit de ndice escalado ++; =EBP.> "+; =ESI> "+; =EDI>

H NOTA? +i los bits de $@" son 77, en este modo de direccionamiento se emplea un despla amiento de 32 bits sin el registro E8.. Es semejante al modo especial de direccionamiento de 1) bits.

6.! PUSHJPOP :as instrucciones .U+A Y .@. son importantes pues almacenan y recuperan datos de la memoria de pila. :*>@ por sus siglas en ingles <ultimo en entrar, primero en salir=. :os microprocesadores (7()F(75() tienen seis formas de instrucciones .U+A y .@.; registro, memoria, inmediata, registro de segmento, banderas y todos los registros. :as formas .U+A y .@. inmediatas y las formas .U+A! y .@.! <todos los registros= no est,n disponibles en los primeros microprocesadores (7()F(7(( pero si en los (72(), (73() y (75(). El direccionamiento por registros permite transferir cualquier registro de 1) bits desde o hacia la pila. En los (73()B(75() los registros e'tendidos de 32 bits y las banderas <E>:!G+= tambi&n se pueden transferirse a y desde la pila. El direccionamiento inmediato permite salvar datos inmediatos dentro de la pila pero no recuperarlos. El direccionamiento por registro de segmento permite salvar o recuperar la pila <#+ se puede salvar pero los datos de la pila no se pueden recuperar hacia #+=. :as banderas se pueden salvar en la pila o recuperar de ella as como el contenido de todos los registros. PUSH :a instruccin push para los (7()F(72(), siempre transfiere 2 bytes de datos a la pila y en los (73() y (75() transfiere 2 o 5 bytes seg-n sean el registro o el tamaDo de la localidad de memoria. :a fuente de datos puede ser cualquier registro interno de 1) o de 32 bits, datos inmediatos, cualquier registro de segmento o 2 bytes cualesquiera de datos de la memoria. %ambi&n hay una instruccin .U+A! que salva el contenido del grupo de registros internos, e'cepto el de segmento de pila, en la pila. :a instruccin .U+A! <salvar todo= salva los registros en la pila en el siguiente orden; !U, #U, "U, 8U, +., 8., +* y "*. El valor de +. salvado en la pila el que haba antes de ejecutar la instruccin. :a instruccin .U+A> <salvar banderas= transfiere el contenido de registros de banderas a la pila. :as instrucciones .U+A!" y .@.!" salvan y recuperan el contenido del grupo de registros de 32 bits que hay en los microprocesadores (73() y (75(). +iempre que se transfieren los datos a la pila, el primer byte de datos <el m,s significativo= se transfieren dentro de la localidad de la memoria del segmento de la pila direccionada por +. b1. El segundo byte de datos <el menos significativo= se transfiere a la localidad en memoria de segmento de pila
MARIA GUADALUPE TORRES ANDRES

84

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

direccionada por +. b2. Una ve se transfieren los datos con .U+A, el contenido del registro decrementa en 2. :o mismo ocurre al transferir una doble palabra, e'cepto que se transfieren 5 bytes a la memoria de pila <primero el byte mas significativo=, entonces el apuntador de la pila se decrementa en 5. :a instruccin .U+A! transfiere todos los registros internos de 1) bits dentro de la pila. Esta instruccin requiere 1) bytes de espacio en la memoria de pila para almacenar los ocho registros de 1) bits. Una ve transferidos todos los registros, el contenido del registro +. se decrementa en 1). :a instruccin .U+A! es muy -til cuando hay que salvar todo el grupo de registros <entorno del microprocesador= de los (72()F(75(). :a instruccin .U+A para los datos inmediatos tiene dos cdigos de operacin diferentes, pero en ambos casos el n-mero inmediato de 1) bits se transfiere hacia adentro de la pila o, si se utili a .U+A", se transfiere un dato inmediato de 32 bits. +i el valor de los datos inmediatos es 77AF>>A, el cdigo es )!AE si los datos son 7177AF>>>>A, es )(A. :a instruccin .U+A ( se ensambla como )!7(A y la instruccin .U+A 1777A se ensambla como )(7717A. En la tabla siguiente se muestra las formas de la instruccin .U+A que incluyen .U+A! y .U+A>.

TABLA 6"7 :as instrucciones .U+A


)0/95.0'* .U+A reg1) .U+A reg32 .U+A mem1) .U+A mem32 .U+A seg .U+A imm( .U+A_ imm1) .U+A" imm32 .U+A! .U+A!" .U+A> .U+A>" E=(/<.& .U+A 8U .U+A E!U .U+A e8Uf .U+A eE!Uf .U+A "+ .U+A 12A .U+A_ 1777A .U+A" 27 .U+A! .U+A!" .U+A> .U+A>" F2,'0&,() 9egistro de 1) bits 9egistro de 32 bits $odo de direccionamiento de 1) bits $odo de direccionamiento de 32 bits #ualquier registro de segmento "atos inmediatos de ( bits "atos inmediatos de 1) bits "atos inmediatos de 32 bits +alva registros de 1) bits +alva registros de 32 bits +alva registros de banderas de 1) bits +alva registros de banderas de 32 bits

NOTA? se requiere (73()B(75() para trabajar con direcciones, registros y datos inmediatos de 32 bits.

POP :a instruccin efect-a a la inversa, las acciones de la instruccin .U+A. :a instruccin .@. transfiere datos de la pila y los carga en los destinos que pueden ser un registro de 1) bits, un registro de segmento o una localidad de 1) bits en la memoria. En los (73()B(75(), .@. tambi&n puede transferir datos de 32 bits de la pila y utili a direcciones de 32 bits. :a instruccin .@. no esta disponible como .@. inmediato.

MARIA GUADALUPE TORRES ANDRES

85

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

:a instruccin .@.> <recuperar las banderas= transfiere un numero de 1) bits de la pila a registro y la .@.>" elimina un numero de 32 bits de la pila y la coloca en el registro e'tendido de banderas. :a instruccin .@.! <recuperar todos= recupera 1) bytes de datos de la pila y los coloca en los registros siguientes en este orden; "*, +*, 8., +., 8U, "U, #U y !U, o sea en el orden inverso al cual los transfiri la instruccin .U+A! a la pila. En los (73()B(75(), una instruccin .@.!" recupera los registros de 32 bits desde la pila. +upngase que se ejecuta una instruccin .@. 8U. El primer byte de datos recuperados de la pila < la localidad de memoria direccionada por +. en el segmento de la pila = se transfiere hacia el registro 8:. El segundo byte se transfiere dela localidad +.J1 de la memoria del segmento de pila se coloca a registro 8A. "espu&s de haber transferido ambos bytes de la pila, el registro +. incrementa en 2. :os cdigos de operacin para la instruccin .@. y todas sus variantes aparecen en la tabla )F(. +e debe tener en cuenta que la instruccin .@. #+ no es valida en el conjunto de instrucciones para el (72(). si se permite que se ejecute una instruccin .@. #+ solo cambia una parte <#+= dela direccin de la siguiente instruccin. Esto hace que la instruccin .@. #+ sea impredecible y, por lo tanto no se permite.

TABLA 6"8 :as instrucciones .@.


S0/95.0'* .@. reg1) .@. reg32 .@. mem1) .@. mem32 .@. +EG .@.! .@.!" .@.> .@.>" E=(/<.& .@. "* .@ E8U .@. _@9" .%9e"*J2f .@. "!%!3 .@. G+ .@.! .@.!" .@.> .@.>" F2,'0&,() 9egistro de 1) bits 9egistro de 32 bits "ireccin de 1) bits en la memoria "ireccin de 32 bits en a memoria #ualquier registro de segmento 9egistros de 1) bits 9egistros de 32 bits 9egistro de bandera de 1) bits 9egistro e'tendido de banderas de 32 bits

NOTA? se requieren (73()B(75() para trabajar con direcciones y registros de 32 bits.

I,0'0*.0E*'05, +( .* <0.* #uando se iniciali a la ona de la pila, se cargan el registro <++= de segmento de la pila y el registro <+.= apuntador de pila. +e acostumbra designar una ona de la memoria como segmento de la pila, para lo cual se carga ++ con la localidad del KfondoL del segmento de la pila. En el lenguaje ensamblador, un segmento de pila se iniciali a como se ilustra en el ejemplo )F1. El primer enunciado determina el inicio del segmento de pila y el -ltimo determina el final del segmento de pila. El ensamblador y el programa ligador colocan la direccin correcta del segmento de pila en ++ y la

MARIA GUADALUPE TORRES ANDRES

86

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

longitud del segmento <parte superior de la pila= en +.. ?o hay necesidad de cargar estos registros en el programa, salvo que se desea cambiar. Un m&todo alterno para definir el segmento de pila se utili a con uno de los modelos de memoria solo en el ensamblador $!+$. En otros ensambladores no se utili a modelos o si se hace, no son e'actamente los mismos que con el $!+$. Este caso <v&ase el ejemplo )F2= la declaracin. +%!#Q seguida por el n-mero de bytes asignados en la pila, define el ,rea de la pila, lo cual es id&ntico al ejemplo anterior. :a declaracin .+%!#Q tambi&n iniciali a a ++ y +.. +i no se especifica la pila con el empleo de uno u otro m&todo, aparecer, una advertencia cuando se encadena el programa. +e puede pasar por alto la advertencia si el tamaDo de la pila es de 12( bytes o menos. El sistema asigna en forma autom,tica <por medio de "@+= una seccin de 12( bytes de la memoria a la pila. E=(/<.& 6"1
7777 7777 7177e TTTT f 7277 +%!#Q`+EG E?"+ +%!#Q`+EG +EG$E?%@ "E .*:! "_ 177A "U. <T=

E=(/<.& 6"2
.$@"E: +$!:: .+%!#Q 277A E *?*#*!:*V!9 %!$!i@ "E .*:!

6.4 C*%;*% .* +0%(''05, (4('-07* Aay ciertos n-meros de instrucciones para cargar la direccin efectiva <:E!= en el conjunto de instrucciones de los microprocesadores (7()F(75(). :a instruccin LEA carga cualquier registro de 1) bits con la direccin determinada por el modo de direccionamiento seleccionado para la instruccin. :as variantes LDS 1 LES cargan cualquier registro de 1) bits con la direccin de despla amiento recuperada de una localidad en la memoria y, luego, cargan a "+ o E+ con una direccin de segmento recuperada de la memoria. En los microprocesadores (73() y (75(), se suman :>+, :G+ Y :+++ al conjunto de instrucciones y se puede seleccionar un registro de 32 bits para un despla amiento de 32 bits de la memoria. En la siguiente tabla se muestran las instrucciones para la carga de la direccin efectiva. TABLA 6"9 :as instrucciones para carga de la memoria efectiva

MARIA GUADALUPE TORRES ANDRES

87

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

S0/95.0'* :E! !U, ?U$8 :E! E!U, ?U$8 :"+ "*, :*+% :"+ E"*, :*+% :E+ 8U, #!% :>+ "*, "!%!1 :G+ +*, "!%!6 :++ +., $E$

F2,'0&,() +e carga !U con la direccin de ?U$8 +e carga E!U con la direccin de ?U$8 +e carga "* y +* con la direccin almacenada en :*+%! +e cargan E"* y "+ con la direccin almacenada en :*+%! +e cargan 8U y E+ con la direccin almacenada en G!% +e cargan "* y >+ con la direccin almacenada en "!%@1 +e cargan +* y G+ con la direccin almacenada en "!%@6 +e cargan +. y ++ con la direccin almacenada en $E$

LEA :a instruccin :E! carga un registro de 1) bits con la direccin de despla amiento de los datos especificada por el operando. #omo se indica en el primer ejemplo dela tabla )F4, la direccin ?U$8 del operando se carga en el registro !U, pero no su contenido. !l comparar :E! con $@0, se observa el siguiente efecto; :E! 8U,e"*f carga la direccin de despla amiento especificada por e"*f <contenido de "*= en el registro 8U. #on $@0 8U, e"*f se cargan en el registro 8U los datos almacenados en localidad de memoria direccionada por e"*f. El directivo >@#E% efect-a la misma funcin que instruccin :E! si el operando es un despla amiento. Ejemplo, $@0 8U, >@#E% :*+%! desempeDa la misma funcin que :E! 8U,:*+%!. !mbas instrucciones cargan la direccin de despla amiento de la localidad :*+%! de la memoria en el registro 8U. LDS$ LES$ LFS$ LGS 1 LSS :as instrucciones :"+, :E+, :>+, :G+ y :++, cargan cualquier registro de 1) o de 32 bits con una direccin de despla amiento y a los registros de segmento "+, E+, >+, G+ o ++ con una direccin de segmento. En estas instrucciones se utili a cualquiera de los modos de direccionamiento de la memoria para accesar a una seccin de memoria de 32 o de 5( bits que contenga el segmento de direccin de despla amiento. En estas instrucciones no se puede emplear el modo de direccionamiento por registro <$@" G 11=. +e debe tener en cuenta que las instrucciones :>+, :G+ y :++ igual que los registros de 32 bits solo est,n disponibles en los microprocesadores (73() y (75().

6.5 T%*)4(%(,'0* +( '*+(,*) +( +*-&) :as instrucciones de transferencia de cadenas de datos son; :@"+, +%@+, $@0+, *?+ y @U%+. #ada una de ellas permite que las transferencias sean un solo byte o palabra o doble palabra, o si se repite, de un bloque de bytes, palabras o dobles palabras. !ntes de describir las instrucciones de trasferencia de cadenas de datos, se e'plicara el funcionamiento del bit " <direccin= del registro de banderas y de "* y +*. L* 9*,+(%* +( +0%(''05,

MARIA GUADALUPE TORRES ANDRES

88

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

:a bandera <"= de direccin selecciona autoincremento <"G7= o autodecremento de los registros "* y +* durante las operaciones de cadenas. :a bandera de direccin solo se utili a con las instrucciones para cadenas. :a instruccin CLD desactiva la bandera "<"G7= y la instruccin STD la activa <"G1=. .or lo tanto, la instruccin #:" selecciona el modo de autoincremento <"G7= y la +%" selecciona el modo de autodecremento <"G1=. #uando una instruccin de cadena transfiere un byte, el contenido de "* yBo el de +* se incrementa o decrementa en 1. si se transfiere una palabra, el contenido de "* yBo el de +* se incrementa o decrementa en 2. :as transferencias de doble palabras hacen que "* o +* incrementen o decrementen en 5. El incremento o decremento es solo en los registros utili ados por la instruccin de cadena. Ejemplo la instruccin +%@+8 utili a el registro "* para direccionar una localidad de memoria. #uando se ejecuta +%@+8, solo incrementa o decrementa "* sin afectar a +*. :o mismo ocurre con :@"+8 que utili a el registro +* para direccionar datos en la memoria. :@"+8 solo incrementa o decrementa a +* sin afectar a "* DI 1 SI "urante la ejecucin de una instruccin de cadena, los accesos a la memoria ocurren por uno o ambos de los registros "* y +*. :a direccin de despla amiento del "* accesa a los datos en el segmento e'tra para todos los datos que lo utili an. :a direccin de despla amiento de +* accesa a los datos, en forma implcita, en el segmento de datos. :a asignacin del segmento +* se puede cambiar con un prefijo de cambio de segmento. :a asignacin del segmento "* es siempre en el segmento adicional cuando se ejecuta una instruccin para cadena. Esta asignacin no se puede cambiar. LODS :a instruccin :@"+ carga !:, !U o E!U con datos almacenados en la direccin de despla amiento dada por +* en el segmento de datos. <se debe tener en cuenta que E!U solo se puede emplear en los (73() y (75()=. "espu&s de cargar a !: con un byte, a !U con una palabra o a E!U con una doble palabra, el contenido de +* se incrementa si " G 7 o se decrementa si " G 1. +e suma o se resta un 1 en +* para una :@"+ de tamaDo de byte, se suma o se resta un 2 para :@"+ de tamaDo de palabra y se suma o se resta un 5 para :@"+ de tamaDo de doble palabra. En la tabla )F17 se representan las formas permitidas de la instruccin :@"+. :a instruccin :@"+8 <carga un byte= hace que se cargue un byte en !:. :a instruccin :@"+_ <carga una palabra= hace que se cargue una palabra en !U. :a instruccin :@"+" <carga una doble palabra= hace que se cargue una doble palabra en E!U. TABLA 6"1# >ormas de la instruccin :@"+
S0/95.0'* :@"+8 :@"+_ F2,'0&,() !: G e+*fE +* G +* JF 1 !U G e+*fE +* G +* JF 2

MARIA GUADALUPE TORRES ANDRES

89

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

:@+" :@"+ :*+% :@"+ "!%!1 :@"+ "!%!5

E!U G e+*fE +* G +* JF 5 !: G e+*fE +* G +* JF 1 <si :*+%! es un byte= !U G e+*fE +* G +* JF 2 <si :*+%! es una palabra= E!U G e+*fE +* G +* JF 5 <si "!%@5 es una doble palabra=

NOTA? si direcciona datos en el segmento de datos en el segmento de datos en forma implcita de :@"+ y las dobles palabras solo se emplean en (73()B(75().

STOS :a instruccin +%@+ almacena !:, !U o E!U en el segmento e'tra en la localidad direccionada por el registro "*. <se debe tener en cuenta que en los (73()B(75() se utili an E!U y dobles palabras=. En la siguiente tabla se representa las formas de instruccin +%@+E a estas al igual que a la :@"+ se puede aDadir una 8, _ o " para transferencias de byte, palabra o doble palabra. :a instruccin +%@+8 <almacena un byte= almacena el byte en !:, en la localidad de memoria del segmento e'tra direccionada por "*. :a instruccin +%@_+ <almacena una palabra= almacena !U en la localidad de memoria del segmento e'tra direccionada por "*. :a instruccin +%@+" <almacena una doble palabra= en la localidad de memoria en el segmento e'tra direccionada por "*. "espu&s de almacenar en byte en <!:=, palabra <!U= o doble palabra <E!U=, se incrementa o decrementa el contenido de "*. TABLA 6"11 >ormas de instruccin +%@+
S0/95.0'* +%@+8 +%@+_ +%@+" +%@+ :*+% +%@+ "!%!1 +%@+ "!%!5 F2,'0&,() e"*f G !:E "* G "* JF 1 e"*f G !UE "* G "* JF 2 e"*f G E!UE "* G "* JF 5 e"*f G !:E "* G "* JF 1 <si :*+%! es un byte= e"*f G !UE "* G "* JF 2 <si "!%@1 es una palabra= e"*f G E!UE "* G "1 JF 5 <si "!%@5 es una doble palabra=

NOTA? "* direcciona los datos en el segmento e'tra y las dobles palabras solo se emplean en (73()B(75().

!O con RE". El prefijo para repetir <9E.= se puede aDadir a cualquier instruccin para transferencia de cadenas de datos e'cepto la instruccin :@"+. El prefijo 9E. hace que #U se decremente en 1 cada ve que se ejecuta la instruccin de cadena. "espu&s de que decrementa #U, se repite la instruccin en cadena. +i #U llega a un valor de 7, se termina la ejecucin de la instruccin y el programa continua con la siguiente instruccin en secuencia. .or tanto, si #U esta cargado con un 177, y se ejecuta una instruccin 9E. +%@+8, el microprocesador repite 177 veces en forma autom,tica la instruccin +%@+8. "ado que el registro "* se autoincrementa o autodecrementa despu&s de que almacena cada dato, la instruccin almacena el contenido de !: en un bloque de memoria, en lugar de hacerlo en un solo byte de memoria.

MARIA GUADALUPE TORRES ANDRES

9'

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

+upngase que hay que cargar con 77A, 17 bytes de datos, en una ona de la memoria llamada <8U>>E9=. Esto se logra con unas serie de 17 instrucciones +%@+8 o con una +%@+8 con prefijo 9E., si #U es 17 al inicio. #on el programa descrito en el ejemplo )F3 se borra la ona de memoria.

E=(/<.& 6"! E iniciali ar a cero un bloque de memoria con el empleo de +%@+ 7777 #5 3E 768# 7775 84 777! 777/ ># 777( 87 77 777! >3 B !! 9 :E+ "*, 8U>>E9 $@0 #U,17 #:" $@0 !:,7 9E. +%@+8 Eobtiene la direccin 8U>>E9 E cargar contador E seleccionar autoincremento E borrar !: E borrar 8U>>E9

Esta breve secuencia de instrucciones direcciona la ona de la memoria con el empleo de la instruccin $@0 "*, >@#E% 8U>>E9. !unque 8U>>E9 esta el segmento e'tra, el ensamblador emplea una direccin de despla amiento para direccionar la memoria. +e debe tener en cuenta que el prefijo 9E. va al principio de la instruccin +%@+8 en lenguaje ensamblador y en lenguaje maquina. En el lenguaje maquina >3A es el prefijo 9E. y !!A es el cdigo de +%@+8. Un m&todo mas r,pido para borrar este bloque de memoria de 17 bytes es con la instruccin +%@+_ con un contador 6. en el ejemplo )F5 se ilustra la misma tarea que en el ejemplo )F3 e'cepto que el contador cambia a un 6 y se repite la instruccin +%@+_ en ve de la instruccin +%@+8. !dem,s tambi&n se utili a el registro !U en ve del !:. E=(/<.& 6"4 E empleo de +%@+_ para borrar una memoria intermedia <8U>>E9= 7777 #5 3E 768# 7775 84 7776 777/ ># 777( 87 77 777! >3 B !8 MOVS :a instruccin m,s -til para la transferencia de cadenas de datos es $@0+ porque transfiere datos de una localidad a otra en la memoria. Esta es la -nica transferencia de memoria a memoria que se permite en los microprocesadores 9 :E+ "*,8U>>E9 $@0 #U, 6 #:" $@0 !U, 7 9E. +%@+_ Eobtiene la direccin 8U>>E9 Ecargar contador E seleccionar autoincremento E borrar !U E borrar 8U>>E9

MARIA GUADALUPE TORRES ANDRES

91

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

(7()F(75(). :a instruccin $@0+ transfiere un byte, palabra o doble palabra desde la localidad del segmento de datos direccionada por +*, a la localidad en el segmento e'tra direccionada por "*. !l igual que en otras instrucciones de cadena, los apuntadores, se autoincrementa o autodecrementa seg-n sea el valor de la bandera de direccin. En la tabla )F12 se presentan todas las formas permisibles de la instruccin $@0+. +e debe tener en cuenta que solo el segmento del operando fuente <+*=, segmento de datos, se puede cambiar, por lo cual se puede utili ar otro segmento. El operando destino <"*= siempre esta en el segmento e'tra. TABLA 6"12 >ormas de la instruccin $@0+
S0/95.0'* $@0+8 $@0+_ $@0+" $@0+ 8Y%E1, 8Y%E2 $@0+ _@9"1, _@9"2 $@0+ "_@9"1,"_@9"2 F2,'0&,() e"*f G e+*fE "* G "* JF 1E +* G +* JF 1 <byte transferido= e"*f G e+*fE "* G "* JF 2E +* G +* JF 2 <palabra transferida= e"*f G e+*fE "* G "* JF 5E +* G +* JF 5 <doble palabra transferida= e"*f G e+*fE "* G "* JF 1E +* G +* JF 1 <si 8Y%E1 y 8Y%E2 son bytes= e"*f G e+*fE "* G "* JF 2E +* G +* JF 2 <si _@9"1 y _@9" son palabras= e"*f G e+*fE "* G "* JF 5E +* G +* JF 5 <si "_@9"1 y "_@9"2 son dobles=

+upngase que el contenido de un arreglo de 177 bytes se debe transferir a otro de 177 bytes se debe transferir a otro de 177 bytes. :a instruccin $@0+8 <transfiere un byte=, con prefijo de repeticin 9E., es ideal para esta tarea, como se ilustra en el ejemplo )F6. E=(/<.& 6"5 Eempleo de la instruccin $@0+ 7777 #5 3E 76#7 9 7775 #6 3) 76#5 9 777( ># 7774 84 77)5 777# >3 B !8 INS :a instruccin *?+ <transfiere una cadena a la entrada=, que no esta disponible en los microprocesadores (7()B(7((, transfiere un byte, palabra o doble palabra de datos de un dispositivo de EB+ hasta la localidad de memoria en el segmento e'tra direccionada por el registro "*. :a direccin de EB+ esta contenida en el registro "U. Esta instruccin es -til para dar entrada a un bloque de datos, directamente a la memoria, desde un dispositivo EB+ e'terno. Una aplicacin transfiere datos de una unidad de disco a la memoria. ! menudo las unidades de disco, se consideran interfaces de EB+ en un sistema de computadora.
MARIA GUADALUPE TORRES ANDRES

:E+ :"+ #:" $@0 9E.

"*, :*+%1 +*, :*+%2 #U, 177 $@0+8

E direccionar :*+%!1 E direccionar :*+%!2 E borrar direccin E cargar contador E transferir 177 bytes

92

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

*?+, igual que las instrucciones para cadenas ya citadas, tiene dos formas b,sicas. :a instruccin *?+8 da entrada a datos de un dispositivo de EB+ de ( bits y los almacena en una localidad de memoria de tamaDoFbyte, direccionada por +*. :a instruccin *?+_ da entrada a datos de EB+ de 1) bits y los almacena en una localidad de memoria de tamaDoFpalabra. :a instruccin *?+" transfiere una doble palabra. Estas instrucciones se pueden repetir con el empleo del prefijo 9E.. Esto permite almacenar un bloque completo de datos de entrada, de un dispositivo EB+, en la memoria. En la tabla )F13 se presentan las formas de la instruccin *?+. TABLA 6"1! >ormas de la instruccin *?+
S0/95.0'* *?+8 *?+_ *?+" *?+ :*+% *?+ "!%!1 *?+ "!%!5 F2,'0&,() e"*f G e"UfE "* G "* JF 1 <byte transferido= e"*f G e"UfE "* G "* JF 2 <palabra transferida= e"*f G e"UfE "* G "* JF 5 <doble palabra transferida= e"*f G e"UfE "* G "* JF 1 <si :*+%! es un byte= e"*f G e"UfE "* G "* JF 2 <si "!%@1 es una palabra= e"*f G e"UfE "* G "* JF 5 <si "!%@5 es una doble palabra=

NOTA? e"Uf indica que "U contiene la direccin del dispositivo de EB+. Estas instrucciones no est,n disponibles en los microprocesadores (7()B(7(( y las dobles palabras solo se emplean en (73()B(75().

En el ejemplo )F) se muestra un programa para transferir 67 bytes de un dispositivo EB+ cuya direccin es 73!#A y almacenar esos datos en el arreglo de memoria :*+%!. El programa asume que los datos est,n disponibles, en el dispositivo de EB+ todo el tiempo. EJEMPLO 6"6
E empleo de 9E. *?+8 para transferir datos de entrada a un arreglo de memoria

7777 7773 777) 777/ 777!

8> 7777 9 8! 73!# ># 84 7732 >3 B )#

$@0 "*, >@#E% :*+%+ $@0 "U, 3!#A #:" $@0 #U,67 9E. *?+8

E direccin arreglo E direcciona EB+ E autoincrementa E cargar conteo E dar entrada a los datos

OUTS :a instruccin @U%+ <transfiere una cadena a la salida=, que no esta disponible en los microprocesadores (7()B(7((, transfiere un byte, palabra o doble palabra de datos de la localidad en la memoria en el segmento de datos direccionada por +*, un dispositivo EB+, direccionado por el registro "U como en el caso de la instruccin *?+. En la tabla )F15 se ilustran las formas de la instruccin @U%+. TABLA 6"14 >ormas de la instruccin @U%+

MARIA GUADALUPE TORRES ANDRES

93

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

S0/95.0'* @U%+8 @U%+_ @U%+" @U%+ :*+% @U%+ "!%!1 @U%+ "!%!5

F2,'0&,() e"Uf G e+*fE +* G +* JF 1 <byte transferido= e"Uf G e+*fE +* G +* JF 2 <palabra transferida= e"Uf G e+*fE +* G +* JF 5 <doble palabra transferida= e"Uf G e+*fE +* G +* JF 1 <si :*+%! es un byte= e"Uf G e+*fE +* G +* JF 2 <si "!%@1 es una palabra= e"Uf G e+*fE +* G +* JF 5 <si "!%@5 es una doble palabra=

NOTA? e"Uf indica que "U contiene la direccin del dispositivo de EB+. Estas instrucciones no est,n disponibles en los microprocesadores (7()B(7(( y las dobles palabras solo se emplean en los (73()B(75().

En el ejemplo )F/ se ilustra un programa breve que transfiere datos de un arreglo de memoria en un dispositivo EB+. Este programa asume que el dispositivo EB+ siempre esta listo para recibir los datos. EJEMPLO 6"7
Eempleo de 9E. @U%+ para transferir datos de salida desde un arreglo de memoria

7777 8E 77)5 9 7773 8! 73!# 777) ># 777/ 84 77)5 777! >3 B )E

$@0 +*, >@#E% !99!Y $@0 "U, 3!#A #:" $@0 #U, 177 9E. @U%+8

E direccionar la matri E direccionar a EB+ E auto incrementa E carga contador

6.6 O-%*) 0,)-%2''0&,() +( -%*,)4(%(,'0* +( +*-&) :as instrucciones descritas en esta seccin son U#AG, :!A>, +!A>, U:!%, *?, @U%, 8+_!., $@0+U Y $@0VU. @CHG :a instruccin de intercambio <U#AG= intercambia el contenido de un registro con el contenido de cualquier otro registro o una localidad de la memoria. :a instruccin U#AG no se puede ejecutar en registros de segmento ni con datos de memoria a memoria. :os intercambios son de tamaDo byte, palabra o doble palabra <solo en (73()B(75()= en la siguiente tabla se ilustra las formas de las instruccin U#AG. TABLA 6"15 >ormas de la instruccin U#AG
S0/95.0'* U#AG reg, reg U#AG reg, mem F2,'0&,() *ntercambia registros de byte, palabra y doble palabra *ntercambia datos en la memoria byte, palabra o doble palabra, con datos del registro.

MARIA GUADALUPE TORRES ANDRES

94

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

NOTA? :as dobles palabras solo se emplean en (73()B(75()

LAHF 1 SAHF :as instrucciones :!A> y +!A> se utili an muy poco porque fueron diseDadas como instrucciones puente. Estas instrucciones permitieron que el softOare del (7(6 <uno de los primeros microprocesadores de ( bits= se tradujera al softOare del (7() con un programa de traduccin. :a instruccin :!A> transfiere los ( bits que est,n mas a la derecha en el registro de bandera, al registro !A. :a instruccin +!A> transfiere al registro !A hacia los ( bits que est,n mas a la derecha en el registro de bandera. @LAT :a instruccin U:!% <traduce= carga en el registro !: a un numero almacenado en una tabla de memoria. Esta instruccin ejecuta la t&cnica de consulta directa a la tabla utili ada para convertir un cdigo en otro. :a instruccin U:!%, primero suma el contenido de !: con 8U para formar una direccin de memoria en el segmento de datos, luego transfiere el contenido de esa direccin a !:. Esta es la -nica instruccin que suma un n-mero de ( bits con un n-mero de 1) bits. EJEMPLO 6"8
Eempleo de U:!% para convertir de 8#" a cdigo de / segmentos

7712 88 7716 "/ IN 1 OUT

777 9 $@0 8U, @>>+E% %!8:E U:!%

Edireccionar tabla

En la tabla )F1) aparecen las formas de instrucciones *? y @U% que efect-an operaciones de EB+. +e debe tener en cuenta que solo el contenido de !:, !U o E!U se transfiere entre el dispositivo de EB+ y el microprocesador. Una instruccin *? transfiere datos de un dispositivo de EB+ a !:, !U o E!UE una instruccin @U% transfiere datos de !:, !U o E!U a un dispositivo de EB+. <se debe tener en cuenta que solo los (73()B(75() contienen E!U=. TABLA 6"16 *nstrucciones *? y @U%
S0/95.0'*) *? !:,p( *? !U,p( *? E!U,p( *? !:,"U *? !U,"U *? E!U,"U @U% p(,!: @U% p(,!U F2,'0&,() "atos de ( bits a !:, del .uerto p( "atos de 1) bits a !U, del .uerto p( "atos de 32 bits a E!U, del .uerto p( "atos de ( bits a !: del .uerto "U "atos de 1) bits a !U del .uerto "U "atos de 32 bits a E!U del .uerto "U +e envan datos de ( bits de !: al puerto p( +e envan datos de 1) bits de !U al puerto p(

MARIA GUADALUPE TORRES ANDRES

95

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

@U% p(,E!U @U% "U,!: @U% "U,!U @U% "U,E!U

+e envan datos de 32 bits de E!U al puerto p( +e envan datos de ( bits de !: al puerto "U +e envan datos de 1) bits de !U al puerto "U +e envan datos de 32 bits de E!U al puerto de "U.

NOTA? p(G n-meros de puerto de ( bits en EB+E "U G direccin de 1) bits del puerto en "U

MOVS@ 1 MOVC@ :as instrucciones $@0+U <transferir y e'tender el signo= y $@0VU <transferir y e'tender el cero= se encuentran en el conjunto de instrucciones en (73() y (75(). Estas instrucciones transfieren datos y al, mismo tiempo los e'tienden por signo o por cero. En la siguiente tabla se ilustran estas instrucciones y algunos ejemplos de cada una.
S0/95.0'* $@0+U reg,reg E=(/<.&) $@0+U #U, 8: $@0+U E#U, !U $@0+U reg,mem $@0+U 8U, "!%! $@0+U E!U, eE"*f $@0VU reg,reg $@0VU "U, !: $@0VU E8., "* $@0VU reg,mem $@0VU "U, "!%!1 $@0VU reg,mem $@0VU E!U, "!%!2 F2,'0&,() #onvierte el contenido de ( bits de 8:, a un n-mero de 1) bits, por e'tensin del signo, en #U #onvierte el contenido de 1) bits de !U en un n-meros de 32 bits, por e'tensin del signo

BSLAP :a instruccin para transferir o KcanjearL bytes <8+_!.= solo esta disponible en el microprocesador (75(). Esta instruccin toma el contenido de cualquier registro de 32 bits y KcanjeaL el primer byte con el cuarto y el segundo con el tercero. .or ejemplo, la instruccin 8+_!. E!U con E!UG 77112233A transfiere los bytes en E!U con lo cual el resultado es E!UG 33221177A. +e debe tener en cuenta que el orden de los cuatro bytes se invierte con esta instruccin. 6.7 P%(40=& <*%* '*/90& +( )(;/(,-&) El prefijo para cambio de segmentos se puede agregar a casi cualquier instruccin para (7()F(75() en cualquier modo de direccionamiento de la memoria, permite al programador cambiar el segmento implcito. El prefijo de cambio de segmento es un byte adicional que se aDade al principio de una instruccin para seleccionar un registro de segmento alterno. #asi las -nicas instrucciones en las que no se emplea un prefijo son *$. y #!::, en las cuales se debe emplear el registro del segmento de cdigo para generar la direccin. El cambio de segmento tambi&n se utili a para seleccionar los segmentos >+ y G+ en los microprocesadores (73() y (75().

MARIA GUADALUPE TORRES ANDRES

96

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

.or ejemplo, la instruccin $@0 !U,e"*f accesa datos del segmento de datos en forma implcita. +i as lo requiere el programa, se puede cambiar el segmento si se pone prefijo a la instruccin. +upngase que los datos est,n en el segmento e'tra en lugar del segmento e'tra en lugar del segmento de datos. +i esta instruccin se cambia a $@0 !U,E+;e"*f se direcciona al segmento e'tra. En la tabla siguiente )F1( se muestran algunas direcciones modificadas que direccionan a segmentos de la memoria que son los implcitos. #ada ve que se emplea un prefijo de cambio de segmento en una instruccin, esta se vuelve un byte mas largo. TABLA 6"18 *nstrucciones que incluyen prefijos para cambio de segmento
S0/95.0'* $@0 !U, "+;e8.f $@0 !U, E+;e8.f $@0 !U, ++;e"*f $@0 !U, #+;e+*f $@0 !U, E+;:*+% :@"+ E+;"!%@ $@0 E!U, >+;"!%@2 $@0 8:, G+;eE#Uf S(;/(,-& *''()* +egmento de datos +egmento e'tra +egmento de pila +egmento de cdigo +egmento e'tra +egmento de datos +egmento >+ +egmento G+ S(;/(,-& ,&%/*. +egmento de pila +egmento de pila +egmento de datos +egmento de datos +egmento de datos +egmento e'tra +egmento de datos +egmento de datos

NOTA? :os segmentos >+ Y G+ solo se pueden utili ar en los (73() y (75()

MARIA GUADALUPE TORRES ANDRES

97

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

CAPITULO VII INSTRUCCIONES ARITM TICAS Y LOGICAS


7.1 I,-%&+2''05, En este capitulo se e'aminan las instrucciones aritm&ticas y lgicas que se encuentran en el conjunto de instrucciones para los procesadores (7()F(75(). :as instrucciones incluyen suma, resta, multiplicacin, divisin, comparacin, negacin, incrementar y decrementar. :as instrucciones lgicas incluyen; !?", @9, @9 e'clusivo, ?@%, corrimientos, rotaciones y la comparacin lgica <%E+%=. %ambi&n se presentan instrucciones para comparacin de cadenas, que se utili an para rastrear datos contenidos en tablas y para comparar secciones de memoria. 7.2 S2/*$ R()-* 1 C&/<*%*'05, E'isten ( instrucciones aritm&ticas b,sicas; !"" <+uma=, +U8 <9esta=, $U: <$ultiplicacin sin signo=, "*0 <"ivisin sin signo=, *$U: <$ultiplicacin con signo=, *"*0 <"ivisin con signo=, *?# <*ncremento unitario= y "E# <"ecremento unitario=. :as instrucciones !"" y +U8 permiten reali ar sumas y restas sencillas y tienen el siguiente formato; !"" "estino, >uente +U8 "estino, >uente E=(/<.&)? !"" !U,8U E!UG!UJ8U !"" !U,17 E!UG!UJ17 +U8 !U,8U E!UG!UF8U +U8 !U,17 E!UG!UF17 En las operaciones de suma y resta el resultado siempre es almacenado en el operando de destino, el cual puede ser un registro o una variable. :as instrucciones *?# y "E# permiten incrementar los contenidos de los registros y de las variables almacenadas en memoria. E=(/<.&)?
MARIA GUADALUPE TORRES ANDRES

98

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

*?# !U E!UG!UJ1 *?# 0!91 E0!91G0!91J1 "E# !U E!UG!UF1 "E# 0!91 E0!91G0!91F1 El siguiente programa muestra la forma de utili ar estas instrucciones b,sicas; .#@$$E?% H .rograma; !ddsub.!+$ "escripcin; Este programa ilustra el uso de las instrucciones !"", +U8, *?# y "E#. H .$@"E: %*?Y ."!%! 0ar1 "_ 17E "eclaracin de una variable de tipo entero E iniciali ada con 17. .#@"E *nicio; E.unto de entrada al programa $ov !U,6 E!UG6 $ov 8U,17 E8UG17 !dd !U,8U E!UG!UJ8U $ov #U,( E#UG( !dd #U,0ar1 E#UG#UJ0ar1 *nc !U E!UG!UJ1 "ec 8U E8UG8UF1 *nc 0ar1 E0ar1G0ar1J1 "ec 0ar1 E0ar1G0ar1F1 $ov !U,5#77h E%erminar programa y salir al "@+ *nt 21h E E?" *nicio E?"

MARIA GUADALUPE TORRES ANDRES

99

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

En la siguiente tabla se muestra las instrucciones para sumar TABLA 7"1 *nstrucciones para sumar
I,)-%2''05, !"" !:, 8: !"" #U,"* !"" E8.,E!U !"" #:, 55A !"" 8U, 36!>A !"" E"U, 12356A !"" e8Uf, !: C&/(,-*%0& !: G !: J 8: #UG #U J "* E8.G E8. J E!U #:G #: J 55A 8UG 8U J 36!>A E"UG E8 J U77712356A +e suma !: al contenido de la localidad con despla amiento en el segmento de datos direccionado por 8U y el resultado se almacena en la misma localidad de la memoria El contenido de la localidad con despla amiento en el segmento de pila direccionada por 8. se suma a #: y el resultado se almacena en #: El contenido de la localidad con despla amiento en el segmento de pila direccionada por E8U, se suma a !: y el resultado se almacena en el !: El contenido de tamaDoFpalabra de la localidad en el segmento de datos direccionada por +* mas 2 se suma a 8U y el resultado se almacena en la misma localidad de memoria El contenido de la localidad %E$. en el segmento de datos se suma a #: y el resultado se almacena en #: El contenido de tamaDoFpalabra de la localidad en el segmento de datos direccionada por %E$. mas "* se suma a 8U y el resultado se almacena en la misma localidad en la memoria El byte de memoria del segmento de datos direccionado

!"" #:, e8.f

!"" !:, eE8Uf

!"" 8U, e+* J 2f

!"" #:, %E$.

!"" 8U, %E$.e"*f

!"" e8U J "*f,":

MARIA GUADALUPE TORRES ANDRES

1''

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

por 8U J "* es la suma de ese byte mas ": !"" 8Y%E .%9 e"*f,3 !grega 3 al contenido de la localidad de la memoria de tamaDo byte, direccionada por "* dentro del segmento de datos

!"" 8U, eE!U J 2HE#Uf :a direccin de la palabra del segmento de memoria de datos por la suma de 2 multiplicado por E#U y E!U se suma a 8U

!G 7 <no hay semiacarreo= +G 7 <resultado es positivo= .G 7 <paridad impar= @G 7 <no hay sobreflujo=

TABLA 7"2 *nstrucciones para la suma con acarreo


I,)-%2''05, !"# !:, !A !"# #U, 8U !"# E8U, E"U !"# e8Uf, "A C&/(,-*%0& !:G !: J !A J carry #UG #U J 8U J carry E8UG E8U J E"U J carry El contenido bytes de la localidad de la memoria en el segmento de datos direccionada por 8U se suma con "A, y el acarreo. El resultado se almacena en la memoria. +e suman 8U y el contenido palabra de la localidad de memoria en el segmento de pila de direccionada por 8. y el resultado se almacena en 8U +e suman con acarreo E#U y el contenido doble palabra de la localidad de la memoria, en el segmento de datos direccionado por E8U y el resultado se almacena en E#U

!"# 8U, e8. J 2f

!"# E#U, eE8Uf

S2/* +( 0,'%(/(,-&. :a suma de incremento < *?#= agrega un 1 aun registro o a una localidad de la memoria. :a instruccin *?# puede sumar un 1 a cualquier registro o localidad de la memoria e'cepto a un registro de segmento. en la siguiente tabla se muestra algunas formas de la instruccin de incremento disponibles en los microprocesadores (7() a (75().

MARIA GUADALUPE TORRES ANDRES

1'1

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

TABLA 7"! *nstrucciones para incremento


I,)-%2''05, *?# 8: *?# +. *?# E!U *?# 8Y%E .%9 e8Uf C&/(,-*%0& 8: G 8: J 1 +. G +. J 1 E!U G E!U J 1 +e incrementa el contenido byte de la localidad de la memoria direccionada por 8U en el segmento de datos +e incrementa el contenido palabra de la localidad de memoria direccionada por +*, en el segmento de datos

*?# "_@9" .%9 e+*f

*?# "_@9" .%9 eE#Uf +e incrementa el contenido doble palabra de la localidad en memoria del segmento de datos direccionada por E#U *?# "!%@ 1 +e incrementa e contenido de "!%@ 1

TABLA 7"4 *nstrucciones para resta


I,)-%2''0&,() +U8 #:, 8: +U8 !U,+. +U8 E#U, E8. +U8 "A, )>A C&/(,-*%0& #: G #: F 8: !U G!U F +. E#U G E#U F E8. "A G "A F )>A

MARIA GUADALUPE TORRES ANDRES

1'2

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

+U8 !U, @####A +U8 E!U, 2356)A +U8 e"*f, #A

!U G !U F @####A E!U G E!UF7772356)A +e resta #A del contenido byte de la localidad de memoria en el segmento de datos direccionada por "* +e resta #A del contenido byte de la localidad de memoria en el segmento de datos direccionada por 8. +e resta de !A el contenido byte de la localidad %E$. de la memoria en el segmentos de datos +e resta de "* los datos de la localidad de memoria , en el segmento de datos, direccionada por %E$. mas 8U +e resta de E#U el contenido doble palabra de la localidad de memoria en el segmento de datos direccionada por "!%@ 1

+U8 #A, e8.f

+U8 e!Af,%E$.

+U8 "*, %E$. e8Uf

+U8 E#U, "!%@ 1

9esta con pr&stamo. Una instruccin de resta con pr&stamo funciona igual que una resta normal, e'cepto que la bandera < # = de acarreo tambi&n se resta la diferencia. El empleo m,s com-n de esta instruccin es para restas con un ancho mayor de 1) bits en los (7()F(72() o de un ancho mayor de 32 bits en los (73() y (75(). :as restas anchas requieren que los pr&stamos se propaguen en la resta. ! continuacin se muestra la siguiente tabla. TABLA 7"5 *nstrucciones para restar con pr&stamo
I,)-%2''05, +88 !A, !: +88 !U, 8U +88 E!U, E8U +88 #:, 3 +88 8Y%E .%9 e"*f,3 C&/(,-*%0& !A G !AF !:F carry !U G !UF 8UF carry E!U G E!UF E8UF carry #: G #:F 3F carry 3 y el acarreo se restan del contenido byte de la localidad en la memoria del segmento de datos direccionada por "* !: y acarreo se restan del contenido byte de la localidad de memoria en el segmento de datos

+88 e"*f, !:

MARIA GUADALUPE TORRES ANDRES

1'3

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

direccionada por "* +88 "*, e8. J 2f +e resta de "* el contenido palabra de la localidad de memoria en el segmento de pila, direccionada por 8. J 2, y el acarreo. +e resta de !: el contenido byte de la localidad en la memoria del segmento de datos direccionada por E8U y E#U

+88 !:, eE8U J E#Uf

TABLA 7"6 *nstrucciones para decrementar


I,)-%2''05, "E# 8A "E# +. "E# E#U "E# 8Y%E .%9 e"*f C&/(,-*%0& 8A G 8AF 1 +. G +.F 1 E#U G E#UF 1 +e decrementa el contenido byte de la localidad de memoria en el segmento de datos direccionada por "* +e decrementa el contenido palabra de la localidad de memoria en el segmento de datos direccionada por 8. +e decrementa el contenido dobles palabras de la localidad de memoria en el segmento de datos direccionada por E8U +e "ecrementa el contenido de la localidad ?U$ en la memoria en el segmento de datos. la forma en que se defina ?U$ determina si es un decremento de byte o de palabra.

"E# _@9" .%9 e8.f

"E# "_@9" .%9 eE8Uf

"E# ?U$

C&/<*%*'05,. :a instruccin <#$.= para comparacin es una resta que solo afecta los bits de bandera. :a comparacin es -til para comprar el contenido de un registro o una localidad de memoria contra otro valor. :a #$. suele ir seguida por una instruccin de brinco <R$.= condicional que prueba las condicin de los bits de bandera. En la tabla /F/ se presentan diversas instrucciones para comparacin.

MARIA GUADALUPE TORRES ANDRES

1'4

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

TABLA 7"7 *nstrucciones para comparacin


I,)-%2''05, #$. #:,8: C&/(,-*%0& 9esta 8: de #:E no cambian 8: ni #:, pero s cambian las banderas 9esta +. de !UE no cambian !U ni +., pero si cambian las banderas 9esta E+* de E+.E no cambian E+. ni E+*, pero si cambian las banderas. 9esta 7####A de !UE no cambia !U, pero si cambian las banderas 9esta #A del contenido de bytes de la localidad de memoria del segmento de datos direccionada por "*E no cambian #A ni la memoria, pero si cambian las banderas 9esta de #:, el contenido byte de la localidad %E$. de memoria en el segmento de datosE no cambian !A ni la memoria, pero si cambian las banderas 9esta de !A, el contenido palabra de la localidad de la memoria en el segmentos de datosE no cambian !A ni la memoria, pero si cambian las banderas 9esta de "*, el contenido palabra de la localidad de la memoria en el segmento de datos direccionada por %E$. J 8UE no lo cambian "* ni la memoria , pero si cambian las banderas

#$. !U,+.

#$. E8.,E+*

#$. !U, 7####A

#$. e"*f,#A

#$. #:, e8.f

#$. !A,%E$.

#$. "*, %E$. e8Uf

MARIA GUADALUPE TORRES ANDRES

1'5

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

#$. !:, eE"* J E+*f

9esta de la localidad de memoria en el segmento de datos direccionada por E"* y E+*E el contenido byte en la memoria del segmento de datosE no cambian !: ni la memoria, pero si cambian las banderas

7.! M2.-0<.0'*'05, .or otro lado, las operaciones de multiplicacin y divisin son un poco m,s complejas de utili ar, esto se debe a que debemos tomar en cuenta el tamaDo de los operandos para no sobrepasar la capacidad de almacenamiento de los registros del microprocesador. E'isten dos instrucciones para la multiplicacin, estas son; $U: e *$U:. $U: permite reali ar operaciones de multiplicacin entre operandos sin signo e *$U: permite reali ar operaciones entre operandos con signo. :a multiplicacin se puede efectuar entre bytes <( bits=, palabras <1) bits= o dobles palabras <32 bits=. +olamente los microprocesadores 3() y posteriores pueden reali ar multiplicaciones entre operandos de 32 bits. El producto de una multiplicacin siempre tiene el doble de ancho. +i se multiplican dos n-meros de ( bits, el resultado ser, de 1) bitsE si se multiplican dos n-meros de 1) bits, el producto ser, de 32 bits y, finalmente, si se multiplican cantidades de 32 bits, el resultado ser, un n-mero de )5 bits. En la multiplicacin de ( bits, con o sin signo, el multiplicando est, siempre en el registro !:. El multiplicador puede ser cualquier registro de ( bits o cualquier variable. El resultado de la multiplicacin se almacena en el registro !U, que es de doble ancho que los operandos involucrados. En la tabla /F( se muestra las instrucciones para la multiplicacin de (,1) y 32 bits. Ejemplos v,lidos de operaciones de multiplicacin son los siguientes; $@0 8:,6 E#argar datos $@0 !:,17 E $U: 8: E !UG!:H8: $@0 !:,17 $U: n-mero1 E !UG!:Hn-mero1 E donde n-mero1 es una variable de tipo byte. En la multiplicacin de 1) bits, el multiplicando debe ser colocado en el registro !U y el resultado siempre aparece en el par de registros "U;!U. El registro "U contiene los 1) bits m,s significativos de producto, mientras que el registro !U contiene los 1) bits menos significativos del resultado. E=(/<.&)? $@0 !U,577 E#argar datos $@0 #U,177 E

MARIA GUADALUPE TORRES ANDRES

1'6

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

$U: #U E "U;!UG!UH#U $@0 !U,577 E $U: numero2 E "U;!UG!UHnumero2 El siguiente programa muestra la forma de utili ar algunas de estas operaciones de multiplicacin en sus diferentes formatos. "ebido a que el ensamblador no cuenta con funciones para imprimir informacin num&rica en la pantalla, no es posible mostrar los resultadosE considere este ejemplo -nicamente con fines ilustrativos. .#@$$E?% H .rograma; $ul.!+$ "escripcin; Este programa ilustra el uso de las instrucciones $U: e *$U:. H .$@"E: %*?Y ."!%! ?U$1 dO 3 ?U$2 db F6 .#@"E *?*#*@; E$U:%*.:*#!#*j? "E ( 8*%+ #@? 9EG*+%9@+ $@0 8A,5 E8AG5 $U: 8A E!UG!:H8A E$U:%*.:*#!#*j? "E 1) 8*%+ $@0 !U,F3 E!UGF3 $U: ?U$1 E"U;!UG!UH?U$2 E$U:%*.:*#!#*j? "E ( 8*%+ #@? 0!9*!8:E+ $@0 !:,3 E!:G3 *$U: ?U$2 E!UG!:H?U$2 $@0 !U,5c77h *?% 21h E?" *?*#*@ E?" TABLA 7"8 *nstrucciones para la multiplicacin de (,1) y 32 bits
M2.-0<.0'*'05, +( 8 90-) I,)-%2''05, $U: #: C&/(,-*%0& +e multiplica !: por #:E esta multiplicacin sin signo deja el producto en !U +e multiplica !: por "AE esta multiplicacin con signo deja el producto en !U

*$U: "A

MARIA GUADALUPE TORRES ANDRES

1'7

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

*$U: 8Y%E .%9 e8Uf

+e multiplica !: por el contenido byte en la localidad de memoria del segmento de datos direccionada por 8UE esta multiplicacin si signo deja el producto en !U +e multiplica !: por el contenido de la localidad %E$. de la memoria en el segmento de datosE si %E$. se define como un n-mero de ( bits, el producto sin signo se encuentra en !U. M2.-0<.0'*'05, +( 16 90-)

$U: %E$.

I,)-%2''05, $U: #U

C&/(,-*%0& +e multiplica !U por #UE el producto sin signo se encuentra en "UF!U +e multiplica !U por "*E el producto con signo se encuentra en "UF!U +e multiplica !U por el contenido palabra de la localidad de memoria en el segmento de datos direccionada por +*E el producto si signo se encuentra en "UF!U M2.-0<.0'*'05, +( !2 90-)

*$U: "*

$U: _@9" .%9 e+*f

I,)-%2''05, $U: E#U

C&/(,-*%0& +e multiplica E!U por E#UE el producto sin signo se encuentra en E"UFE!U +e multiplica E!U por E"*E el producto con signo se encuentra en E"UFE!U +e multiplica E!U por el contenido palabra de la localidad de memoria en el segmento de datos direccionada por E#UE el producto si signo se encuentra en E"UFE!U

*$U: E"*

$U: _@9" .%9 eE#Uf

7.4 D070)05, :as instrucciones para divisin permiten reali ar divisiones de (, 1) o 32 bits <esta -ltima slo est, disponible en los microprocesadores 3() y posteriores=. :os operandos pueden ser n-meros con signo <*"*0= o n-meros sin signo <"*0=. El dividendo siempre tiene el doble de ancho que el operando divisor. Esto significa que en una divisin de ( bits se divide un n-mero de 1) bits entre uno de (E en una de 1) bits se divide un n-mero de 32 bits entre uno de 1), etc. En la divisin de ( bits, el dividendo es almacenado en el registro !U y el divisor puede ser cualquier registro de ( bits o cualquier variable declarada de tipo byte. "espu&s de la divisin, el cociente es cargado en el registro !: y el

MARIA GUADALUPE TORRES ANDRES

1'8

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

residuo en el registro !A. En la tabla /F4 se muestran las instrucciones para divisin de (, 1) y 32 bits. Ejemplo de divisin sin signo; $@0 !U,17 $@0 8:,6 "*0 8: Ejemplo de divisin con signo; $@0 !:,F17 $@0 8:,2 #8_ *"*0 8: En este -ltimo ejemplo, el dividendo es cargado en el registro !:, pero debido a las reglas del microprocesador el dividendo debe ser de 1) bitsE para lograr esto, se utili a una instruccin especial. :a instruccin #8_ <convertir byte a palabra= permite convertir un n-mero de ( bits con signo en !: en un n-mero de 1) bits con signo en !U. En la divisin de 1) bits se siguen las mismas reglas que en la divisin de ( bits, slo que en &sta, el dividendo se encuentra en los registro "U;!U. "espu&s de la divisin el cociente es almacenado en el registro !U y el residuo en el registro "U. En el caso de la divisin con signo, e'iste una instruccin que permite convertir un n-mero con signo de 1) bits en !U en un n-mero con signo de 32 bits en "U;!U. El siguiente programa muestra la forma de utili ar algunas de estas operaciones de divisin en sus diferentes formatos. "ebido a que el ensamblador no cuenta con funciones para imprimir informacin num&rica en la pantalla, no es posible mostrar los resultadosE considere este ejemplo -nicamente con fines ilustrativos. .#@$$E?% H .rograma; "iv.!+$ "escripcin; Este programa ilustra el uso de las instrucciones "*0 e *"*0. H .$@"E: %*?Y ."!%! ?U$1 db 3 ?U$2 db F6 .#@"E *?*#*@; E*?*#*@ "E: .9@G9!$! $@0 !U,177 E!UG177 $@0 8A,17 E8AG17 "*0 8A E"*0*+*@? "E ( 8*%+ +*? +*G?@ $@0 !U,177 E!UG177 "*0 ?U$1 E"*0*+*@? "E ( 8*%+ +*? +*G?@ #@? 0!9*!8:E+ $@0 !:,F17 E!UGF17 #8_ EEU%E?+*j? "E +*G?@ ! 1) 8*%+

MARIA GUADALUPE TORRES ANDRES

1'9

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

*"*0 num2 E"*0*+*@? "E ( 8*%+ #@? +*G?@ $@0 !U,5c77h E>*? "E: .9@G9!$! *?% 21h E E?" *?*#*@ E?" TABLA 7"9 *nstrucciones para divisin de (, 1) y 32 bits
D070)05, +( 8 90-) I,)-%2''05, "*0 #: C&/(,-*%0& +e divide !U entre #:, el cociente sin signo se encuentra en !: y el residuo en !A +e divide !U entre 8:E el cociente con signo esta en !: y el residuo en !A +e divide !U entre el contenido de bytes de la localidad en la memoria en el segmento de pila direccionada por 8.E el cociente sin signo se encuentra en !: y el residuo en !A. D070)05, +( 16 90-) I,)-%2''05, "*0 #U C&/(,-*%0& +e divide "UF!U entre #UE el cociente sin signo esta en !U y el residuo en "U +e divide "UF!U entre +*E el cociente con signo esta en !U y el residuo en "U +e divide "UF!U entre el contenido de palabras en la localidad ?U$ de la memoria en el segmento de datosE el cociente sin signo esta en !U y el residuo esta en "U. D070)05, +( !2 90-) I,)-%2''05, "*0 E#U C&/(,-*%0& +e divide E"UFE!U entre E#UE el cociente sin signo esta en E!U y el residuo, en E"U +e divide E"UFE!U entre el contenido doble palabra en la localidad "!%@2 de la memoria en el segmento de datosE el cociente sin signo esta en E!U y el residuo esta E"U +e divide E"UFE!U entre el contenido doble palabra de la localidad en la memoria del segmento de datos direccionada por E"*E el cociente con signo esta en E!U y el residuo esta en E"U

*"*0 8:

"*0 8Y%E .%9 e8.f

*"*0 +*

"*0 ?U$8

"*0 "!%@2

$U: _@9" .%9 eE#Uf

MARIA GUADALUPE TORRES ANDRES

11'

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

7.5 I,)-%2''0&,() .5;0'*) 9G)0'*) El microprocesador (7() cuenta con un grupo de instrucciones lgicas que operan a nivel de bit, estas instrucciones son; !?", @9, U@9 y ?@%. ! continuacin se muestran las tablas de verdad de estas instrucciones;

:as instrucciones que se enlistan antes requieren dos operandos, a e'cepcin de la operacin ?@% que slo requiere uno. En la figura se puede observar que para la operacin !?", si los dos operandos son 1, el resultado ser, 1, en cualquier otra situacin ser, 7. :a operacin @9 establece el resultado a 1 si cualquiera de los dos operandos es 1, de lo contrario el resultado ser, 7. :a instruccin U@9 coloca en 7 el resultado si los operandos son iguales, de lo contrario establece 1. >inalmente, la instruccin ?@% cambia de estado todos los bits del operando, los unos por ceros y los ceros por unos. :a principal aplicacin de estas instrucciones es el enmascaramiento de informacin. :a operacin !?" nos permite poner a cero cualquier bit de un datoE la operacin @9 nos permite poner a uno cualquier bit de un dato y la operacin U@9 permite borrar el contenido de alg-n registro o localidad de memoria, as como para negar alg-n bit.

MARIA GUADALUPE TORRES ANDRES

111

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

El siguiente programa muestra la forma de utili ar estas instrucciones; .#@$$E?% H .rograma; !nd @r.!+$ "escripcin; Este programa ilustra el uso de las instrucciones !?", @9, U@9 y ?@%. H .$@"E: %*?Y ."!%! $ascara1 db 11111117b $ascara2 db 77777771b "ato1 db 11111111b "ato2 db 77777777b .#!"E *?*#*@; $ov c',7777h E#UG7E $ov al,dato1 EalGdato1 !nd al,mascara1 EalGal and mascara1 $ov ah,dato2 EahGdato2 @r ah,mascara2 EahGah or mascara2 Uor b',b' Eb'G7 ?ot c' Ec'Gnot c' $ov a',5c77h *nt 21h E?" *?*#*@ E?" El programa del listado ( declara cuatro variables de tipo byte; $ascara1, $ascara2, "ato1 y "ato2E despu&s iniciali a #UG77h, !lG>>h, !hG77hE al aplicar una operacin and de >>h y >Eh, el resultado es >Eh, en otras palabras, se apag el bit menos significativo de alE la siguiente operacin es un @9 entre 77 y 71, lo cual da como resultado que se encienda el bit menos significativo del !h, el resultado es 71. :a siguiente operacin es U@9 8U,8U, la cual al ser aplicada sobre el mismo operando da como resultado que dicho operando sea borrado. .or ultimo, la operacin ?@% #U cambia todos los bits de 7 a 1 y viceversa, por lo cual #UG11h. 7.6 R&-*'0&,() 1 C&%%0/0(,-&) I,)-%2''0&,() +( %&-*'05, 1 +()<.*E*/0(,-& El microprocesador cuenta con un conjunto de instrucciones que permiten la manipulacin de las posiciones individuales de los bits dentro de un registro o localidad de memoria, estas instrucciones se encuentran divididas en dos grupos; instrucciones de rotacin e instrucciones de despla amiento <tambi&n conocidas como instrucciones para corrimientos=. :as instrucciones para rotacin son cuatro y nos permiten mover de forma

MARIA GUADALUPE TORRES ANDRES

112

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

cclica los bits que forman parte de un registro o localidad de memoria, estas instrucciones son 9@:, 9@9, 9#: , 9#9. 9@: y 9@9 funcionan de forma muy semejanteE al ejecutar una instruccin 9@:, el bit m,s significativo del dato es despla ado hacia la bandera de acarreo y tambi&n hacia la posicin del bit memos significativo, por lo cual todos los bits restantes son rotados o movidos hacia la i quierda. :a instruccin 9@9 funciona igual, slo que &sta trabaja hacia la derecha. :as instrucciones 9#: y 9#9 permiten la rotacin de los bits de una localidad de memoria o registro, considerando tambi&n el contenido de la bandera de acarreo. En el caso de 9#:, el bit m,s significativo pasa hacia la bandera de acarreo, el bit que se encontraba en la bandera de acarreo pasa al bit menos significativo y finalmente los bits restantes son rotados hacia la i quierda. :a instruccin 9#9 funciona igual, pero aplica su rotacin hacia la derecha. En la tabla /F17 se muestra algunas instrucciones para rotacin. .ara ilustrar el uso de estas instrucciones, tomaremos como ejemplo la instruccin 9@: <9otacin a la i quierda=. :as instrucciones de rotacin y despla amiento tienen diferentes formas de utili arse dependiendo del modelo del microprocesador, los siguientes ejemplos muestran estas formas; En el microprocesador (7() e'isten dos formas, con contador implcito y con contador e'plcito. :a forma con contador implcito se utili a para reali ar una sola rotacin a la ve y tiene el siguiente formato; 9@: !U,1 E9otar !U un bit :a forma con contador e'plcito se utili a para reali ar rotaciones n veces sobre un registro o localidad de memoria; $@0 #:,3 E?-mero de rotaciones 9@: !U,#: E 9otar !U 3 veces En el microprocesador (73() y superiores e'iste una variante de contador implcito, la cual nos permite establecer el contador directamente como un operando, su forma es la siguiente; 9@: !U,3 E 9otar !U 3 veces, slo en (73() y posteriores TABLA 7"1# *nstrucciones de para rotacin
I,)-%2''05, 9@: +*,5 9#: 8:, ) 9@: E#U, 1( C&/(,-*%0& +* rota 5 lugares a la i quierda 8: rota a la i quierda, ) lugares E#U rota 1( lugares a la i quierda

MARIA GUADALUPE TORRES ANDRES

113

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

9#9 !A, #: 9@9 _@9" .%9 e8.f,2

!A rota a la derecha el numero de lugares contenido en #: El contenido palabra de la localidad de memoria en el segmento de pila direccionada por 8. rota 2 lugares a la derecha

NOTA? En los microprocesadores (7()B(7(( solo se puede emplear un conteo de 1 de rotacin inmediata.

I,)-%2''0&,() +( '&%%0/0(,-&) En el caso de las instrucciones de despla amiento, tambi&n e'isten cuatro; +A:, +A9, +!:, +!9. +A: y +A9 se utili an para despla ar los bits de un registro o localidad de memoria, sin considerar el signo de su contenido. +!: y +!9 se utili an para despla ar los bits de un registro o localidad de memoria, considerando su contenido como una cantidad con signo. :as instrucciones +A: y +A9 funcionan de forma id&ntica, slo que en sentidos opuestos. :a instruccin +A: inserta un 7 en la posicin del bit menos significativo y despla a todos los dem,s bits una posicin hacia la i quierda, colocando el bit m,s significativo en la bandera de acarreo. :a instruccin +A9 inserta un 7 en la posicin m,s significativa, despla a todos los bit una posicin hacia la derecha y finalmente coloca el bit menos significativo en la bandera de acarreo. En la tabla /F11 se muestra las instrucciones de corrimiento. !lgunos ejemplos de su uso son los siguientes; +A: !U,1 E "espla a el contenido de !U una posicin a la i quierda $@0 #U,3 E ?-mero de veces +A9 !U,#: E "espla a !U 3 veces hacia la derecha +A: 8U,5 E "espla a 8U 5 veces hacia la i quierda, slo en 3() y posteriores :as dos instrucciones restantes +!: y +!9 son muy parecidas a las instrucciones +A: y +A9, slo que estas dos instrucciones consideran el contenido de los registros como cantidades con signo, por lo cual el bit en la posicin m,s significativa del dato <bit de signo= se conserva sin cambio. El siguiente ejemplo muestra el uso de las instrucciones de rotacin y despla amiento. #@$$E?% H .rograma; 9ota.!+$ "escripcin; Este programa ilustra el uso de las instrucciones de rotacin y despla amiento.
MARIA GUADALUPE TORRES ANDRES

114

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

H .$@"E: %*?Y ."!%! dato1 dO 17 E variable de tipo entero .#@"E *?*#*@; E .unto de entrada al programa mov a',1 E !UG1 mov b',17 E 8UG17 shl a',1 E a'Ga'H2 mov c',3 E contador igual a 3 shl a',cl E a'Ga'H( shr b',1 E b'Gb'B2 mov c',2 E shr b',cl E b'Gb'B5 shl dato1,1 E dato1Gdato1H2 mov a',1 E a'G1 rol a',1 E rotar a' 1 ve mov b',F17 E b'GF17 sal b',1 E b'Gb'H2 mov a',5c77h E %erminar int 21h E +alir al dos E?" *?*#*@ E?" TABLA 7"11 *nstrucciones para corrimiento
I,)-%2''0&,() +A: !U,1 +A9 8U,12 +A9 E#U,17 +!: "!%!1,#: +!9 +*, 2 +!9 E"U, 15 C&/(,-*%0&) Aace el corrimiento lgico de !U un lugar a la i quierda Aace el corrimiento lgico de 8U 12 lugares a la derecha Aace el corrimiento lgico E#U 17 lugares a la derecha Aace el corrimiento aritm&tico de "!%@1, en el segmento de datos, a la i quierda del numero de lugares contenido #: Aace el corrimiento aritm&tico de +* 2 lugares a la derecha Aace el corrimiento aritm&tico de E"U15 lugares a la derecha.

NOTA? En los microprocesadores (7() y (7(( solo se permite un conteo de 1 de corrimiento inmediato.

7.7 C&/<*%*'0&,() (, '*+(,*) En esta secciones se describen instrucciones adicionales para cadena que permiten probar una seccin de memoria contra una constante o de otra

MARIA GUADALUPE TORRES ANDRES

115

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

seccin de la memoria. .ara lograr estas tareas, se utili an las instrucciones +#!+ <rastrear cadena= o #$.+ <comparar cadena= SCAS :a instruccin para rastrear cadena <+#!+= compara el registro !: con un bloque de bytes de memoria, al registro !U con un bloque de palabras de la memoria , o al registro E!U <solo (73() y (75()= con un bloque de bloques de palabras de memoria. :a instruccin +#!+ resta la localidad de memoria de !:, !U, o E!U sin alterar ni el registro ni la localidad de la memoria. El cdigo de operacin utili ado para la operacin utili ado para la comparacin de bytes es +#!+8, para la comparacin de palabras es +#!+_ y el utili ado para la comparacin de dobles palabras es +#!+". En todos los casos, el contenido de la localidad de memoria es direccionado por "*, en el segmento e'tra, se compara con !:, !U o E!U. En +#!+, igual que en las otras instrucciones para cadena, se emplea la bandera de sentido <"= para seleccionar incremento o decremento autom,ticos para "*. %ambi&n repiten si tienen un prefijo condicional para repeticin.

E=(/<.& 7"1 7777 7773 7775 777/ 7774 8> 7711 9 ># 84 77)5 32 #7 >2B!E $@0 "*,@>>+E% 8:@WUE E direccionar datos #:" E autoincremento $@0 #U,177 E cargar contador U@9 !:, !: E borrar !: 9E.?E +#!+8 E buscar

+upngase que hay una seccin de memoria de 177 bytes de longitud y que empie a en la localidad 8:@WUE. Aay que probar esta seccin de la memoria para determinar en alguna de sus localidades hay un 77A. En el ejemplo /F1 se muestra la forma de rastrear esta parte de la memoria en busca de un 77A con la instruccin +#!+8. En este caso, la instruccin +#!+8 lleva el prefijo 9E.?E <repetir mientras no se igual=. El prefijo 9E.?E hace que la instruccin +#!+8 se repita hasta que, ya sea que el registro #U sea cero o hasta que haya una condicin de igualdad como resultado de la comparacin con la instruccin +#!+8. @tro prefijo condicional es 9E.E <repetir si es igual=. #on cualquiera de los prefijos de repeticin, el contenido de #U se "ecrementa sin alterar los bits de bandera. :a instruccin +#!+8 cambia las banderas. E=(/<.& 7"2 7777 7777 ># 7771 84 7177 7775 87 27 @$*%E .9@# >!9 #:" $@0 #U, 26) $@0 !:, 27A E autoincremento Econtador E obtener espacio

MARIA GUADALUPE TORRES ANDRES

116

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

777) >3B!E 777( #8 9E% 7774

9E.E +#!+8 @$*%E E?".

E buscar

+e desarrolla un programa que salte los espacios codificados en !+#** en un arreglo de memoria. Esta tarea se describe en el ejemplo /F2, en este procedimiento el registro "* ya direcciona a la cadena de caracteres en cdigo !+#** y la longitud de la cadena es de 26) bytes o menos. "ebido a que este programa es para saltar espacios <27A=, se utili a el prefijo 9E.E <repetir si es igual= con la instruccin +#!+8, la cual repite la comparacin, buscando un 27A, mientras e'ista la condicin de igualdad CMPS :a instruccin comparar cadena <#.$+= siempre compara dos secciones de datos en la memoria como bytes <#$.+8=, palabras <#$.+_= o como dobles palabras <#$.+"=. +e debe tener en cuenta que las dobles palabras solo se pueden usar en los (73() y (75(). El contenido de la localidad del segmento de datos direccionada por +* se compara con el contenido de la localidad en el segmento e'tra direccionada por "*. :a instruccin #$.+ incrementa o decrementa a +* y a "*. :a instruccin #$.+, por lo general, se utili a con un prefijo 9E.E o uno 9E.?E. :as alternativas de esos prefijos son 9E.V <9epetir mientras sea cero= o 9E.?V <repetir aunque no sea cero=. E=(/<.& 7"! 7777 7777 7773 777) 777/ 777! 777# 777" $!%#A 8E 77/6 9 8> 77/> 9 ># 84 777! >3B!) #8 .9@# $@0 $@0 #:" $@0, 9E.E 9E% >!9 +*,@>>+E% :*?E! Edireccionar :*?E! "*,@>>+E% %!8:! Edireccionar %!8:! Eincremento autom,tico #U, 17 E contador #$.+8 E buscar

$!%#A E?".

En el ejemplo anterior se ilustra un procedimiento breve para comparar dos secciones de memoria en busca de igualdad. :a instruccin #$.+8 lleva el prefijo 9E.E. Esto hace que la b-squeda contin-e mientras haya una condicin de igualdad. #uando el registro #U se vuelve 7, o si hay una condicin de desigualdad, la instruccin #$.+8 detiene la ejecucin. +i #U no es cero o las banderas indican una condicin las dos cadenas concuerdan. +i #U no es cero o las banderas indican una condicin de igualdad, las cadenas no concuerdan.

MARIA GUADALUPE TORRES ANDRES

117

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

AP NDICE A MACROS

D(40,0'05, Una de las principales desventajas de la programacin en lenguaje ensamblador es la repeticin constante de ciertos grupos de instrucciones. .or ejemplo el siguiente conjunto de instrucciones nos permite imprimir una variable de tipo cadena en la pantalla; :ea "U,#adena E"ireccionar la cadena $ov !A,74h EUsar la funcin 74h para imprimir cadenas *nt 21h Ellamada a la interrupcin 21h del "@+ +i necesitamos que en nuestro programa se muestren mensajes constantemente, es obvio que debemos duplicar este conjunto de instrucciones por cada mensaje que se desea enviar a pantalla. El principal problema que esto nos ocasiona es que el tamaDo de nuestro programa crece considerablemente, y mientras m,s grande sea el programa, m,s difcil ser, encontrar la causa de alg-n error cuando &ste ocurra. :a mejor solucin en estos casos es el uso de las $!#9@+. Una macro es un conjunto de instrucciones que se agrupan bajo un nombre descriptivo <macroinstruccin= y que slo es necesario declarar una ve <macrodefinicin=. Una ve que la macro ha sido declarada, slo es necesario indicar su nombre en el cuerpo del programa y el ensamblador se encargara de reempla ar la macroinstruccin por las instrucciones de la macro <e'pansin de la macro=. El formato general de una macro es el siguiente; .$!#9@ ?ombre e<parametro1, parametro2, etc=f *?+%9U##*@?E+ E?"$ ?uevamente, lo que se encuentra entre par&ntesis cuadrados es opcional. "e acuerdo con esto, la macro para imprimir cadenas quedara de la siguiente
MARIA GUADALUPE TORRES ANDRES

118

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

forma; .$!#9@ *mprime`#ad<#adena= :ea "U,#adena $ov !h,74h *nt 21h E?"$

P*%G/(-%&) 1 (-0F2(-*) "entro de las propiedades m,s importantes de las macros se deben destacar la posibilidad de utili ar par,metros y etiquetas. :os par,metros permiten que una misma macro pueda ser usada bajo diferentes condiciones, por ejemplo, se puede crear una macro para posicionar el cursor en diferentes coordenadas de la pantalla e indicar sus coordenadas por medio de par,metros. :a siguiente macro nos muestra esta propiedad; EEsta macro posiciona el cursor en las coordenadas que se le indican como Epar,metros. Es el equivalente al GotoUY de .ascal. .$!#9@ goto'y <',y= 'or bh,bh E+eleccionar p,gina cero de video mov dl,' E#olumna mov dh,y E9engln mov ah,72h E>uncin 72h para posicionar cursor int 17h Ellamada a la int 17h del 8*@+ E?"$ %ambi&n e'isten situaciones en las que los par,metros no son necesarios, es por esta ra n que los par,metros son opcionales en la declaracin de la macro. EEsta macro reali a una pausa en el programa hasta que una tecla es Epresionada. Es el equivalente del readNey en .ascal. .$!#9@ tecla mov ah,17h int 1)h E?"$ .or otro lado, las etiquetas tambi&n son -tiles dentro de las macros. +uponga que se desea crear una macro que imprima una cadena un numero n de veces, esta macro podra ser declarada de la siguiente forma; .$!#9@ *mprime`n#ad <#adena, #uantos= $ov #U,#uantos E*niciar #ontador :ea "U,#adena E"ireccionar la cadena que se va a imprimir

MARIA GUADALUPE TORRES ANDRES

119

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

$ov !h,74h EUsar la funcin 74h @tra; EEtiqueta interna *nt 21h E*mprimir la #adena n veces :oop @tra E+iguiente *mpresin E?"$

E,)*/9.( +( /*'%&) #omo ya se mencion antes, una macro es declarada una sola ve y puede ser llamada cuantas veces sea necesario dentro del cuerpo del programa. #ada ve que el ensamblador encuentra una macroinstruccin, verifica si &sta fue declaradaE si esta verificacin es e'itosa, el ensamblador toma las instrucciones del cuerpo de la macro y las reempla a en el lugar donde la macro fue llamada. El siguiente programa muestra la declaracin y uso de las macros; .#@$$E?% .rograma; $acros1.!+$ !utor; Ruan #arlos Gu m,n #. "escripcin; Este programa muestra el uso de macros. .$@"E: %*?Y E "eclaracin de variables ."!%! cad db hEjemplo del uso de macros...h,13,17,hYh cad1 db h.resiona una tecla...h,hYh cad2 db hEjemplo del uso de la macro goto'y...h,hYh E!qu se declaran las macros. EHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF EEsta macro imprime una cadena pasada como par,metro. EUtili a la funcin 74h de la *nt 21h del "@+. .$!#9@ imprime`cad<cadena= lea d',cadena mov ah,74h int 21h E?"$ EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF EEsta macro reali a una pausa en el programa hasta que una tecla se Epresione. Es el equivalente del readNey en .ascal. .$!#9@ tecla mov ah,17h int 1)h E?"$ EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

MARIA GUADALUPE TORRES ANDRES

12'

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

EEsta macro posiciona el cursor en las coordenadas que se le indican como Epar,metros. Es el equivalente al GotoUY de .ascal. .$!#9@ goto'y <',y= 'or bh,bh mov dl,' mov dh,y mov ah,72h int 17h E?"$ EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF EEsta macro limpia la pantalla. EUtili a la funcin 7)h de la *nt 17h del 8ios. .$!#9@ limpiar`pantalla mov a',7)77h mov bh,1/h mov c',7777h mov d',1(5fh int 17h E?"$ EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E!qu comien a el cuerpo del programa principal .#@"E inicio; E"eclaracin del punto de entrada limpiar`pantalla E:lamada a la macro goto'y <7,7= E#olocar el cursor en 7,7 imprime`cad<cad= E*mprime el primer mensaje imprime`cad<cad1= E*mprime el segundo mensaje tecla EEspera a que se presione una tecla goto'y <37,12= E#olocar el cursor en 37,12 imprime`cad<cad2= E*mprimir el tercer mensaje goto'y <67,25= E#olocar el cursor en 67,25 imprime`cad<cad1= E*mprimir el segundo mensaje tecla EEsperar por una tecla mov a',5c77h E>in del programa y regresar al "@+. int 21h E?" inicio E?" V(,-*=*) 1 +()7(,-*=*) +i bien es cierto que las macros proporcionan mayor fle'ibilidad a la hora de programar, tambi&n es cierto que tienen algunas desventajas. :a siguiente es una lista de la principales ventajas y desventajas del uso de las macros. 0entajas;

$enor posibilidad de cometer errores por repeticin. $ayor fle'ibilidad en la programacin al permitir el uso de par,metros.

MARIA GUADALUPE TORRES ANDRES

121

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

#digo fuente m,s compacto. !l ser m,s pequeDo el cdigo fuente, tambi&n es m,s f,cil de leer por otros.

"esventajas;

El cdigo ejecutable se vuelve m,s grande con cada llamada a la macro.

:as macros deben ser bien planeadas para evitar la redundancia de cdigo.

AP NDICE B DIRECTIVAS DEL MASM


.186 .286' .286< .287 .8#86 .8#87 nombreMe#presin ASUME .ermite reconocer instrucciones para microprocesadores (7() y (71(). .ermite ensamblar instrucciones (72() en modo no protegido, (7() y (71(). !ctiva el ensamble de instrucciones (72() en modo protegido, (71(), (7(). Ensamblar instrucciones (72(/ y (7(/. $odo por defecto. !ctiva el ensamble de instrucciones (7() <id&nticas para el (7((=. !ctiva el ensamble de instrucciones (7(/. $odo por defecto. !signa el valor de e#presin a nombre. segmentregister?segmentname. +elecciona segmentregister que sea el segmento por defecto para todos los smbolos en el segmento o grupo nombrados. +i segmentname es NOTHING, ning-n registro es seleccionado. delimitador te#to delimitador. %rata como un comentario a todo te#to dado entre delimitador y delimitador. 9establece el listado de referencia cru ada de smbolos. !loja e iniciali a un byte <DB=. una palabra <DL, 2 bytes= una palabra doble<DD= una palabra cu,druple <DP= y 17 bytes < <DT= de almacenamiento para cada $alor

COMMENT

.CREF NnombreODB $alor NnombreODL $alor NnombreODD $alor NnombreODP $alor NnombreODT $alor

MARIA GUADALUPE TORRES ANDRES

122

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

ELSE END Ne#presinO ENDIF ENDM nombre ENDP nombre ENDS nombre EPU e#presin .ERR .ERR1 .ERR2 .ERRB Qargumento> .ERRDEF nombre .ERRDIF Qcadena%R$Qcadena2R .ERRE e#presin .ERRIDN Qcadena%R$Qcadena2R .ERRNB QargumentoR .ERRNDEF nombre .ERRNC e#presin EVEN E@ITM

E@TRN nombre?tipo... nombre GROUP segmentname... IF e#presin IF1 IF2 IFB QargumentoR IFDEF nombre IFDIF Qargumento%R$Qargumento2R

+eDala el inicio de un bloque alterno dentro de un bloque condicional. +eDala el fin de un bloque y, opcionalmente, fija el punto de entrada a e#presin. %ermina un bloque condicional. %ermina una macro. $arca el final de la definicin de un procedimiento $arca el final de la definicin de una estructura o segmento !signa e#presin a nombre. Genera error. Genera error en el paso 1 -nicamente. Genera error en el paso 2 -nicamente. Genera error si argumento es blanco. Genera error si nombre ya ha sido definido. Genera error si los nombres son diferentes. Genera error si e#presin es falsa <o= Genera error si las cadenas son id&nticas. Genera error si el argumento no es blanco. Genera error si nombre no se ha definido. Genera error si e#presin no es cero<verdadera=. +i es necesario, incrementa el contador de localidad a un n-mero par y genera una instruccin NOP. %ermina la e'pansin del bloque de repeticin o macro y comien a a ensamblar la siguiente declaracin fuera del bloque. "eclaracin de una variable, etiqueta o smbolo e'terno. !socia el nombre de un grupo con uno o m,s segmentos. .ermite el ensamble si e#presin es verdadera<no cero=. Ensambla slo en el paso 1. Ensambla slo en el paso 2. Ensambla si argumento es blanco. Ensambla si nombre ya ha sido definido. Ensambla slo si los argumentos son diferentes.

MARIA GUADALUPE TORRES ANDRES

123

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

IFE e#presin IFIDN Qargumento%R$Qargumento2R IFNB QargumentoR IFNDEF nombre INCLUDE filename IRP nombre$Qparmetro...R

IRPC nombre$Qcadena>

&ombre ETIPUETA tipo

.LALL .LFCOND .LIST LOCAL nombre...

nombre MACRO parmetro...

NAME mdulo PURGE macro... ORG e#presin SOUT te#to &ombre PROC tipo PAGE longitud,anc'o PAGET PAGE

Ensambla si e#presin es falsa <7=. Ensambla si los argumentos son id&nticos. Ensambla si el argumento no es blanco. +i nombre no ha sido definido permite el ensamble *nserta cdigo fuente desde el archivo indicado $arca el inicio de un bloque de cdigo que ser, repetido tantas veces como par,metros e'istan y en cada repeticin nombre ser, reempla ado por cada parmetro. $arca el inicio de un bloque de cdigo que ser, repetido tantas veces como caracteres tenga la cadena indicada y en cada repeticin ser, substituido nombre por cada car,cter. #rea una nueva variable o etiqueta asignando el valor actual del contador de localidades y el tipo dado a nombre. :ista todas las declaraciones en una macro. 9establece el listado de bloques condicionales. 9establece el listado de declaraciones en el listado del programa. "eclara nombre dentro de una macro para quesea reempla ado por el nombre actual, cuando la macro sea e'pandida $arca el inicio de la macro nombre y establece cada parmetro para ser substituido por los respectivos par,metros cuando la macro sea llamada. >ija el nombre del mdulo. 8orra las macros indicadas. >ija el contador de localidades e#presin. "espliega te#to en pantalla. +eDala el inicio de un procedimiento de determinado tipo. >ija los m,rgenes para el listado del programa <en caracteres=. *ncrementa la numeracin de p,gina. Genera un corte de p,gina en el listado.

MARIA GUADALUPE TORRES ANDRES

124

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

PUBLIC nombre...

.RADI@ e#presin &ombre RECORD campo?anc'oeMe#presinf... REPT e#presin .SALL nombre SEGMENTealineacinfecombinefeUclaseUf .SFCOND &ombre STRUC SUBTTLete#tof .TFCOND TITLEte#to .@ALL .@CREFenombre...f .@LIST

Aace que cada variable, nombre, etiqueta o smbolo absoluto declarado est& disponible para el resto de mdulos en el programa. >ija la base a e#presin para la introduccin de n-meros. "efine una estructura para un registro de ( 1) bits que contiene uno o m,s campos. $arca el inicio de un bloque ser, repetido el n-mero de veces indicado por e#presin. +uprime el listado de las e'pansiones de macros. $arca el inicio de un segmento del programa llamado nombre y que posee los atributos indicados. +uprime el listado de cualquier bloque condicional subsecuente cuya condicin IF sea falsa. $arca el comien o en la definicin de una estructura. "efine un subttulo para el listado. >ija por defecto el listar los bloques condicionales. %tulos para los listados de los programas. :ista slo aquellas macros que generen cdigo o datos. +uprime el listado de las referencias cru adas. +uprime el listado de las lneas que sigan.

MARIA GUADALUPE TORRES ANDRES

125

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

AP NDICE C JUEGO DE INSTRUCCIONES DEL 8#86$8#87$8#186$8#286 Y 8#287


En la siguiente lista de instrucciones, para la descripcin y su sinta'is se recurre a las siguientes abreviaturas; acum reg segreg rBm inmed mem etiqueta src dest 8#86J8#88 AAA AAD AAM AAS ADC acum, inmed rBm,inmed rBm, reg reg, rBm ADD acum,inmed rBm,inmed rBm, reg reg, rBm AND acum,inmed rBm,inmed rBm, reg reg, rBm CALL etiqueta rBm CBL CLC CLD CLI !juste !+#** para adicin. !juste !+#** para divisin. !juste !+#** para multiplicacin. !juste !+#** para divisin. +uma con acarreo. uno de los acumuladores; !U o !:. cualquiera de los registros uno de los registros de segmento uno de los operandos generales; registro, memoria, basado, inde'ado o basadoFinde'ado constante o smbolo de ( o 1) bits un operando de memoria; smbolo, etiqueta, variable. etiqueta de instrucciones. fuente en operaciones de cadena destino en operaciones de cadena.

+uma.

@peracin !?" a nivel bit.

:lamado. #onvierte byte apalabra. :impia bandera de acarreo. :impia bandera de direccin. :impia bandera de interrupcin.

MARIA GUADALUPE TORRES ANDRES

126

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

CMC CMP acum,inmed rBm,inmed rBm, reg reg, rBm CMPS src,dest CMPSB CMPSL CLD DAA DAS DEC rBm reg DIV rBm ESC inmed, rBm HLT IDIV rBm IMUL rBm IN accum,inmed acum, D@ INC rBm reg INT! INT inmed INTO IRET JMP etiqueta rBm J<condicin=etiqueta

#omplementa bandera de acarreo. #omparacin

#omparacin de cadenas. #ompara cadenas byte por byte. #ompara cadenas palabra por palabra. #onvierte palabra a palabra doble. !juste decimal para adicin. !juste decimal para substraccin. "ecremento. "ivisin. Escape con ) bits. !lto. "ivisin entera. $utiplicacin entera. Entrada desde puerto. *ncremento. *nterrupcin3 codificada como un byte. *nterrupcin7F266. *nterrupcin en o$erflo(. 9etorno de interrupcin. 8rinco incondicional. 8rinca de acuerdo a las condiciones; A <arriba=, AE <arriba o igual=, B <siguiente=, BE <siguiente o igual=, C<acarreo=, C@C <C@ en cero=, E <igual=, G <mayor=, GE <mayor o igual=, L <menor=, LE <menor o igual=, NA <no anterior=, NAE <no anterior o igual=, NB <no siguiente=, NBE<no siguiente o igual=, NC <no acarreo=, NE <no igual=, NG<no mayor=, NGE <no mayor o igual=, NL <no menor=, NLE <no menor o igual=, NO<no sobreflujo=, NP <no paridad=, NS <no signo=, NC <no cero=, O<sobreflujo=, P <paridad=, PE<paridad par=, PO <paridad impar=, S <signo=, C <cero=. #arga AH con las banderas. #arga DS. #arga la direccin. #arga ES. #ierra bus. #arga cadena. #arga byte de cadena en AL. #arga palabra de la cadena en A@. #iclo. #iclo mientras igual. #iclo mientras no igual. #iclo mientras no cero. #iclo mientras cero. $ueve un valor del segundo al primer operando

LAHF LDS rBm LEA rBm LES rBm LOCV LODS src LODSB LODSL LOOP etiqueta LOOPE etiqueta LOOPNE etiqueta LOOPNC etiqueta LOOPC etiqueta MOV acum,mem rBm,inmed mem, acum rBm, reg

MARIA GUADALUPE TORRES ANDRES

127

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

rBm,segreg reg, inmed reg,rBm segreg,rBm MOVS dest, src MOVSB MOVSL MUL rBm NEG rBm NOP NOT rBm OR acum, inmed rBm,inmed rBm, reg reg,rBm OUTD@, accum inmed, acum POP rBm reg segreg POPF PUSH rBm reg segreg PUSHF RCL rBm,1 rBm,CL RCR rBm, 1 rBm, CL REP REPE REPNE REPNC REPC RET NinmedO ROL rBm,1 rBm, CL ROR rBm,1 rBm, CL SAHF SAL rBm, 1 rBm, CL SAR rBm, 1 rBm, CL SBB acum, inmed rBm,inmed rBm, reg reg,rBm SCAS dest SCASB SCASL SHL rBm, 1 rBm, CL SHR rBm, 1 rBm, CL

$ueve cadena. $ueve cadena byte por byte. $ueve cadena palabra por palabra. $ultiplicacin. ?iega<complemento a 2=. @peracin ociosa. *nvierte valores de bits <complemento a 1=. @peracin @9 a nivel de bit.

+alida por el puerto dado por el primer operando. <inmediato de ( bits= 9ecupera valor de la pila. 9ecupera banderas. Guarda valor en la pila. Guarda banderas. 9otacin a la i quierda con acarreo. 9otacin a la derecha con acarreo. 9epite. 9epite si igual. 9epite si no igual. 9epite si no cero. 9epite si cero. 9egresa despu&s de recuperar bytes de la pila. 9otacin a la i quierda. 9otacin a la derecha. #arga banderas con el valor de AH. "espla amiento aritm&tico a la i quierda. "espla amiento aritm&tico a la derecha. +ubstraccin con acarreo.

E'plora cadena. E'plora cadena para el byte en AL. E'plora cadena por la palabra en A@. "espla amiento a la i quierda. "espla amiento a la derecha.

MARIA GUADALUPE TORRES ANDRES

128

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

STC STD STI STOS dest STOSB STOSL SUB accum, inmed rBm,inmed rBm, reg reg,rBm TEST acum, inmed rBm,inmed rBm, reg reg,rBm LAIT @CHG acum, reg rBm,inmed rBm, reg reg,rBm @LAT @OR acum, reg rBm,inmed rBm, reg reg,rBm 8#87 F2@M1 FABS FADD mem FADD ST$STA0B FADD STA0B$ST FADDP STA0B$ ST FBLD mem FBSTP mem FCHS FCLE@ FCOM FCOM ST FCOM STA0B FCOMP FCOMP ST FCOMP STA0B FCOMPP FDECSTP FDISI FDIV mem FDIV ST$STA0B FDIV STA0B$ ST FDIVPSTA0B$ ST FDIVR FDIVR mem FDIVR ST$ STA0B FDIVR STA0B$ ST

>ija bandera de acarreo. >ija bandera de direccin. >ija bandera de interrupcin. Guarda cadena. Guarda byte en AL en la cadena. Guarda palabra en A@ en la cadena. +ubstraccin.

#omparacin.

!guarda. *ntercambio.

%raduce. @peracin U@9 a nivel bit.

#alcula 2'F1. %oma valor absoluto del tope de la pila. +uma real. +uma real desde la pila. +uma real a la pila. +uma real y saca de pila. #arga un decimal empacado de 17 bytes en lapila. !lmacena un decimal empacado de 17 bytes y saca de pila. #ambia signo del valor en el tope de la pila. 8orra las e'cepciones despu&s de un LAIT. #ompara real. #ompara real con el tope de la pila. #ompara real con la pila. #ompara real y saca de pila. #ompara real con el tope dela pila y saca de pila. #ompara real con el tope de la pila y saca. #ompara real y saca dos valores de la pila. "ecrementa el apuntador de la pila. "eshabilita las interrupciones despu&s de un LAIT. "ivisin real. "ivisin real desde la pila. "ivisin real en la pila. "ivisin real sacando valor de la pila. "ivisin real invertida. "ivisin real invertida desde memoria. "ivisin real invertida desde la pila. "ivisin real invertida desde la pila.

MARIA GUADALUPE TORRES ANDRES

129

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

FDIVRPSTA0B$ ST FENI FFREE FIADD mem FICOM mem FICOMP mem FIDIV mem FDIVR mem FILD mem FIMUL mem FINCSTP FINIT FIST mem FISTP mem FISUB mem FISUBR mem FLD mem FLD1 FLDCL mem FLDENV mem FLDL2E FLDL2T FLDLG2 FLDLN2 FLDPI FLDC FMUL MUL mem FMUL ST$ STA0B FMUL STA0B$ ST FMULP ST$ STA0B FNCLE@ FNDISI FNENI FNINIT FNOP FNSAVE mem FNSTCL mem FNSTENV mem FNSTSL mem FPATAN FPREM FPTAN FRNDINT FRSTOR mem FSAVE mem FSCALE FSPRT FST FST ST FST STA0B FSTCL mem FSTENV mem FSTP mem FSTSL mem

"ivisin con un real invertido y sacando valor de la pila. Aabilita interrupciones despu&s de un LAIT. :ibera elemento dela pila. +uma entera de un n-mero de2 5 bytes. #ompara enteros de 2 5 bytes y saca de la pila. #ompara entero de 2 5 bytes y saca de pila. "ivisin entera. "ivisin entera invertida. #arga un entero de 2, 5 u ( bytes en la pila. $ultiplicacin entera de 2 5 bytes. *ncrementa el apuntador de la pila. *niciali a el procesador despu&s de LAIT. !lmacena entero de 2 5 bytes. !lmacena entero de 2, 5 u ( bytes y saca de la pila. 9esta entero de 2 5 bytes. 9esta entera de 2 5 bytes invertida. #arga real de 5, ( 17 bytes en la pila. .one J1.7 en el tope de la pila. #arga la palabra de control. #arga entorno (7(/ <15 bytes=. #argalog2 e en el tope dela pila. #argalog2 17en el tope de la pila. #argalog172 en el tope de la pila. #argaloge2 en el tope de la pila. #arga en el tope dela pila. #arga J7.7 en el tope de la pila. $ultiplicacin real. $ultiplicacin real desde memoria. $ultiplicacin real desde pila. $ultiplicacin real a la pila. $ultiplicacin real y saca de la pila. 8orra e'cepciones sin LAIT. *nhabilita interrupciones sin LAIT. Aabilita interrupciones sin LAIT. *niciali a procesador sin LAIT. @peracin nula. +alva estado (7(/ <45 bytes= sin LAIT. !lmacena la palabra de control sin LAIT. Guarda el entorno (7(/ sin LAIT. !lmacena el estado(7(/ sin LAIT. >uncin arcotangente parcial. 9esiduo parcial. >uncin tangente parcial. 9edondea a entero 9establece estado(7(/ <45 bytes= #onserva el estado(7(/ <45 bytes=. Escala 9a cuadrada !lmacena real. !lmacena real desde el tope de la pila. !lmacena real desde lapila. !lmacena palabra de control con LAIT. Guarda el entorno (7(/ despu&s de LAIT. Guarda real de 5, ( 17 bytes y saca de la pila. !lmacena la palabra de estado depu&s de LAIT.

MARIA GUADALUPE TORRES ANDRES

13'

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

FSUB FSUB mem FSUB ST$ STA0B FSUB STA0B$ ST FSUBPST$ STA0B FSUBR FSUBR mem FSUBR ST$STA0B FSUBR STA0B$ ST FSUBRPSTA0B$ ST FTST FLAIT F@AM F@CH FFREEST FFREESTAiB F@TRACT FYL2@ FYL2PI

+ubstraccin real. +ubstraccin real desde memora. +ubstraccin real desde la pila. +ubstraccin real a la pila. +ubstrae real y saca de pila. +ubstraccin real invertida. +ubstraccin real invertida desde memoria. +ubstraccin real invertida desde la pila. +ubstraccin real invertida a la pila. +ubstraccin real invertida a la pila y saca. .rueba el tope dela pila. !guarda que la -ltima operacin (7(/ termine. E'amina el elemento del tope de la pila. *ntercambia contenido de los elementos de la pila. *ntercambia el elemento del tope de la pila. *ntercambia el elemento del tope de la pila y el iF&simo elemento. E'trae el e'ponente y significando. #alcula Y log2 U. #alcula Y log2 <'J1=

8#186J8#188J8#286 A/&+& ,& <%&-(;0+&B BOUND reg, mem "etecta valor fuera de rango. ENTER inmed1), inmed( Aace elemento en la pila para llamada a procedimiento. IMUL reg, inmed $ultiplicacin entera. reg, rBm,inmed INS mem, D@ Entrada de cadena desde el puerto D@. INSB mem,D@ Entrada de cadena de bytes desde el puerto D@. INSL mem D@ Entrada de cadena de palabras desde el puerto D@. LEAVE "eja procedimiento. OUTS D@$ mem +alida de cadena de bytes o palabras al puerto D@. OUTSBD@$ mem +alida de cadena de bytes al puerto D@. OUTSL D@$ mem +alida de cadena de palabras al puerto D@. POPA +aca todos los registros de la pila. PUSH inmed *ntroduce a la pila PUSHA *ntroduce todos los registros. RCL rBm, inmed 9otacin a la i quierda con acarreo RCR rBm, inmed 9otacin a la derecha con acarreo. ROL rBm, inmed 9otacin a la i quierda. ROR rBm, inmed 9otacin a la derecha. SAL rBm, inmed "espla amiento aritm&tico a la i quierda. SAR rBm, inmed "espla amiento aritm&tico a la derecha. SHL rBm, inmed "espla amiento a la i quierda. SHR rBm, inmed "espla amiento a la derecha. 8#286 A/&+& <%&-(;0+&B ARPL mem, reg CLTS LAR reg, mem LGDT mem !justa peticin de nivel de privilegio. :impia bandera de conmutacin de tareas. #arga derechos de acceso. #arga la tabla de descriptores globales <( bytes=.

MARIA GUADALUPE TORRES ANDRES

131

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

LIDT mem LLDT mem LMSL mem LSL reg, mem LTR mem SGDT mem SIDT mem SMSL mem STR mem VERR mem VERL mem 8#287 FSETPM FSTSLA@ FNSTSLA@

#arga tabla de descriptores de interrupciones <( bytes=. #arga la tabla de descriptores locales. #arga la palabra de estado. #arga el lmite del segmento. #arga registro de tareas. Guarda la tabla de descriptores locales <( bytes=. Guarda tabla de descriptores de interrupciones <( bytes=. Guarda la palabra de estado. Guarda registro de tareas. 0erifica acceso de lectura. 0erifica acceso de escritura. >ija modo protegido. !lmacena palabra de estado en A@ <aguarda=. !lmacena palabra de estado en A@ <no aguarda=.

MARIA GUADALUPE TORRES ANDRES

132

UNIVERSIDAD GRUPO CEDIP


DESARROLLO DE SISTEMAS DE LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL

MARIA GUADALUPE TORRES ANDRES

133

También podría gustarte