You are on page 1of 73

Lenguaje Ensamblador

Instituto Tecnolgico Superior de Xalapa

Antologa Lenguaje Ensamblador

Docente: ISC Ren Zahor Torres ecerra

Ingeniera en sistemas Computacionales

Ren Zahor Torres ecerra

Lenguaje Ensamblador

Temario
1. Fundamentos del Lenguaje Ensamblador 1.1. Introduccin. 1.1.1. Uso y aplicaciones del lenguaje ensamblador. 1.1. . Escalabilidad de los microprocesadores. 1.1.!. "ipos de lenguajes ensambladores. 1.1.#. $lasi%icacin de &emorias. 1.1.'. Unidades de entrada ( salida. 1. . El microprocesador. 1. .1. )uses. 1. . . *egistros. 1. .!. &odos de direccionamiento. 1.!. Interrupciones. 1.!.1. +ard,are. 1.!. . -o%t,are. 1.#. Estructura de un programa en ensamblador. 1.#.1. Data segment. 1.#. . -tac. segment. 1.#.!. $ode segment. 1.#.#. Instrucciones del programa. 1.#.'. Directi/as. 1.'. 0rocedimiento de ensamble1 enlace y ejecucin. 1.2. Entorno de programacin. Elementos del 0rograma .1. Instrucciones lineales. .1.1. &o/imiento. .1. . 0ila. .1.!. &atem3ticos. .1.#. Ajustes. .1.'. $omparacin. . . -altos. . .1. Incondicional. . . . $ondicional. .!. "ipos de ciclos. .#. 4peradores Lgicos. .'. Despla5amiento. .'.1. Lineal. .'. . $ircular. .2. 0rocesos de control. .2.1. )anderas. .2. . $adenas. .2.!. $arga. &odulari5acin !.1. &acros. !.1.1. Internas. !.1. . E6ternas. !. . 0rocedimientos. !. .1. Internos. !. . . E6ternos. 0rogramacin +brida #.1. Directi/as para compilacin 7brida. #. . Funciones en ensamblador. #.!. )lo8ues en ensamblador. #.#. 4peradores. #.'. Integrar mdulos de ensamblador en lenguajes de alto ni/el.

!.

#.

Ren Zahor Torres ecerra

"

Lenguaje Ensamblador

#nidad !
!$!$ Introduccin Al desarrollarse las primeras computadoras electrnicas1 se /io la necesidad de programarlas1 es decir1 de almacenar en memoria la in%ormacin sobre la tarea 8ue iban a ejecutar. Las primeras se usaban como calculadoras simples9 se les indicaban los pasos de c3lculo1 uno por uno. Lenguaje Ensamblador es la primera abstraccin del Lenguaje de &38uina1 consistente en asociar a los cdigos de operacin :40$4DE-; palabras cla/e 8ue %aciliten su uso por parte del programador. $omo se puede /er1 el Lenguaje Ensamblador es directamente traducible al Lenguaje de &38uina1 y /ice/ersa9 simplemente1 es una abstraccin 8ue %acilita su uso para los seres 7umanos. 0or otro lado1 la computadora no entiende directamente el Lenguaje Ensamblador9 es necesario traducirle a Lenguaje de &38uina. 4riginalmente1 este proceso se 7aca a mano1 usando para ello 7ojas donde se escriban tablas de programa similares al ejemplo de la calculadora 8ue /imos anteriormente. 0ero1 al ser tan directa la traduccin1 pronto aparecieron los programas Ensambladores1 8ue son traductores 8ue con/ierten el cdigo %uente :en Lenguaje Ensamblador; a cdigo objeto :es decir1 a Lenguaje de &38uina;. Una caracterstica 8ue 7ay 8ue resaltar1 es 8ue al depender estos lenguajes del 7ay un distinto Lenguaje de &38uina :y1 por consiguiente1 un distinto Ensamblador; para cada $0U. 0or ejemplo1 podemos mencionar tres completamente di%erentes1 8ue sin embargo /ienen de la aplicacin de los anteriores: 7ard,are1 Lenguaje lenguajes conceptos

1; Lenguaje Ensamblador de la %amilia Intel <=6<2. ; Lenguaje Ensamblador de la %amilia &otorola 2<===. !; Lenguaje Ensamblador del procesador 04>E*1 usado en las I)& *-(2=== !$!$!$ #sos % &plicaciones del Lenguaje Ensamblador El uso del lenguaje ensamblador le permite al programador indicarle al computador e6actamente cmo lle/ar a cabo una tarea espec%ica usando la menor cantidad de instrucciones. A?n cuando el cdigo generado por los compiladores con opcin de optimi5acin es e%iciente1 la optimi5acin manual puede resultar en una mejora sustancial en t@rminos de rendimiento y consumo de memoria. El lenguaje ensamblador es usualmente utili5ado en las siguientes circunstancias: &ejorar la e%iciencia de una rutina espec%ica 8ue se 7a trans%ormado en un cuello de botella.

Ren Zahor Torres ecerra

'

Lenguaje Ensamblador
4btener acceso a %unciones de bajo ni/el del procesador para reali5ar tareas 8ue no son soportadas por los lenguajes de alto ni/el. Escribir manejadores de dispositi/os para comunicarse directamente con 7ard,are especial tales como tarjetas de red. "rabajar en ambientes con recursos limitados puede re8uerir el uso del lenguaje ensamblador pues el cdigo ejecutable puede ser menor 8ue el generado por el compilador. Los lenguajes ensamblador tienen sus aplicaciones muy reducidas1 se centran b3sicamente en aplicaciones de tiempo real1 control de procesos y de dispositi/os electrnicos !$!$"$ Escalabilidad de los (icroprocesadores El concepto de escalabilidad en telecomunicaciones y en ingeniera in%orm3tica1 es la propiedad deseable de un sistema1 una red o un proceso1 8ue indica su 7abilidad para e6tender el margen de operaciones sin perder calidad1 o bien manejar el crecimiento continuo de trabajo de manera %luida. El &icroprocesador es un circuito integrado 8ue contiene algunos o todos los elementos 7ard,are1 y el de $0U1 8ue es un concepto lgico. Una $0U puede estar soportada por uno o /arios microprocesadores1 y un microprocesador puede soportar una o /arias $0U. Un n?cleo suele re%erirse a una porcin del procesador 8ue reali5a todas las acti/idades de una $0U real. Un microprocesador escalar solamente puede manejar una instruccin 8ue a su /e5 maneja solo un objeto de datos a la /e5. Un microprocesador superescalar puede procesar tambi@n solo un objeto de datos por instruccin1 pero puede paraleli5ar este proceso por su diseAo1 ejecutando /arias instrucciones a la /e5. !$!$'$ Tipos de Lenguajes Ensambladores Aun8ue todos los ensambladores reali5an b3sicamente las mismas tareas1 podemos clasi%icarlos de acuerdo a caractersticas. As podemos clasi%icarlos en: (acro Ensambladores Cru)ados *CR+SS,&SSE( LER-e denominan as los ensambladores 8ue se utili5an en una computadora 8ue posee un procesador di%erente al 8ue tendr3n las computadoras donde /a a ejecutarse el programa objeto producido.

Ren Zahor Torres ecerra

Lenguaje Ensamblador
El empleo de este tipo de traductores permite apro/ec7ar el soporte de medios %sicos :discos1 impresoras1 pantallas1 etc.;1 y de programacin 8ue o%recen las m38uinas potentes para desarrollar programas 8ue luego los /an a ejecutar sistemas muy especiali5ados en determinados tipos de tareas. Ensambladores Residentes$ -on a8uellos 8ue permanecen en la memoria principal de la computadora y cargan1 para su ejecucin1 al programa objeto producido. Este tipo de ensamblador tiene la /entaja de 8ue se puede comprobar inmediatamente el programa sin necesidad de transportarlo de un lugar a otro1 como se 7aca en crossBassembler1 y sin necesidad de programas simuladores. (acroensambladores$ -on ensambladores 8ue permiten el uso de macroinstrucciones :macros;. Debido a su potencia1 normalmente son programas robustos 8ue no permanecen en memoria una /e5 generado el programa objeto. (icroensambladores$ El programa 8ue indica al int@rprete de instrucciones de la U$0 cmo debe actuar se denomina microprograma. El programa 8ue ayuda a reali5ar @ste microprograma se llama microensamblador. E6isten procesadores 8ue permiten la modi%icacin de sus microprogramas1 para lo cual se utili5an microensambladores. Ensambladores de una /ase$ Estos ensambladores leen una lnea del programa %uente y la traducen directamente para producir una instruccin en lenguaje m38uina o la ejecuta si se trata de una pseudoinstruccin. "ambi@n /a construyendo la tabla de smbolos a medida 8ue /an apareciendo las de%iniciones de /ariables1 eti8uetas1 etc. Ensambladores de 0os /ases$ Los ensambladores de dos %ases se denominan as debido a 8ue reali5an la traduccin en dos etapas. En la primera %ase1 leen el programa %uente y construyen una tabla de smbolos9 de esta manera1 en la segunda %ase1 /uel/en a leer el programa %uente y pueden ir traduciendo totalmente1 puesto 8ue conocen la totalidad de los smbolos utili5ados y las posiciones 8ue se les 7a asignado. !$!$.$ Clasi1icacin de (emorias 4rgani5ando estos tipos de memoria con/iene destacar tres categoras si las clasi%icamos en %uncin de las operaciones 8ue podemos reali5ar sobre ellas1 es decir1 memorias de slo lectura1 memorias de sobre todo lectura y memorias de lectura escritura.
Ren Zahor Torres ecerra 2

Lenguaje Ensamblador
(E(+RI&S 0E S3L+ LECT#R&$ R+( *ead 4nly &emory. -e usan principalmente en microprogramacin de sistemas. Los %abricantes las suelen emplear cuando producen componentes de %orma masi/a. Es una memoria solamente de lectura es totalmente inalterable sin esta memoria la ma8uina no arrancara. La memoria principal es la con/encional 8ue /a de = a 2#= Cb. $uando la m38uina arranca comien5a a trabajar el disco y reali5a un testeo1 para lo cual necesita memoria1 esta memoria es la con/encional :*4&; y est3 dentro del mot7erboard :en el )I4-;. Apenas arranca utili5a !== Cb1 sigue testeando y llega a m3s o menos '#= Cb donde se planta. A medida de 8ue comen5aron a 7aber so%t con m3s necesidad de memoria apareci la llamada memoria e6pandida 8ue iba de 2#= Cb a 1= # Cb. 4R+( :0rogrammable *ead 4nly &emory;: El proceso de escritura es el@ctrico. -e puede grabar posteriormente a la %abricacin del c7ip1 a di%erencia de las anteriores 8ue se graba durante la %abricacin. 0ermite una ?nica grabacin y es m3s cara 8ue la *4&. Es una memoria digital donde el /alor de cada bit depende del estado de un %usible :o anti%usible;1 8ue puede ser 8uemado una sola /e5. 0or esto la memoria puede ser programada :pueden ser escritos los datos; una sola /e5 a tra/@s de un dispositi/o especial1 un programador 0*4&. (E(+RI&S 0E S+ RE T+0+ LECT#R&$ E4R+( :E0*4& son las siglas de Erasable 0rogrammable *eadB4nly &emory :*4& borrable programable;. Es un tipo de c7ip de memoria *4& in/entado por el ingeniero Do/ Fro7man 8ue retiene los datos cuando la %uente de energa se apaga. EE4R+( -on las siglas de electricallyBerasable programmable readBonly memory :*4& programable y borrable el@ctricamente;1 en espaAol o castellano se suele re%erir al 7ablar como E 0*4& y en ingl@s DEB-8uaredB0*4&E. Es un tipo de memoria *4& 8ue puede ser programado1 borrado y reprogramado el@ctricamente1 a di%erencia de la E0*4& 8ue 7a de borrarse mediante rayos ultra/ioletas. (E(+RI& /L&S5 Est3 basada en las memorias EE0*4& pero permite el borrado blo8ue a blo8ue y es m3s barata y densa.
Ren Zahor Torres ecerra 6

Lenguaje Ensamblador
La memoria %las7 es una %orma e/olucionada de la memoria EE0*4& 8ue permite 8ue m?ltiples posiciones de memoria sean escritas o borradas en una misma operacin de programacin mediante impulsos el@ctricos1 %rente a las anteriores 8ue slo permite escribir o borrar una ?nica celda cada /e5. (E(+RI&S 0E LECT#R&7ESCRIT#R& *R&(-$ La importancia de esta memoria es tan grande 8ue si est3 ausente la 0$ F4 A**AF$A1 Act?a como si estu/iera muerta no 7ay sonido ni cursor en la pantalla ni luces 8ue se enciendan o apaguen. 0ara 8u@ sir/e: Almacena las instrucciones 8ue debe ejecutar el micro en cada momento Este es el lugar %sico donde debe trabajar el procesador cuando abrimos un programa sus instrucciones se copian autom3ticamente en la memoria1 y cuando cerremos el programa todo se borrara : /olati5ar3 ; "ambi@n copia los trabajos 8ue estamos 7aciendo en ese programa En la *A& se copian programas 8ue coordinan el %uncionamiento de la 0$: La primera parte de la *A& est3 reser/ada para guardar las instrucciones de los dispositi/os electrnicos. 0R&( :Dynamic *andom Access &emory;: Los datos se almacenan como en la carga de un condensador. "iende a descargarse y1 por lo tanto1 es necesario un proceso de re%resco peridico. -on m3s simples y baratas 8ue las -*A&. R0R&( Es una memoria muy costosa y de compleja %abricacin y la utili5an procesador 0entium IG para arriba corre a /elocidades de <== &75 sus mdulos se denominan *imm de 1#1 pines y con un anc7o de 12 bits1 para llenar un banco de memoria de 2# bits 7ay 8ue instalar # memorias1 es posible 8ue estas memoria sean retiradas del mercado por ser tan costosas. S0R&( Esta &emoria entro en el mercado en los aAos HI1 y mejoro la /elocidad siendo su ritmo de trabajo igual a la /elocidad de )us :F-); es decir 8ue tienen la capacidad de trabajar a la misma /elocidad de mot7er al 8ue se conectan. 00R S0R&( En este caso se consigui 8ue pudiera reali5ar dos trans%erencia en una pulsacin o ticBtac de reloj1 esta memoria pude alcan5ar /elocidades de == a 22&751 "iene una /entaja mas trabaja en sincrona con el bus del mot7er si este acelera la memoria tambi@n pero tiene una des/entaja son muy caras. -e conoce como DI&& DD* -D*A& 0$ 12== J 0$ 1==.

Ren Zahor Torres ecerra

Lenguaje Ensamblador
SR&( :-tatic *andom Access &emory;: Los datos se almacenan %ormando biestables1 por lo 8ue no re8uiere re%resco. Igual 8ue D*A& es /ol3til. -on m3s r3pidas 8ue las D*A& y m3s caras. (E(+RI& C&C59 o SR&( La memoria cac7@ trabaja igual 8ue la memoria /irtual1 tenemos cac7@ en el procesador1 en los discos y en el mot7er y nos guarda direcciones de memoria. !$!$2$ #nidades de Entrada Salida

Ren Zahor Torres ecerra

Lenguaje Ensamblador

Semana !; Tarea a- 5acer un cuadro sinptico de #sos del Ensamblador< Tipos de Ensambladores % Tipos de (emorias

Ren Zahor Torres ecerra

Lenguaje Ensamblador
!$"$ El microprocesador El microprocesador es un circuito integrado 8ue contiene algunos o todos los elementos necesarios para con%ormar una :o m3s; Dunidad central de procesamientoE U$01 tambi@n conocido como $0U :por sus siglas en ingl@s: $entral 0rocess Unit;. En la actualidad este componente electrnico est3 compuesto por millones de transistores1 integrados en una misma placa de silicio. -e debe distinguir entre el concepto de 0rocesador1 8ue es un concepto de +ard,are1 con el concepto de $0U1 8ue es un concepto lgico. Una $0U puede estar soportada por uno o /arios microprocesadores1 y un microprocesador puede soportar una o /arias $0U. 1; El microprocesador es la parte de la computadora diseAada para lle/ar acabo o ejecutar los programas. ; Ejecuta instrucciones 8ue se le dan a la computadora a muy bajo ni/el 7aciendo operaciones lgicas simples1 como sumar1 restar1 multiplicar y di/idir. !; Giene siendo el cerebro de la computadora1 el motor1 el cora5n de esta m38uina. Est3 con%ormado por los siguientes elementos: &emoria1 Unidad Aritm@tica Lgica :ALU;1 0uertos de Entrada y -alida :)uses;1 La Unidad de $ontrol :U$; y un reloj 8ue sincroni5a su %uncionamiento.

!$"$!$

uses

)uses de comunicacin en un circuito impreso. En Ar8uitectura de computadoras1 el bus es un sistema digital 8ue trans%iere datos entre los componentes de un computador o entre computadores. Est3n %ormados por cables o pistas en un circuito impreso1 dispositi/os como resistencias y condensadores adem3s de circuitos integrados.

Ren Zahor Torres ecerra

!>

Lenguaje Ensamblador
La mayora de los buses est3n basados en conductores met3licos por los cuales se trasmiten seAales el@ctricas 8ue son en/iadas y recibidas con la ayuda de integrados 8ue poseen una inter%a5 del bus dado y se encargan de manejar las seAales y entregarlas como datos ?tiles. "odos los buses de computador tienen %unciones especiales como las interrupciones y las D&A 8ue permiten 8ue un dispositi/o peri%@rico acceda a una $0U o a la memoria usando el mnimo de recursos. !$"$"$ Registros Los registros del procesador se emplean para controlar instrucciones en ejecucin1 manejar direccionamiento de memoria y proporcionar capacidad aritm@tica. Los registros son espacios %sicos dentro del microprocesador con capacidad de # bits 7asta 2# bits dependiendo del microprocesador 8ue se emplee. Los registros son direccionables por medio de una /iAeta1 8ue es una direccin de memoria. Los bits1 por con/eniencia1 se numeran de derec7a a i58uierda :1'1 1#1 1!K. !1 1 11 =;1 los registros est3n di/ididos en seis grupos los cuales tienen un %in espec%ico. Los registros se di/iden en: *egistros de segmento. *egistros de apuntadores de instrucciones. *egistros apuntadores. *egistros de propsitos generales. *egistro ndice. *egistro de bandera.

Ren Zahor Torres ecerra

!!

Lenguaje Ensamblador
RE?ISTR+S 0E SE?(E@T+$ Un registro de segmento se utili5a para alinear en un lmite de p3rra%o o dic7o de otra %orma codi%ica la direccin de inicio de cada segmento y su direccin en un registro de segmento supone cuatro bits = a su derec7a.

Un registro de segmento tiene 12 bits de longitud y %acilita un 3rea de memoria para direccionamientos conocidos como el segmento actual. Los registros de segmento son: *egistro $*egistro D*egistro -*egistro E*egistro F- y L*egistro $-.

Registro CS$ El D4- almacena la direccin inicial del segmento de cdigo de un programa en el registro $-. 0ara propsito de programacin normal1 no se necesita re%erenciar el registro $-. Registro 0S$ La direccin inicial de un segmento de datos de programa es almacenada en el registro D-. En t@rminos sencillos1 esta direccin1 m3s un /alor de despla5amiento en una instruccin1 genera una re%erencia a la localidad de un bytes especi%ico en el segmento de datos. Registro SS$ El registro -- permite la colocacin en memoria de una pila1 para almacenamiento temporal de direcciones y datos. El D4- almacena la direccin de inicio del segmento de pila de un programa en el registro --.

Ren Zahor Torres ecerra

!"

Lenguaje Ensamblador
Registro ES$ Algunas operaciones con cadenas de caracteres :datos de caracteres; utili5an el registro esta de segmento para manejar el direccionamiento de memoria. En este conte6to1 el registro E- esta asociado con el registro DI :ndice;. Un programa 8ue re8uiere el uso del registro E- puede iniciali5arlo con una direccin apropiada. Registro &puntador de Instrucciones *I4-$ El registro apuntador de instrucciones :I0; de 12 bits contiene el despla5amiento de direccin de la siguiente instruccin 8ue se ejecuta. El registro I0 est3 asociado con el registro $- en el sentido de 8ue el I0 indica la instruccin actual dentro del segmento de cdigo 8ue se est3 ejecutando actualmente. Registros &puntadores$ Los registros apuntadores est3n asociados con el registro -- y permiten al procesador accesar datos en el segmento de pila los registros apuntadores son dos: El registro S4$ El apuntador de pila I0 de 12 bits est3 asociado con el registro -- y proporciona un /alor de despla5amiento 8ue se re%iere a la palabra actual 8ue est3 siendo procesada en la pila. El Registro 4$ El registro )0 de 12 bits %acilita la re%erencia de par3metros1 los cuales son datos y direcciones transmitidos /a l3pida. RE?ISTR+S 0E 4R+43SIT+S ?E@ER&LES$ Los registros de propsitos generales AM1 )M1 $M y DM son los caballos de batalla o las 7erramientas del sistema. -on los ?nicos en el sentido de 8ue se puede direccionarlos como una palabra o como una parte de un byte. El ?ltimo byte de la i58uierda es la parte DaltaE1 y el ?ltimo byte de la derec7a es la parte DbajaE por ejemplo1 el registro $M consta de una parte $+ :alta; y una parte $L :baja;1 y usted puede re%erirse a cual8uier parte por si nombre. Las instrucciones siguientes mue/en ceros a los registros $M1 $+ y $L respecti/amente. &o/ $M1 == &o/ $+1 == &o/ $L1 ==

Ren Zahor Torres ecerra

!'

Lenguaje Ensamblador
Registro &X$ El registro AM1 el acumulador principal1 es utili5ado para operaciones 8ue implican entrada(salida y la mayor parte de la aritm@tica. 0or ejemplo1 las instrucciones para multiplicar1 di/idir y traducir suponen el uso del AM. Registro X$ El )M es conocido como el registro base ya 8ue es el ?nico registro de propsitos generales 8ue pueden ser unos ndices para direccionamiento inde6ado. "ambi@n es com?n emplear al )M para c3lculos. Registro CX$ El $M es conocido como el registro contador. 0uede contener un /alor para controlar el n?mero de /eces 8ue un ciclo se repite o un /alor para corrimiento de bits1 7acia la derec7a o 7acia la i58uierda. Registro 0X$ El DM es conocido como el registro de datos. Algunas operaciones de entrada(salida re8uieren su uso1 y las operaciones de multiplicacin y di/isin con ci%ras grandes suponen al DM y al AM trabajando juntos. RE?ISTR+ A@0ICE$ Registro SI$ El registro ndice de 12 bits es re8uerido por algunas operaciones con cadenas :de caracteres;. En este conte6to1 el -I est3 asociado con el registro D-. Registro 0I$ El registro ndice destino tambi@n es re8uerido por algunas operaciones con cadenas de caracteres. En este conte6to1 el Di est3 asociado con el registro E-. Registro de andera$ Los registros de banderas sir/en parar indicar el estado actual de la ma8uina y el resultado del procesamiento1 $uando algunas instrucciones piden comparaciones o c3lculos aritm@ticos cambian el estado de las banderas. &@0ER& Las banderas m3s comunes son las siguientes:
Ren Zahor Torres ecerra !.

Lenguaje Ensamblador
+/ :4/er %lo, %lag1 desbordamiento;: Indica el desbordamiento de un bit de orden alto :mas a la i58uierda; despu@s de una operacin aritm@tica. 0/ :Direction %lag1 Direccin;: Designa la direccin 7acia la i58uierda o 7acia la derec7a para mo/er o comparar cadenas de caracteres. I/ :Interruption %lag1 Interrupcin;: Indica 8ue una interrupcin e6terna1 como la entrada desde el teclado sea procesada o ignorada. T/ :"rap %lag1 "rampa;: E6amina el e%ecto de una instruccin sobre los registros y la memoria. Los programas depuradores como DE)UL1 acti/an esta bandera de manera 8ue pueda a/an5ar en la ejecucin de una sola interrupcin a un tiempo. S/ :-ign %lag1 -igno;: $ontiene el signo resultante de una operacin aritm@tica :=Npositi/o y 1N negati/o;. Z/ :Oero %lag1 Oero;.: Indica el resultado de una operacin aritm@tica o de comparacin :=N resultado di%erente de cero y 1Nresultado igual a cero;. &/ :Au6iliary carry %lag1 Acarreo au6iliar;: $ontiene un acarreo e6terno del bit ! en un dato de < bits1 para aritm@tica especiali5ada 4/ :0arity %lag1 0aridad;: Indica paridad par o impar de una operacin en datos de oc7o bits de bajo orden :mas a la derec7a;. C/ :$arry %lag1 Acarreo;: $ontiene el acarreo de orden m3s alto :mas a la i58uierda; despu@s de una operacin aritm@tica9 tambi@n lle/a el contenido del ?ltimo bit en una operacin de corrimiento o rotacin. !$"$'$ (odos de direccionamiento El campo de operacin de una instruccin especi%ica la operacin 8ue se /a a ejecutar. Esta operacin debe reali5arse sobre algunos datos almacenados en registros de computadora o en palabras de memoria. La manera en 8ue eligen los operandos durante la ejecucin del programa depende del modo de direccionamiento de la instruccin. El modo de direccionamiento especi%ica una regla para interpretar o modi%icar el campo de direccin de la instruccin antes de 8ue se 7aga la re%erencia real al operando. Las computadoras utili5an t@cnicas de modo de direccionamiento para acomodar una o las dos siguientes consideraciones: 1; 0roporcionar al usuario /ersatilidad de programacin al o%recer %acilidades como apuntadores a memoria1 contadores para control de ciclo1 inde6acin de datos y reubicacin de datos. ; *educir la cantidad de bits en el campo de direccionamiento de la instruccin.

Ren Zahor Torres ecerra

!2

Lenguaje Ensamblador
0ara comprender los di%erentes modos de direccionamiento 8ue se presentaran en esta seccin1 es imperati/o entender el ciclo de operacin b3sico de la computadora. La unidad de control de una computadora est3 diseAada para recorrer un ciclo de instrucciones 8ue se di/ide en tres %ases principales: 1; )?s8ueda de la instruccin de la memoria. ; Decodi%icar la instruccin. !; Ejecutar la instruccin. +ay un registro en la computadora llamado contador de programa o 0$1 8ue lle/a un registro de las instrucciones del programa almacenado en la memoria. 0c contiene la direccin de la siguiente instruccin 8ue se /a a ejecutar y se incrementa cada /e5 8ue se recupera una instruccin de la memoria. La decodi%icacin reali5ada en el paso determina la operacin 8ue se /a a ejecutar1 el modo de direccionamiento de la instruccin y la posicin de los operandos. Despu@s la computadora ejecuta la instruccin y regresa al paso 1 para 7acer la b?s8ueda de la siguiente instruccin en secuencia. Aun8ue la mayora de los modos de direccionamiento modi%ican el campo de direccin de la instruccin1 7ay dos modos 8ue no necesitan el campo de direccin. -on los modos implcito e inmediato. (odo Implcito$ En este modo se especi%ican los operandos en %orma implcita en la de%inicin de la instruccin. 0or ejemplo1 la instruccin Pcomplementar acumuladorP es una instruccin de modo implcito por8ue el operando en el registro de acumulador est3 implcito en la de%inicin de la instruccin. De 7ec7o todas las instrucciones de re%erencia a registro 8ue utili5an un acumulador son instrucciones de modo implcito. Las instrucciones de direccin cero en una computadora organi5ada con pila son instrucciones de modo implcito por8ue est3 implcito 8ue los operandos est3n en la parte superior de la pila. (odo Inmediato$ En este modo se especi%ica el operando en la instruccin misma. En otras palabras1 una instruccin de modo inmediato tiene un campo operando1 en lugar de un campo de direccin. Un campo de operando contiene el operando real 8ue se /a a usar junto con la operacin especi%icada en la instruccin. Las instrucciones de modo inmediato son ?tiles para iniciali5ar registros en un /alor constante. -e menciono antes 8ue el campo de direccin de una instruccin puede especi%icar una palabra de memoria o un registro de procesador. $uando el campo de direccin especi%ica un registro de procesador se dice 8ue la instruccin esta en modo de registro.
Ren Zahor Torres ecerra !6

Lenguaje Ensamblador
(odo de Registro En este modo1 los operandos est3n en registros 8ue residen dentro de la $0U. -e selecciona el registro particular de un campo de registro en la instruccin. Un campo . bits puede especi%icar cual8uiera de a la . registros. (odo Indirecto por Registro$ En este modo la instruccin especi%ica un registro en la $0U cuyo contenido proporciona la direccin del operando en la memoria. En otras palabras1 el registro seleccionado contiene la direccin del operando en lugar del operando mismo. Antes de utili5ar una instruccin de modo indirecto por registro1 el programador debe asegurarse de 8ue la direccin de memoria del operando est3 colocada en el registro del procesador con una instruccin pre/ia. Entonces una re%erencia al registro es e8ui/alente a especi%icar una direccin de memoria. La /entaja de una instruccin de modo de registro indirecto es 8ue el campo de direccin de la instruccin utili5a menos bits para seleccionar un registro de los 8ue necesitara para especi%icar una direccin de memoria en %orma directa. (odo de 0ireccionamiento 0irecto$ En este modo la direccin e%ecti/a es igual a la parte de direccin de la instruccin. El operando reside en memoria y su direccin la proporciona en %orma directa el campo de direccin de la instruccin. En una instruccin de tipo brinco el campo de direccin especi%ica la direccin de trans%erencia de control del programa real. (odo de 0ireccionamiento Indirecto$ En este modo1 el campo de direccin de la instruccin proporciona la direccin en 8ue se almacena la direccin e%ecti/a en la memoria. El control recupera la instruccin de la memoria y utili5a su parte de direccin para accesar la memoria una /e5 m3s con el %in de leer la direccin e%ecti/a. Unos cuantos modos de direccionamiento re8uieren 8ue el campo de direccin de la instruccin se sume al contenido de un registro espec%ico en la $0U. En estos modos la direccin e%ecti/a se obtiene del c3lculo siguiente: Direccin e%ecti/a N 0arte de la instruccin Q El contenido de registro $0U. EL registro de $0U utili5ado en el c3lculo puede ser el contador de programa1 un registro de ndice o un registro base. En cual8uier caso tenemos un modo de direccionamiento di%erente 8ue se utili5a para una aplicacin distinta.
Ren Zahor Torres ecerra !8

Lenguaje Ensamblador
(odo de 0ireccionamiento IndeBado$ En este modo el contenido de un registro ndice se suma a la parte de direccin de la instruccin para obtener la direccin e%ecti/a. El registro ndice es un registro $0U especial 8ue contiene un /alor ndice. Un campo de direccin de la instruccin de%ine la direccin inicial del arreglo de datos en la memoria. $ada operando del arreglo se almacena en la memoria en relacin con la direccin inicial. La distancia entre la direccin inicial y la direccin del operando es el /alor del ndice almacenado en el registro de ndice. $ual8uier operando en el arreglo puede accesarse con la misma instruccin siempre y cuando el registro ndice contenga el /alor de ndice correcto. El registro ndice puede incrementarse para %acilitar el acceso a operandos consecuti/os. Algunas computadoras dedican un registro de $0U para 8ue %uncione e6clusi/amente como un registro ndice. De manera implcita este registro participa cuando se utili5a una instruccin de modo ndice. En las computadoras con muc7os registros de procesador1 cual8uiera de los registros de la $0U pueden contener el n?mero de ndice. En talcaso1 el registro debe estar especi%icado en %orma e6plcita en un campo de registro dentro del %ormato de instruccin. (odo de 0ireccionamiento de Registro ase$ En este modo1 el contenido de un registro base se suma a la parte de direccin de la instruccin para obtener la direccin e%ecti/a. Esto es similar al modo de direccionamiento inde6ado1 e6cepto en 8ue el registro se denomina a7ora registro base1 en lugar de registro ndice. La di%erencia entre los dos modos est3 en la manera en 8ue se usan m3s 8ue en la manera en 8ue se calculan. -e considera 8ue un registro base contiene una direccin base y 8ue el campo de direccin de la instruccin proporciona un despla5amiento en relacin con esta direccin base. El modo de direccionamiento de registro base se utili5a en las computadoras para %acilitar la locali5acin de los programas en memoria. (odo de 0ireccionamiento IndeBado$ En este modo el contenido de un registro ndice se suma a la parte de direccin de la instruccin para obtener la direccin e%ecti/a. El registro ndice es un registro $0U especial 8ue contiene un /alor ndice. Un campo de direccin de la instruccin de%ine la direccin inicial del arreglo de datos en la memoria. $ada operando del arreglo se almacena en la memoria en relacin con la direccin inicial. La distancia entre la direccin inicial y la direccin del operando es el /alor del ndice almacenado en el registro de ndice. $ual8uier operando en el arreglo puede accesarse con la misma instruccin siempre y cuando el registro ndice contenga el /alor de ndice correcto. El registro ndice puede incrementarse para %acilitar el acceso a operandos consecuti/os.
Ren Zahor Torres ecerra !:

Lenguaje Ensamblador
Algunas computadoras dedican un registro de $0U para 8ue %uncione e6clusi/amente como un registro ndice. De manera implcita este registro participa cuando se utili5a una instruccin de modo ndice. En las computadoras con muc7os registros de procesador1 cual8uiera de los registros de la $0U pueden contener el n?mero de ndice. En tal caso1 el registro debe estar especi%icado en %orma e6plcita en un campo de registro dentro del %ormato de instruccin. (odo de 0ireccionamiento de Registro ase$ En este modo1 el contenido de un registro base se suma a la parte de direccin de la instruccin para obtener la direccin e%ecti/a. Esto es similar al modo de direccionamiento inde6ado1 e6cepto en 8ue el registro se denomina a7ora registro base1 en lugar de registro ndice. La di%erencia entre los dos modos est3 en la manera en 8ue se usan m3s 8ue en la manera en 8ue se calculan. -e considera 8ue un registro base contiene una direccin base y 8ue el campo de direccin de la instruccin proporciona un despla5amiento en relacin con esta direccin base. El modo de direccionamiento de registro base se utili5a en las computadoras para %acilitar la locali5acin de los programas en memoria .
"

!$'$ Interrupciones Una interrupcin es una operacin 8ue suspende la ejecucin de un programa de modo 8ue el sistema pueda reali5ar una accin especial. La rutina de interrupcin ejecuta y por lo regular regresa el control al procedimiento 8ue %ue interrumpido1 el cual entonces reasume su ejecucin. !$'$!$ 5ardCare Las interrupciones 7ard,are ocurren cuando un dispositi/o necesita atencin del procesador y genera una seAal el@ctrica en la lnea I*R 8ue tiene asignada. Esta seAal es recogida y procesada por el controlador de e6cepciones 0I$ antes de ser en/iada al procesador1 lo 8ue puede reali5arse de dos %ormas1 seg?n el tipo de interrupcin sea enmascarable o no enmascarable. $uando se 7abla de una signi%ica 8ue1 bajo control del so%t,are1 el procesador puede aceptar o ignorar :enmascarar; la seAal de interrupcin. 0ara ello se en/a una seAal a la patilla IF"*1 y el procesador la atiende o la ignora en %uncin del contenido de un bit :IF; en un registro :FLAL-; 8ue puede estar 7abilitado o des7abilitado. En el primer caso1 cuando se recibe la seAal1 el procesador concluye la instruccin 8ue estu/iese en proceso y a continuacin responde con una combinacin de seAales en algunas de sus patillas componiendo una sucesin de dos seAales IF"A :PInterrupt Ac.no,ledgeP;. La primera seAal es simplemente un a/iso9 la segunda es una peticin para 8ue el 0I$ colo8ue en el bus de datos un )yte con el n?mero de interrupcin1 de %orma 8ue el procesador pueda locali5ar el ser/icio solicitado.

Semana "; Tarea b- 5acer un ejemplo de cada uno de los modos de 0ireccionamiento

Ren Zahor Torres ecerra

!=

Lenguaje Ensamblador
El /alor recibido :=B ''; es multiplicado por # para calcular la direccin del /ector correspondiente en la tabla de /ectores de interrupcin1 lo 8ue se reali5a mediante un despla5amiento binario de dos posiciones a la i58uierda. Interrupcin no enmascarable signi%ica 8ue la interrupcin no puede ser des7abilitada por so%t,are. Este tipo de interrupciones ocurren cuando se recibe una seAal en la patilla F&I :PFonmas.able InterruptP; del procesador. -e reser/an para casos en 8ue es crtica la respuesta1 por ejemplo 8ue se detecte un error de paridad en la memoria. Adem3s son de prioridad m3s alta 8ue las enmascarables. !$'$"$ So1tCare Los procesadores Intel de la gama 6<2 y compatibles1 disponen de una instruccin IF" 8ue permite generar por so%t,are cual8uiera de los '2 tipos de interrupcin anteriormente descritos. El proceso seguido es e6actamente el mismo 8ue si se recibe una interrupcin 7ard,are en la patilla IF"*1 sal/o 8ue en este caso se conoce el tipo de interrupcin1 y no se re8uiere ning?n ciclo IF"A. Este tipo de interrupciones son de prioridad m3s alta 8ue las de 7ard,are :enmascarables y no enmascarables;1 de %orma 8ue si se recibe una interrupcin 7ard,are mientras 8ue se ejecuta una so%t,are1 esta ?ltima tiene prioridad. /unciones de la ios$ Las %unciones de la )I4- se in/ocan1 desde los programas de usuario1 ejecutando una interrupcin so%t,are con un cierto /alor inicial en los registros. La )I4- emplea un cierto rango de interrupciones1 cada una encargada de una tarea espec%ica: IF" 1=7: IF" 117: IF" 1 7: IF" 1!7: IF" 1#7: IF" 1'7: IF" 127: IF" 1I7: IF" 1<7: IF" 1H7: IF" 1A7: IF" 1F7: -er/icios de Gdeo :te6to y gr3%icos;. In%orme sobre la con%iguracin del e8uipo. In%orme sobre el tamaAo de la memoria con/encional. -er/icios de disco :muy elementales: pistas1 sectores1 etc.;. $omunicaciones en serie. Funciones casette :0$; y ser/icios especiales del sistema :A";. -er/icios de teclado. -er/icios de impresora. Llamar a la *4& del )A-I$ :slo m38uinas I)&;. *einiciali5acin del sistema. -er/icios 7orarios. Apunta a la tabla de los caracteres A-$II 1 <B '' :<6< puntos;.

Ren Zahor Torres ecerra

">

Lenguaje Ensamblador
/unciones del 0+S$ El D4- emplea /arias interrupciones1 al igual 8ue la )I4-9 sin embargo1 cuando se 7abla de %unciones del D4-1 todo el mundo sobreentiende 8ue se trata de llamar a la IF" 171 la interrupcin m3s importante con di%erencia. IF" =7: "erminar programa :tal /e5 en desuso;. IF" 17: -er/icios del D4-. IF" 7: $ontrol de %inali5acin de programas. IF" !7: "ratamiento de $trlB$. IF" #7: "ratamiento de errores crticos. IF" '7: Lectura absoluta de disco :sectores lgicos;. IF" 27: Escritura absoluta en disco :sectores lgicos;. IF" I7: "erminar dejando residente el programa :en desuso;. IF" <7: Idle :ejecutada cuando el ordenador est3 inacti/o;. IF" H7: Impresin r3pida en pantalla :no tanto;. IF" A7: *ed local &- FE". IF" )7B D7: Uso interno del D4-. IF" E7: 0rocesos )atc7. IF" F7: Interrupcin &ultiple6. IF" !=7B!17: $ompatibilidad $0(&B<=. IF" ! 7: *eser/ada.
'

!$.$ Estructura de un programa En ensamblador En esta parte se describe lo 8ue es el lenguaje ensamblador1 no al ensamblador o al proceso de ensamblado. A8u se tratar3 todo lo concerniente con el lenguaje ensamblador y el conjunto de directi/as del &icroso%t &acro Assembler /#.=. -i bien esto puede resultar bastante e6tenso y complejo1 a8u slo se describir3n las instrucciones y directi/as b3sicas. 0ara comen5ar /eamos un pe8ueAo ejemplo 8ue ilustra el %ormato del programa %uente. Este ejemplo est3 completamente desarrollado en lenguaje ensamblador 8ue usa ser/icios o %unciones de &-BD4- :system calls; para imprimir el mensaje D5ola mundoEEF en pantalla.

Semana '; Tarea c- InGestigar por lo menos ' 1ragmentos de cdigo donde se utilicen por lo menos una interrupcin

Ren Zahor Torres ecerra

"!

Lenguaje Ensamblador
9 SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS 9 Arc7i/o: +ola.A-& 9 Autor: *en@ Oa7or "orres )ecerra 9 Descripcin: 0rograma cl3sico de ejemplo. Despliega una leyenda en pantalla. 9 Fec7a de $reacin: =#(= ( =1! 9 Fec7a de Tltima *e/isin: =#(= ( =1! 9SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS H 0e1inicin del Segmento de 4ila -"A$C -"A$C -EL&EF" -"A$C D> 2# DU0 :U; EFD9 -egmento de pila 9 De%ine espacio en la pila

H 0e1inicin del Segmento de 0atos DA"A DA"A -EL&EF" -ALUD4 D) P+ola mundoVVP11!11=1PWP EFD9 -egmento de datos 9 $adena

H 0e1inicin del Segmento de Cdigo $4DE -EL&EF" A--U&E $-:$4DE1 D-:DA"A1 --:-"A$C IFI$I4: &4G AM1DA"A &4G D-1AM &4G DM14FF-E" -ALUD4 &4G A+1=H+ IF" 1+ &4G A+1#$+ IF" 1+ EFDIFI$I4 9 -egmento de $odigo 9 0unto de entrada al programa 9 0one direccin en AM 9 0one la direccin en los registros 9 4btiene direccin del mensaje 9 Funcin: Gisuali5ar cadena 9 -er/icio: Funciones alto ni/el D49 Funcin: "erminar 9 -er/icio: Deja el $ontrol a D49 Fin del -egmento de $digo llamado $4DE 9 &arca %in y de%ine IFI$I4

$4DE EFD

La descripcin del programa es como sigue:

1; Las declaraciones SE?(E@T y E@0S de%inen los segmentos a usar. ; La /ariable S&L#0+ en el segmento 0&T&1 de%ine la cadena a ser desplegada. El signo
del dlar al %inal de la cadena :denominado centinela; es re8uerido por la %uncin de /isuali5acin de la cadena de &-BD4-. La cadena incluye los cdigos para carriagereturn y line-feed. La eti8ueta I@ICI+; en el segmento de cdigo marca el inicio de las instrucciones del programa. La declaracin 0I en el segmento de pila de%ine el espacio para ser usado por el stac. del programa. La declaracin &SS#(E indica 8ue registros de segmento se asociar3n con las eti8uetas declaradas en las de%iniciones de segmentos. Las primeras dos instrucciones cargan la direccin del segmento de datos en el registro 0S. Estas instrucciones no son necesarias para los segmentos de cdigo y stac. puesto 8ue la direccin del segmento de cdigo siempre es cargado en el registro CS y la direccin de la declaracin del stac. segment es autom3ticamente cargada en el registro SS. Las ?ltimas dos instrucciones del segmento C+0E usa la %uncin .C5 de &-BD4- para regresar el control al sistema operati/o. E6isten muc7as otras %ormas de 7acer esto1 pero @sta es la m3s recomendada. La directi/a E@0 indica el %inal del cdigo %uente y especi%ica a I@ICI+ como punto de arran8ue

!; #; '; 2;

I; <;

Ren Zahor Torres ecerra

""

Lenguaje Ensamblador

Representacin ?rJ1ica de los Segmentos de 4ila< 0atos % Cdigo de Lenguaje Ensamblador

!$.$!$ 0ata Segment Es una de las secciones de un programa en un objeto de arc7i/o o en la memoria1 8ue contiene el /ariables globales y /ariables est3ticas 8ue se iniciali5an por el programador. "iene un tamaAo %ijo1 ya 8ue todos los datos de esta seccin se establecen por el programador antes de 8ue el programa se carga. -in embargo1 no es de slo lectura1 Ja 8ue los /alores de las /ariables pueden ser modi%icados en tiempo de ejecucin. Esto est3 en contraste con la * o data :$onstante1 los datos de slo lectura; en la seccin1 as como el cdigo de segmento :"ambi@n conocido como segmento de te6to;. En la ar8uitectura de 0$ 7ay cuatro b3sicas de lectura y escritura regiones de memoria en un programa: Datos.B $ontiene las /ariables globales y est3ticos utili5ados por el programa 8ue se iniciali5an. Este segmento puede ser clasi%icada en el 3rea iniciali5ada de slo lectura y se iniciali5a la 5ona de lectura y escritura. )-- segmento.B conocido como -in iniciali5ar los datos comien5a al %inal del segmento de datos y contiene todas las /ariables sin iniciali5ar /ariables est3ticas y globales 8ue se iniciali5an a cero de %orma predeterminada. &ontn de espacio :+eap;.B comien5a a %inales de la )-- segmento y crece a grandes direcciones de all. El 3rea de montn es dirigido por malloc1 *ealloc1 y libre1 8ue pueden utili5ar el sistema br. y sbr. llamadas1 para ajustar el tamaAo :aun8ue tenga en cuenta 8ue el uso de br. ( sbr. y una sola P5ona escombreraP no est3 obligado a cumplir el contrato de malloc ( realloc ( gratuita1 sino 8ue tambi@n puede ser implementado usando mmap para reser/ar regiones potencialmente no contiguos de memoria /irtual en el proceso X espacio de direcciones /irtuales;. El

Ren Zahor Torres ecerra

"'

Lenguaje Ensamblador
3rea de montn es compartida por todas las bibliotecas compartidas y mdulos de carga din3mica de un proceso. Apilar.B es una LIF4 estructura1 normalmente se encuentra en la parte alta de la memoria. 0or lo general1 Pcrece 7acia abajoP con todos los registros1 el /alor inmediato o marco de pila se aAadi a la misma. Un marco de pila se compone como mnimo de una direccin de retorno.

!$.$"$ StacK Segment En t@rminos sencillos1 la pila contiene los datos y direcciones 8ue usted necesita guardar temporalmente o para uso de sus PllamadasP subrutinas. El registro de segmento de la pila :--; direcciona el segmento de la pila. !$.$'$ Code Segment $ontiene las instrucciones de m38uina 8ue son ejecutadas por lo com?n la primera instruccin ejecutable est3 en el inicio del segmento1 y el sistema operati/o enla5a a esa localidad para iniciar la ejecucin del programa. El registro del $- direcciona el segmento de cdigo Elementos Jsicos Comentarios del Lenguaje Ensamblador El uso de comentarios a lo largo de un programa puede mejorar su claridad1 en especial en lenguaje ensamblador1 donde el propsito de un conjunto de instrucciones con %recuencia no es claro. Un comentario empie5a con punto y coma :. y1 en donde 8uiera 8ue lo codi%i8ue1 el ensamblador supone 8ue todos los caracteres a la derec7a de esa lnea son comentarios. Un comentario puede contener cual8uier car3cter imprimible1 incluyendo el espacio en blanco. Un comentario puede aparecer solo en una lnea o a continuacin de una instruccin en la misma lnea1 como lo muestran los dos ejemplos siguientes: 1. . H "oda esta lnea es un comentario. $ ADD AM1 )M 9 $omentario en la misma lnea 8ue la instruccin.

Ja 8ue un comentario aparece solo en un listado de un programa %uente en ensamblador y no genera cdigo de m38uina1 puede incluir cual8uier cantidad de comentarios sin a%ectar el tamaAo o la ejecucin del programa ensamblado 4tra manera de proporcionar comentarios es por medio de la directi/a C+((E@T$

Ren Zahor Torres ecerra

".

Lenguaje Ensamblador
4alabras ReserGadas $iertas palabras en lenguaje ensamblador est3n reser/adas para sus propsitos propios1 y son usadas solo bajo condiciones especiales. 0or categoras1 las palabras reser/adas incluyen Instrucciones1 como &4G y ADD1 8ue son operaciones 8ue la computadora puede ejecutar Directi/as como EFD o -EL&EF"1 8ue se emplean para proporcionar comandos al ensamblador. 4peradores1 como FA* y -IOE1 8ue se utili5an en e6presiones. -mbolos prede%inidos1 como YData y Y&odel1 8ue regresan in%ormacin a su programa.

El uso de una palabra reser/ada para un propsito e8ui/ocado pro/oca 8ue el ensamblador genere un mensaje de error. Ger palabras reser/adas. Identi1icadores$ Un identi%icador es un nombre 8ue se aplica a elementos en el programa. Los dos tipos de identi%icadores son: nombre1 8ue se re%iere a la direccin de un elemento de dato1 y eti8ueta1 8ue se re%iere a la direccin de una instruccin. Las mismas reglas se aplican tanto para los nombres como para las eti8uetas. Un identi%icador puede usar los siguientes caracteres: !- Letras del al1abeto; Desde la A 7asta la O "- 0gitos; Desde el = al H :no puede ser el primer car3cter; '- Caracteres especiales; -igno de interrogacin : U ;-ubrayado : Z ; -igno de pesos : W ; Arroba : Y ; 0unto : . ; :no puede ser el primer car3cter; El primer car3cter de un identi%icador debe ser una letra o un car3cter especial1 e6cepto el punto. Ja 8ue el ensamblador utili5a algunos smbolos especiales en palabras 8ue inician con el smbolo Y1 debe e/itar usarlo en sus de%iniciones.

Ren Zahor Torres ecerra

"2

Lenguaje Ensamblador
El ensamblador trata las letras may?sculas y min?sculas como iguales. La longitud m36ima de un identi%icador es de !1 caracteres : #I desde el &A-& 2.=;. Ejemplos de nombres /alidos son $4UF"1 0ALE ' y WE1=. -e recomienda 8ue los nombres sean descripti/os y con signi%icado. Los nombres de registros1 como AM1 DI y AL1 est3n reser/ados para 7acer re%erencia a esos mismos registros. En consecuencia1 en una instruccin tal como: &00 &X< X El ensamblador sabe de %orma autom3tica 8ue AM y )M se re%ieren a los registros. -in embargo1 en una instruccin como: (+L RE?S&LE< &X El ensamblador puede reconocer el nombre *EL-AGE solo si se de%ine en alg?n lugar del programa. !$.$.$ Instrucciones del 4rograma Un programa en lenguaje ensamblador consiste en un conjunto de enunciados. Los dos tipos de enunciados son: 1; Instrucciones1 tal como &4G y ADD1 8ue el ensamblador traduce a cdigo objeto. ; Directi/as1 8ue indican al ensamblador 8ue reali5a una accin espec%ica1 como de%inir un elemento de dato. A continuacin esta el %ormato general de un enunciado1 en donde los corc7etes indican una entrada opcional: Midenti1icadorN operacin Moperando*s-N MHcomentariosN Un identi%icador :si e6iste;1 una operacin y un operando :si e6iste; est3n separados por al menos un espacio en blanco o un car3cter tabulador. E6iste un m36imo de 1! caracteres en una lnea :'1 desde el &A-& 2.=;1 aun8ue la mayora de los programadores pre%iere permanecer en los <= caracteres ya 8ue es el n?mero m36imo 8ue cabe en la pantalla. A continuacin se presentan dos ejemplos de enunciados:
I0E@TI/IC&0+R +4ER&CI3@ +4ER&@0+ HC+(E@T&RI+

Directi/a: Instruccin:

$4UF" &4G

D) AM1

1 =

9Fom1 4p1 4perando 94peracin1 4perando

Identi%icador1 operacin y operando pueden empe5ar en cual8uier columna. -in embargo1 si de manera consistente se inicia en la misma columna para estas tres entradas se 7ace un programa m3s legible.

Ren Zahor Torres ecerra

"6

Lenguaje Ensamblador

I0E@TI/IC&0+R

$omo ya se e6plico1 el termino nombre se aplica al nombre de un elemento o directi/a de%inida1 mientras 8ue el termino eti8ueta se aplica al nombre de una instruccin.

+4ER&CI3@

La operacin1 8ue debe ser codi%icada1 es con mayor %recuencia usada para la de%inicin de 3reas de datos y codi%icacin de instrucciones. 0ara un elemento de datos1 una operacin como D) o D> de%ine un campo1 3rea de trabajo o constante.

+4ER&@0+

El operando :si e6iste; proporciona in%ormacin para la operacin 8ue act?a sobre @l. 0ara un elemento de datos1 el operando identi%ica su /alor inicial. 0or ejemplo1 en la de%inicin siguiente de un elemento de datos llamado $4UF"E*1 la operacin D) signi%ica Pde%inir byteP1 y el operando iniciali5a su contenido con un /alor cero: 0ara una instruccin1 un operando indica en donde reali5ar la accin. Un operando de una instruccin puede tener una1 dos o tal /e5 ninguna entrada. A8u est3n tres ejemplos: El juego completo de instrucciones reconocidas por los procesadores Intel <=<2 a <= <21 junto con los coprocesadores <=<I y <= <I1 se enlistan en el ap@ndice A. $omo puede /erse en dic7o ap@ndice1 la mayora de las instrucciones re8uieren algunos operandos o expresiones para trabajar1 y lo cual es /3lido tambi@n para las directi/as. Los operandos representan /alores1 registros o localidades de memoria a ser accesadas de alguna manera. Las e6presiones combinan operandos y operadores aritm@ticos y lgicos para calcular en /alor o la direccin a acceder. Los operandos permitidos se enlistan a continuacin: Constantes.B 0ueden ser nmeros1 cadenas o expresiones 8ue representan un /alor %ijo. 0or ejemplo1 para cargar un registro con /alor constante usaramos la instruccin (+L indicando el registro y el /alor 8ue cargaramos dic7o registro.
mo/ mo/ mo/ mo/ count a61H al1[c[ b612''!'(! c61count slo sera /3lido si este %ue declarado con la directi/a EO#.

0irectos.B A8u se debe especi%icar la direccin de memoria a accesar en la %orma segmento; offset.
mo/ mo/ mo/ a61ss:==!17 al1data:= b61DL*4U0:bloc.

Ren Zahor Torres ecerra

"8

Lenguaje Ensamblador
Relocali)ables.B 0or medio de un smbolo asociado a una direccin de memoria y 8ue puede ser usado tambi@n para llamados.
mo/ call mo/ mo/ count a61 /alue main al14FF-E" dgroup:tabla b61 count slo ser3 /3lido si %ue declarado con la directi/a 0I.

Contador de locali)acin.B Usado para indicar la actual locali5acin en el actual segmento durante el ensamblado. *epresentado con el smbolo P y tambi@n conocido como centinela.
7elp D) [40$I4FE-[11!11= F1 D) [ F1 sal/a pantalla[11!11= . . . F1= D) [ F1= e6it[11!11=1[W DI-"AF$IA N WB7elp

Registros.B $uando se 7ace re%erencia a cual8uiera de los registros de propsito general1 apuntadores1 ndices1 o de segmento. asados.B Un operador basado representa una direccin de memoria relati/a a uno de los registros de base : 4 o X;. -u sinta6is es:
desplazamiento\ 4] desplazamiento\ X] \desplazamiento]\ 4] \ 4Qdesplazamiento] \ 4].desplazamiento \ 4]Qdesplazamiento

en cada caso la direccin e%ecti/a es la suma del despla5amiento y el contenido del registro.
&o/ mo/ mo/ mo/ a61\)0] al1\b6] b611 \b6] b61%red\bp]

IndeBado.B Un operador inde6ado representa una direccin de memoria relati/a a uno de los registros ndice :SI o 0I;. -u sinta6is es:
desplazamiento\0I] desplazamiento\SI] \desplazamiento]\0I] \0IQdesplazamiento] \0I].desplazamiento \0I]Qdesplazamiento

Ren Zahor Torres ecerra

":

Lenguaje Ensamblador
en cada caso la direccin e%ecti/a es la suma del despla5amiento y el contenido del registro.
mo/ a61\si] mo/ al1\di] mo/ b611 \di] mo/ b61%red\si]

ase,indeBados.B Un operador baseBinde6ado representa una direccin de memoria relati/a a la combinacin de los registros de base e ndice. -u sinta6is es:
desplazamiento\ 4]\SI] desplazamiento\ X]\0I] desplazamiento\ X]\SI] desplazamiento\ 4]\0I] \desplazamiento]\ 4]\0I] \ 4Q0IQdesplazamiento] \ 4Q0I].desplazamiento \0I]QdesplazamientoQ\ 4]

en cada caso la direccin e%ecti/a es la suma del despla5amiento y el contenido del registro.
mo/ a61\)0]\si] mo/ al1\b6Qdi] mo/ b611 \bpQdi] mo/ b61%red\b6]\si]

Estructuras.B -u sinta6is es variable$campo. variable es el nombre con 8ue se declar la estructura1 y campo es el nombre del campo dentro de la estructura.
date -"*U$ mes D> U dia D> U aa D> U date EFDactual date [ja[1[=1[1[<#[ mo/ a61actual.dia mo/ actual.aa1 [<'[

+peradores % eBpresiones.B -e cuenta con los siguientes operadores:


&ritmticos expresin1 Q expresin2 expresin1 7 expresin2 expresin1 (+0 expresin2 expresin1 R expresin2 expresin1 , expresin2 + expresin , expresin

Ren Zahor Torres ecerra

"=

Lenguaje Ensamblador
0e corrimiento expresin1 S5R contador expresin1 S5L contador Relacionales expresin1 EO expresin2 expresin1 @E expresin2 expresin1 LT expresin2 expresin1 LE expresin2 expresin1 ?T expresin2 expresin1 ?E expresin2 0e bit @+T expresin expresin1 &@0 expresin2 expresin1 +R expresin2 expresin1 X+R expresin2 0e ndice Mexpresin1N \expresin2] ejemplos: mo/ al1 string\!] mo/ string\last]1al mo/ c61dgroup:\1] 9 igual a mo/ c61dgroup:1 0e apuntador tipo 4TR expresin
tipo puede ser STE !1 I+R0 "1 0I+R0 .1 OI+R0 :1 T STE !>1 @E&R >////h 1 /&R >///Eh .

Ejemplos: call FA* 0"* subrout! mo/ )J"E ptr \array]1 1 add al1 )J"E ptr \%ullZ,ord] 0e nombre de campo estructura$campo ejemplos: inc mont7.day mo/ time.min1= mo/ \b6].dest 0e propsito especial +//SET expresion.B *egresa el despla5amiento del operando mo/ b61 4FF-E" dgroup:array mo/ b61 o%%set subrout! S5+RT etiqueta.- 0ara un salto de menos de 1 < bytes jmp -+4*" loop LE@?T5 variable.B *egresa el n?mero de elementos de variable seg?n su tipo mo/ c61lengt7 array SIZE variable.B *egresa el tamaAo en bytes alojados para variable mo/ c61si5e array SE? expresin.B *egresa el /alor del segmento para expresin mo/ a61 -EL saludo

Ren Zahor Torres ecerra

'>

Lenguaje Ensamblador
!$.$2$ 0irectiGas 0irectiGa para Listar; 4&?E % TITLE La directi/a 0ALE y "I"LE ayudan a controlar el %ormato de un listado de un programa en ensamblador. Este es su ?nico %in1 y no tienen e%ecto sobre la ejecucin subsecuente del programa. 4&?E$ Al inicio de un programa1 la directi/a 0ALE designa el n?mero m36imo de lneas para listar en una p3gina y el n?mero m36imo de caracteres en una lnea. -u %ormato general es: 0ALE \longitud]\1 anc7o] El ejemplo siguiente proporciona 2= lneas por p3gina y 1! caracteres por lnea: 4&?E 6>< !'" El n?mero de lneas por pagina puede /ariar desde 1= 7asta ''1 mientras 8ue el numero de caracteres por lnea desde 2= 7asta 1! . La omisin de 0ALE causa 8ue el ensamblador tome 0ALE '=1 <= TITLE$ -e puede emplear la directi/a "I"LE para 7acer 8ue un titulo para un programa se imprima en la lnea de cada p3gina en el listado del programa. 0uede codi%icar "I"LE de una /e51 al inicio del programa. -u %ormato general es: TITLE TeBto$ 0ara el operando te6to1 una t@cnica recomendada es utili5ar el nombre del programa como se registra en el disco. 0or ejemplo: "I"LE 0rog1 &i primer programa en ensamblador 0irectiGa SE?(E@T Un programa ensamblado en %ormato .EME consiste en uno o m3s segmentos. Un segmento de pila de%ine el almac@n de la pila1 un segmento de datos de%ine los elementos de datos y un segmento de cdigo proporciona un cdigo ejecutable. Las directi/as para de%inir un segmento1 -EL&EF" y EFD- tienen el %ormato siguiente

Ren Zahor Torres ecerra

'!

Lenguaje Ensamblador
El enunciado SE?(E@T de%ine el inicio de un segmento. El nombre del segmento debe estar presente1 ser ?nico y cumplir las con/enciones para nombres del lenguaje. EL enunciado EFD- indica el %inal del segmento y contiene el mismo nombre del enunciado -EL&EF". El tamaAo m36imo de un segmento es de 2#C. El operando de un enunciado -EL&EF" puede tener tres tipos de opciones: alineacin1 combinar y clase1 codi%icadas en este %ormato nombre -EL&EF" alineacin combinar X clase X Tipo &lineacin. La entrada alineacin indica el lmite en el 8ue inicia el segmento. 0ara el re8uerimiento tpico1 0A*A1 alinea el segmento con el lmite de un p3rra%o1 de manera 8ue la direccin inicial es di/isible entre 121 o 1=+. En ausencia de un operando 7ace 8ue el ensamblador por omisin tome 0A*A. Tipo Combinar. La entrada combinar indica si se combina el segmento con otros segmentos cuando son enla5ados despu@s de ensamblar. Los tipos de combinar son -"A$C1 $4&&4F1 0U)LI$ y la e6presin A". 0or ejemplo1 el segmento de la pila por lo com?n es de%inido como: nombre -EL&EF" 0A*A -"A$C 0uede utili5ar 0U)LI$ y $4&&4F en donde tenga el propsito de combinar de %orma separada programas ensamblados cuando los enla5a. En otros casos1 donde un programa no es combinado con otros1 puede omitir la opcin o codi%icar F4FE. Tipo Clase. La entrada clase1 encerrada entre apstro%os1 es utili5ada para agrupar segmentos cuando se enla5an. -e utili5a la clase XcodeX para el segmento de cdigos1 XdataX por segmento de datos y Xstac.X para el segmento de la pila. El ejemplo siguiente de%ine un segmento de pila con tipos alineacin1 combinar y clase: nombre -EL&EF" 0A*A -"A$C X-tac.X 0irectiGa &SS#(E$ Un programa utili5a el registro -- para direccionar la pila1 al registro D- para direccionar el segmento de datos y el registro $- para direccionar el segmento de cdigo. 0ara este %in1 usted tiene 8ue indicar al ensamblador el propsito de cada segmento en el programa. La directi/a para este propsito es A--E&E1 codi%icada en el segmento de cdigo como sigue: 40E*A$I4F 40E*AFD4 A--U&E --:nompila1 D-:nomsegdatos1 $-: nomsegcodigo1. . . Los operandos pueden aparecer en cual8uier orden. Al igual 8ue otras directi/as1 A--U&E es solo un mensaje 8ue ayuda al ensamblador a con/ertir cdigo simblico a cdigo ma8uina9 aun puede tener 8ue codi%icar instrucciones 8ue %sicamente cargan direcciones en registros de segmentos en el momento de la ejecucin.
Ren Zahor Torres ecerra '"

Lenguaje Ensamblador
1 0ALE 2=11! "I"LE 0=#A-&1 E-"*U$"U*A DE UF 0*4L*A&A .EME !9BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB # -"A$C-L -EL&EF" 0A*A -"A$C X-tac.X ' ... 2 -"A$C-L EFDI9BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB < DA"A-L -EL&EF" 0A*A XDataX H ... 1= DA"A-L EFD119BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB 1 $4DE-L -EL&EF" 0A*A X$odeX 1! )ELIF 0*4$ FA* 1# 1' 12 1I 1< 1H = 1 $4DE-L EFD )ELIF
.

A--U&E --:-"A$C-L1 D&4G AM1 DA"A-L &4G D-1 AM ... &4G AM1 #$==+ IF" 1+ )ELIF EFD0 EFD-

A"A-L1$-:$4DE-L 94btiene la direccin del segmento de datos 9Almacena direccin en D90eticion 9-alida al D4-

!$2$ 4rocedimientos de ensamble< enlace % ejecucin Un ensamblador es el programa 8ue con/ierte un listado de cdigo %uente en cdigo objeto1 es decir1 lenguaje m38uina :el 8ue %inalmente interpretar3 el procesador;. El cdigo %uente es un %ic7ero 8ue contiene la secuencia de instrucciones en lenguaje ensamblador 8ue %orma el programa1 as como ciertas directi/as o comandos para el propio ensamblador1 8ue 7a sido creado utili5ando un editor de te6to. El cdigo objeto consta del cdigo en lenguaje m38uina y de la in%ormacin necesaria para enla5arlo con otros mdulos objeto. Al construir un programa algunos de sus mdulos pueden colocarse en el mismo mdulo %uente y ensamblarse juntos1 otros pueden estar en mdulos di%erentes y ser ensamblados separadamente. -i se ensamblan por separado1 el mdulo principal1 8ue contiene la primera instruccin 8ue se /a a ejecutar1 debe acabar con una sentencia EFD 8ue indi8ue el punto de entrada al programa1 y cada uno de los otros mdulos deben terminar con una sentencia EFD sin ning?n operando. En cual8uier caso1 los mdulos objeto resultantes1 algunos de los cuales pueden estar agrupados en libreras1 deben ser enla5ados para %ormar el mdulo de carga1 antes de 8ue se pueda ejecutar el programa. Adem3s de dar como salida el mdulo de carga1 el lin.er o enla5ador imprime un mapa de memoria 8ue indica donde ser3n cargados los mdulos objeto en la memoria.
#

Semana .; Tarea d- Traer un ejemplo completo de un programa en Ensamblador % EBplicar su 1uncionamiento

Ren Zahor Torres ecerra

''

Lenguaje Ensamblador
Despu@s de crearse el mdulo de carga1 @ste es cargado por el cargador en la memoria del ordenador y comien5a la ejecucin. Independientemente del sistema1 la combinacin lin.er(cargador debe crear todos los segmentos y asignaciones de direccin necesarios para permitirle al programa %uncionar correctamente. 4aso !; Lo primero que se tiene que hacer si no tienes el programa !"# es entrar en internet especficamente en google y ba$arlo % !"# 2.& y '()* +.&1;. Entra a esa p3gina y a7 desc3rgalo1 ya una /e5 descargado el programa y descomprimido1 lo guardas en Arc7i/os de programas1 si 8uieres puedes crear una carpeta en DcE y guardar todas las carpetas en ella 4aso "; 0ara capturar un cdigo de programa en ,nsamblador se tiene que abrir el -loc. de )otas y una vez abierto capturar el programa segn se desee/ cuando ya se haya terminado de capturar el cdigo guardarlo con el nombre que se desee y con la extensin 0!"# porque si de no hacerlo as no se abrir1 el cdigo/ desde luego se guarda en la carpeta creada en el disco 234.
. model tiny . code . startup mo/ mo/ mo/ mo/ mo/ . e6it . end a61 = b61 ====7 c61 = si1 a6 bp1 c6

4aso '; Despu@s da guarda el cdigo con e6tensin .asm1 se abre el arc7i/o en la ruta especi%ica del smbolo de sistemas :&-BD4-; ya 8ue en este programa compilaremos y ligaremos nuestro programa. 4aso .; Ja estando en smbolo de sistemas empe5amos la compilacin del programa dando las siguientes instrucciones. c;TensambladorTUtasm7G ejemplo!$asm Esta es la direccin donde se encuentra guardado el cdigo tasm. 4aso 2; Ligamento del cdigo 8ue est3 guardado en tasm. 0ara poder ligar el cdigo usaremos una instruccin tlin. como se /er3 a continuacin. c;TensambladorUtlinK7G ejemplo!$asm &uestra el programa en ejecucin.
Ren Zahor Torres ecerra '.

Lenguaje Ensamblador
TlinK ejemplo!$asm El tlin. se utili5a para encontrar la direccin y mostrara la ejecucin del programa. !$6$ Entorno de 4rogramacin A partir de los %uentes obtenidos de un editor1 los %uentes se en/an al Ensamblador el cual1 traduce los nemot@cnicos del lenguaje ensamblador al cdigo objeto de la ma8uina.

J crea un %ic7ero especial de listado de /ariables y procedimientos1 el Lin.er toma todos los %ic7eros objeto y con la in%ormacin sobre las direcciones de memoria para las /ariables y procedimientos 8ue contiene el %ic7ero Listado1 crea el %ic7ero ejecutable %inal El proceso de ensamblado bastan con ejemplo: ^mp eti8 K eti8: El proceso de traduccin de un programa escrito en un lenguaje de alto ni/el a un arc7i/o objeto ejecutable consta de /arias etapas. A continuacin se describen las etapas correspondientes al conjunto de 7erramientas de compilacin gcc! 8ue permite traducir programas escritos en el lenguaje de programacin $. pasos para determinar todas las direcciones1

Usaremos un programa %uente denominado ejemplo escrito en lenguaje de programacin $1 creado en un editor de te6to y guardado como ejemplo.c:
Vinclude Wstdio$hU int main*X print1*Yprograma de ejemploTnY-H return >H Z Ren Zahor Torres ecerra '2

Lenguaje Ensamblador
La traduccin de este programa %uente a un arc7i/o objeto ejecutable se reali5a de la siguiente manera: ejemplo.c El compilador lee el arc7i/o ejemplo.c y lo traduce al arc7i/o objeto ejecutable ejemplo. Esto se reali5a a tra/@s de las cuatro etapas mencionadas. En la primera etapa el preBprocesador :cpp; modi%ica el programa original de acuerdo a lo indicado por las directi/as 8ue comien5an con el caracter _. En este caso la lnea _include `stdio.7a le indica al preBprocesador 8ue debe leer el arc7i/o de encabe5ado stdio.7 e insertar su contenido en el te6to del programa. La salida de esta etapa es el arc7i/o intermedio ejemplo.i

Luego1 ejemplo.i entra en la siguiente etapa1 el compilador :ccl; el cual traduce el programa a lenguaje ensamblador. La salida de esta etapa es el arc7i/o ejemplo.s

En la siguiente etapa1 el ensamblador :as; lee el arc7i/o ejemplo.s y lo traduce en instrucciones de lenguaje de m38uina generando un arc7i/o objeto relocali5able el cual se guarda como ejemplo.o

Luego el enla5ador :ld; enla5a ese arc7i/o objeto con otros arc7i/os asociados a @l1 en este caso ya 8ue el programa llama una biblioteca :la %uncin print% %orma parte de la biblioteca est3ndar de entrada(salida; el enla5ador se encarga de enla5ar el programa con esta biblioteca en particular. -u salida es un arc7i/o objeto ejecutable llamado ejemplo

'

Semana 2; Tarea e- Traer ejemplo de la semana anterior ejecutado en el Emulador de Lenguaje Ensamblador

Ren Zahor Torres ecerra

'6

Lenguaje Ensamblador

#nidad "
"$ Elementos del Lenguaje Ensamblador "$!$ Instrucciones Lineales *de Trans1erencia de 0atos-

Ren Zahor Torres ecerra

'8

Lenguaje Ensamblador

Instrucciones &ritmticas

Ren Zahor Torres ecerra

':

Lenguaje Ensamblador

Ren Zahor Torres ecerra

'=

Lenguaje Ensamblador

Semana 6; Tarea 1- Reali)a un programa [ue utilice instrucciones &ritmticas

Ren Zahor Torres ecerra

.>

Lenguaje Ensamblador

Instrucciones Lgicas

Instrucciones de Comparacin

Ren Zahor Torres ecerra

.!

Lenguaje Ensamblador

Ren Zahor Torres ecerra

."

Lenguaje Ensamblador

Ren Zahor Torres ecerra

.'

Lenguaje Ensamblador

Instrucciones de Entrada7Salida

Instrucciones de Control de 4rograma

Semana 8; Tarea g- Reali)a un programa [ue utilice instrucciones Lgicas de Comparacin % de despla)amiento

Ren Zahor Torres ecerra

..

Lenguaje Ensamblador

Ren Zahor Torres ecerra

.2

Lenguaje Ensamblador

Instrucciones de Cadenas de Caracteres

Ren Zahor Torres ecerra

.6

Lenguaje Ensamblador

+tras Instrucciones

Ren Zahor Torres ecerra

.8

Lenguaje Ensamblador

<

Semana :; Tarea h- Reali)a un programa [ue utilice instrucciones de Entrada7Salida< de Control de 4rograma< 4rocedimiento % de Cadenas de Caracteres

Ren Zahor Torres ecerra

.:

Lenguaje Ensamblador

#nidad '
'$ (odulari)acin '$!$ (acros $uando un conjunto de instrucciones en ensamblador aparecen %recuentemente repetidas a lo largo de un listado1 es con/eniente agruparlas bajo un nombre simblico 8ue las sustituir3 en a8uellos puntos donde apare5can. Esta es la misin de las macros9 por el 7ec7o de soportarlas el ensamblador ele/a su categora a la de macroensamblador1 al ser las macros una 7erramienta muy coti5ada por los programadores. Fo con/iene con%undir las macros con subrutinas: es estas ?ltimas1 el conjunto de instrucciones aparece una sola /e5 en todo el programa y luego se in/oca con $ALL. -in embargo1 cada /e5 8ue se re%erencia a una macro1 el cdigo 8ue @sta representa se expande en el programa de%initi/o1 duplic3ndose tantas /eces como se use la macro. 0or ello1 a8uellas tareas 8ue puedan ser reali5adas con subrutinas siempre ser3 m3s con/eniente reali5arlas con las mismas1 con objeto de economi5ar memoria. Es cierto 8ue las macros son algo m3s r3pidas 8ue las subrutinas :se a7orra un $ALL y un *E"; pero la di%erencia es tan mnima 8ue en la pr3ctica es despreciable en el HH1HHb de los casos. 0or ello1 es absurdo e irracional reali5ar ciertas tareas con macros 8ue pueden ser desarrolladas muc7o m3s e%icientemente con subrutinas: es una pena 8ue en muc7os manuales de ensamblador a?n se 7able de macros para reali5ar operaciones sobre cadenas de caracteres1 8ue generaran programas gigantescos con menos de un 1b de /elocidad adicional. 0e1inicin % orrado de las (acros$ La macro se de%ine por medio de la directi/a &A$*4. Es necesario de%inir la macro antes de utili5arla. Una macro puede llamar a otra. $on %recuencia1 las macros se colocan juntas en un %ic7ero independiente y luego se me5clan en el programa principal con la directi/a IF$LUDE: IF1 IF$LUDE %ic7ero.e6t EFDIF La sentencia IF1 asegura 8ue el ensamblador lea el %ic7ero %uente de las macros slo en la primera pasada1 para acelerar el ensamblaje y e/itar 8ue apare5can en el listado :generado en la segunda %ase;. $on/iene 7acer 7incapi@ en 8ue la de%inicin de la macro no consume memoria1 por lo 8ue en la pr3ctica es indi%erente declarar cientos 8ue ninguna macro: nombreZsimblico &A$*4 \par3metros] ... ... 9 instrucciones de la macro EFD&
Ren Zahor Torres ecerra .=

Lenguaje Ensamblador
El nombre simblico es el 8ue permitir3 en adelante 7acer re%erencia a la macro1 y se construye casi con las mismas reglas 8ue los nombres de las /ariables y dem3s smbolos. La macro puede contener par3metros de manera opcional. A continuacin /ienen las instrucciones 8ue engloba y1 %inalmente1 la directi/a EFD& seAala el %inal de la macro. Fo se debe repetir el nombre simblico junto a la directi/a EFD&1 ello pro/ocara un error un tanto curioso y e6traAo por parte del ensamblador :algo as como cFin del %ic7ero %uente inesperado1 %alta directi/a EFDd;1 al menos con &A-& '.= y "A-& .=. En realidad1 y a di%erencia de lo 8ue sucede con los dem3s smbolos1 el nombre de una macro puede coincidir con el de una instruccin m38uina o una directi/a del ensamblador: a partir de ese momento1 la instruccin o directi/a machacada pierde su signi%icado original. El ensamblador dar3 adem3s un a/iso de ad/ertencia si se emplea una instruccin o directi/a como nombre de macro1 aun8ue tolerar3 la operacin. Formalmente se las asignar3 nombres normales1 como a las /ariables. -in embargo1 si alguna /e5 se rede%iniera una instruccin m38uina o directi/a1 para restaurar el signi%icado original del smbolo1 la macro puede ser borrada Bo simplemente por8ue ya no /a a ser usada a partir de cierto punto del listado1 y as ya no consumir3 espacio en las tablas de macros 8ue mantiene en memoria el ensamblador al ensamblarB. Fo es necesario borrar las macros antes de rede%inirlas. 0ara borrarlas1 la sinta6is es la siguiente: 0U*LE nombreZsimblico\1nombreZsimblico1...] Ejemplo de una (acro Sencilla Desde el <2 e6iste una instruccin muy cmoda 8ue introduce en la pila < registros1 y otra 8ue los saca :0U-+A y 040A;. Ruien est@ acostumbrado a emplearlas1 puede crear unas macros 8ue simulen estas instrucciones en los <=<2: -U0E*0U-+ &A$*4 0U-+ AM 0U-+ $M 0U-+ DM 0U-+ )M 0U-+ -0 0U-+ )0 0U-+ -I 0U-+ DI EFD&

La creacin de -U0E*040 es an3loga1 sacando los registros en orden in/erso. El orden elegido no es por capric7o y se corresponde con el de la instruccin 0U-+A original1 para compatibili5ar. A partir de la de%inicin de esta macro1 tenemos a nuestra disposicin una nueva instruccin m1quina :-U0E*0U-+; 8ue puede ser usada con libertad dentro de los programas.

Ren Zahor Torres ecerra

2>

Lenguaje Ensamblador
4arJmetros /ormales % 4arJmetros &ctuales 0ara 8uien no 7aya tenido relacin pre/ia con alg?n lenguaje estructurado de alto ni/el1 7ar@ un bre/e comentario acerca de lo 8ue son los par3metros %ormales y actuales en una macro1 similar a8u a los procedimientos de los lenguajes de alto ni/el. $uando se llama a una macro se le pueden pasar opcionalmente un cierto n?mero de par3metros de cierto tipo. Estos par3metros se denominan par1metros actuales. En la de%inicin de la macro1 dic7os par3metros aparecen asociados a ciertos nombres arbitrarios1 cuya ?nica misin es permitir distinguir unos par3metros de otros e indicar en 8u@ orden son entregados: son los par1metros formales. $uando el ensamblador e6panda la macro al ensamblar1 los par3metros %ormales ser3n sustituidos por sus correspondientes par3metros actuales. $onsiderar el siguiente ejemplo:
-U&A* &A$*4 a1b1total 0U-+ AM &4G AM1a ADD AM1b &4G total1AM 040 AM EFD& .... -U&A* positi/os1 negati/os1 total

En el ejemplo1 cad1 cbd y ctotald son los par3metros %ormales y cpositi/osd1 cnegati/osd y ctotald son los par3metros actuales. "anto cad como cbd pueden ser /ariables1 eti8uetas1 etc. en otro punto del programa9 sin embargo1 dentro de la macro1 se comportan de manera independiente. El par3metro %ormal ctotald 7a coincidido en el ejemplo y por casualidad con su correspondiente actual. El cdigo 8ue genera el ensamblador al e6pandir la macro ser3 el siguiente:
0U-+ &4G ADD &4G 040 AM AM1positi/os AM1negati/os total1AM AM

Las instrucciones 0U-+ y 040 sir/en para no alterar el /alor de AM y conseguir 8ue la macro se comporte como una ca$a negra9 no es necesario 8ue esto sea as pero es una buena costumbre de programacin para e/itar 8ue los programas 7agan cosas raras. En general1 las macros de este tipo no deberan alterar los registros y1 si los cambian1 7ay 8ue tener muy claro cu3les. -i se indican m3s par3metros de los 8ue una macro necesita1 se ignorar3n los restantes. En cambio1 si %altan1 el &A-& asumir3 8ue son nulos :=; y dar3 un mensaje de ad/ertencia1 el "A-& es algo m3s rgido y podra dar un error. En general1 se trata de situaciones atpicas 8ue deben ser e/itadas.

Ren Zahor Torres ecerra

2!

Lenguaje Ensamblador
"ambi@n puede darse el caso de 8ue no sea posible e6pandir la macro. En el ejemplo1 no 7ubiera sido posible ejecutar -U&A* AM1)M1DL por8ue DL es de < bits y la instruccin &4G DL1AM sera ilegal. Eti[uetas dentro de (acros$ Lariables Locales$ -on necesarias normalmente para los saltos condicionales 8ue contengan las macros m3s complejas. -i se pone una eti8ueta a donde saltar1 la macro slo podra ser empleada una /e5 en todo el programa para e/itar 8ue dic7a eti8ueta apare5ca duplicada. La solucin est3 en emplear la directi/a L4$AL 8ue 7a de ir colocada justo despu@s de la directi/a &A$*4:
&IFI&4 &A$*4 dato11 dato 1 resultado L4$AL yaZesta &4G AM1dato1 $&0 AM1dato 9 ees dato1 el menorU ^) yaZesta 9 s &4G AM1dato 9 no1 es dato yaZesta: &4G resultado1AM EFD&

En el ejemplo1 al in/ocar la macro dos /eces el ensamblador no generar3 la eti8ueta cyaZestad sino las eti8uetas UU====1 UU===11 ... y as sucesi/amente. La directi/a L4$AL no slo es ?til para los saltos condicionales en las macros1 tambi@n permite declarar /ariables internas a los mismos. -e puede indicar un n?mero casi inde%inido de eti8uetas con la directi/a L4$AL1 separ3ndolas por comas.
=

+peraciones de (acros$ +perador HH Indica 8ue lo 8ue /iene a continuacin es un comentario 8ue no debe aparecer al e6pansionar la macro. $uando al ensamblar se genera un listado del programa1 las macros suelen aparecer e6pandidas en los puntos en 8ue se in/ocan9 sin embargo slo aparecer3n los comentarios normales 8ue comiencen por :9;. Los comentarios relacionados con el %uncionamiento interno de la macro deberan ir con :99;1 los relati/os al uso y sinta6is de la misma con :9;. Esto es adem3s con/eniente por8ue durante el ensamblaje son mantenidos en memoria los comentarios de macros :no los del resto del programa; 8ue comien5an por :9;1 y no con/iene desperdiciar memoria...

+perador \ Utili5ado para concatenar te6to o smbolos. Es necesario para lograr 8ue el ensamblador sustituya un par3metro dentro de una cadena de caracteres o como parte de un smbolo:
-ALUD4 eti8uetafc: &A$*4 c &4G AL1PfcP $ALL imprimir EFD&

Semana =; Tarea i- 0esarrollar un programa [ue utilice una macro sencilla

Ren Zahor Torres ecerra

2"

Lenguaje Ensamblador
Al ejecutar -ALUD4 A se producir3 la siguiente e6pansin:
eti8uetaA: &4G $ALL AL1PAP imprimir

-i no se 7ubiera colocado el f se 7ubiera e6pandido como &4G AL1PcP $uando se utili5an estructuras repetiti/as *E0"1 I*0 o I*0$ :8ue se /er3n m3s adelante; e6iste un problema adicional al intentar crear eti8uetas1 ya 8ue el ensamblador se come un f al 7acer la primera sustitucin1 generando la misma eti8ueta a menos 8ue se dupli8ue el operador f: &E&4*IA 6fi &A$*4 I*0 D) EFD& EFD& 6 i1 `11 a i

-i se in/oca &E&4*IA E" se produce el error de Peti8ueta E"i repetidaP1 8ue se puede sal/ar aAadiendo tantos XfX como ni/eles de anidamiento 7alla en las estructuras repetiti/as empleadas1 como se ejempli%ica a continuacin: &E&4*IA 6ffi &A$*4 I*0 D) EFD& EFD& 6 i1 `11 a i

Lo 8ue con &E&4*IA E" generar3 correctamente las lneas: E"1 E" D) 1 D)

+perador E o WU Empleado para indicar 8ue el car3cter 8ue /iene a continuacin debe ser interpretado literalmente y no como un smbolo. 0or ello1 V9 es e8ui/alente a `9a. +perador ] $on/ierte la e6presin 8ue le sigue Bgeneralmente un smboloB a un n?mero9 la e6presin debe ser una constante :no relocali5able;. -lo se emplea en los argumentos de macros. Dada la macro siguiente: 0-U& &A$*4 b4U" EFD& mensaje1 suma S mensaje1 suma S

Ren Zahor Torres ecerra

2'

Lenguaje Ensamblador
:E/identemente1 el b 8ue precede a 4U" %orma parte de la directi/a y no se trata del b operador 8ue estamos tratando; -upuesta la e6istencia de estos smbolos:
-I&1 -I& ERU ERU 1 = '==

In/ocando la macro con las siguientes condiciones:


0-U& ` -I&1 Q -I& N a1 :-I&1Q-I& ;

-e produce la siguiente e6pansin:


b4U" S -I&1 Q -I& N :-I&1Q-I& ; S

-in embargo1 in/ocando la macro de la siguiente manera :con b;:


0-U& ` -I&1 Q -I& N a1 b:-I&1Q-I& ;

-e produce la e6pansin deseada:


b4U" S -I&1 Q -I& N 2 = S
!>

0irectiGas ^tiles para macros Estas directi/as pueden ser empleadas tambi@n sin las macros1 aumentando la comodidad de la programacin1 aun8ue abundan especialmente dentro de las macros. S *E0" /eces ... EFD& :*epeat; 0ermite repetir cierto n?mero de /eces una secuencia de instrucciones. El blo8ue de instrucciones se delimita con EFD& :no con%undirlo con el %inal de una macro;. 0or ejemplo:
*E0" 4U" EFD& DM1AL

Esta secuencia se trans%ormar31 al ensamblar1 en lo siguiente:


4U" 4U" DM1AL DM1AL

1=

Semana !>; Tarea j- Reali)ar un programa [ue utilice operaciones con (acros

Ren Zahor Torres ecerra

2.

Lenguaje Ensamblador
Empleando smbolos de%inidos con :N; y apoy3ndose adem3s en las macros se puede llegar a crear pseudoBinstrucciones muy potentes:
-U$E-I4F &A$*4 n num N = *E0" n D) num num N num Q 1 EFD& 9 %in de *E0" EFD& 9 %in de macro

La sentencia -U$E-I4F ! pro/ocar3 la siguiente e6pansin:


D) D) D) = 1

S I*0 simboloZcontrol1 `arg11 arg 1 ...1 argZna ... EFD& :Inde%inite repeat; Es relati/amente similar a la instruccin F4* de los lenguajes de alto ni/el. Los 3ngulos :`; y :a; son obligatorios. El smbolo de control /a tomando sucesi/amente los /alores :no necesariamente num@ricos; arg11 arg 1 ... y recorre en cada pasada todo el blo8ue de instrucciones 7asta alcan5ar el EFD& :no con%undirlo con %in de macro; sustituyendo simboloZcontrol por esos /alores en todos los lugares en 8ue aparece:
I*0 D) EFD& i1 `11 1!a =1 i1 iSi

Al e6pansionarse1 este conjunto de instrucciones se con/ierte en lo siguiente:


D) D) D) =1 11 1 =1 1 # =1 !1 H

Fota: "odo lo encerrado entre los 3ngulos se considera un ?nico par3metro. Un :9; dentro de los 3ngulos no se interpreta como el inicio de un comentario sino como un elemento m3s. 0or otra parte1 al emplear macros anidadas1 deben indicarse tantos smbolos angulares X`X y XaX consecuti/os como ni/eles de anidamiento e6istan. Lgicamente1 dentro de una macro tambi@n resulta bastante ?til la estructura I*0:
"E"*A4U" &A$*4 0U-+ 0U-+ &4G I*0 &4G 4U" p11 p 1 p!1 p#1 /alor AM DM AL1/alor cn1 `p11 p 1 p!1 p#a DM1 cn DM1 AL 22

Ren Zahor Torres ecerra

Lenguaje Ensamblador
EFD& 9 %in de I*0

Ren Zahor Torres ecerra

26

Lenguaje Ensamblador
040 040 EFD& DM AM 9 %in de macro

Al ejecutar "E"*A4U" !1<71 1$H71 D171 1A#71 1I se obtendr3:


0U-+ 0U-+ &4G &4G 4U" &4G 4U" &4G 4U" &4G 4U" 040 040 AM DM AL1 1I DM1 !1<7 DM1 AL DM1 1$H7 DM1 AL DM1 D17 DM1 AL DM1 1A#7 DM1AL DM AM

$uando se pasan listas como par3metros 7ay 8ue encerrarlas entre X`X y XaX al llamar1 para no con%undirlas con elementos independientes. 0or ejemplo1 supuesta la macro IF$D:
IF$D &A$*4 I*0 IF$ EFD& DE$ EFD& lista1 p i1 `listaa i 9 %in de I*0 p 9 %in de macro

-e comprende la necesidad de utili5ar los 3ngulos:


IF$D AM1 )M1 $M1 DM se e6pandir3: IF$ AM DE$ )M 9 $M y DM se ignoran :# par3metros; IF$D `AM1 )M1 $Ma1 DM se e6pandir3: IF$ AM IF$ )M IF$ $M DE$ DM

9 : par3metros;

S I*0$ simboloZcontrol1 `c1c ... cna ... EFD& :Inde%inite repeat c7aracter; Esta directi/a es similar a la anterior1 con una sal/edad: los elementos situados entre los 3ngulos :`; y :a; Ba7ora opcionales1 por ciertoB son caracteres A-$II y no /an separados por comas:
I*0$ D) EFD& i1 `<1!a i

Ren Zahor Torres ecerra

28

Lenguaje Ensamblador
El blo8ue anterior generar3 al e6pandirse:
D) D) D) < 1 !

Ejemplo de utili5acin dentro de una macro :en combinacin con el operador f;:
IFI$IALIOA &A$*4 I*0$ D) EFD& EFD& a1 b1 c1 d iter1 `fafbfcfda iter 9 %in de I*0$ 9 %in de macro

Al ejecutar IFI$IALIOA I1 11 #1 = se produce la siguiente e6pansin:


D) D) D) D) I 1 # =

S EMI"& -ir/e para abortar la ejecucin de un blo8ue &A$*41 *E0"1 I*0 I*0$. Formalmente se utili5a apoy3ndose en una directi/a condicional :IF...EL-E...EFDIF;. Al salir del blo8ue1 se pasa al ni/el inmediatamente superior :8ue puede ser otro blo8ue de estos;. $omo ejemplo1 la siguiente macro reser/a n bytes de memoria a cero 7asta un m36imo de 1==1 colocando un byte '' al %inal del blo8ue reser/ado:
&ALL4$ &A$*4 n ma6imoN1== *E0" n IF ma6imo ER = EMI"& EFDIF ma6imo N ma6imo B 1 D) = EFD& D) '' EFD&

9 eya /an 1==U 9 abandonar *E0" 9 reser/ar byte 9 byte de %in de blo8ue

(acros &Gan)adas con n^mero Gariable de parJmetros$ $omo se /io al estudiar la directi/a IF1 e6iste la posibilidad de c7e8uear condicionalmente la presencia de un par3metro por medio de IFF)1 o su ausencia con IF). Uniendo esto a la potencia de I*0 es posible crear macros e6traordinariamente /ers3tiles. $omo ejemplo1 /alga la siguiente macro1 destinada a introducir en la pila un n?mero /ariable de par3metros :7asta 1=;: es especialmente ?til en los programas 8ue gestionan interrupciones:

Ren Zahor Torres ecerra

2:

Lenguaje Ensamblador
M0U-+ &A$*4 *11* 1*!1*#1*'1*21*I1*<1*H1*1=
I*0 reg1 `*11* 1*!1*#1*'1*21*I1*<1*H1*1=a IFF) `rega 0U-+ reg EFDIF EFD& 9 %in de I*0 EFD& 9 %in de M0U-+

0or ejemplo1 la instruccin:


M0U-+ AM1)M1D-1E-1GA*1

-e e6pandir3 en:
0U-+ 0U-+ 0U-+ 0U-+ 0U-+ AM AM DEGA*1

El ejemplo anterior es ilustrati/o del mecanismo de comprobacin de presencia de par3metros. -in embargo1 este ejemplo puede ser optimi5ado notablemente empleando una lista como ?nico par3metro:
M0U-+ &A$*4 lista I*0 i1 `listaa 0U-+ i EFD& EFD& &A$*4 lista I*0 i1 `listaa 040 i EFD& EFD&

M040

La /entaja es el n?mero inde%inido de par3metros soportados :no slo 1=;. Un ejemplo de uso puede ser el siguiente:
M0U-+ M040 `AM1 )M1 $Ma `$M1 )M1 AMa

Rue al e6pandirse 8ueda:


0U-+ 0U-+ 0U-+ 040 040 040
!!

AM )M $M $M )M AM

11

Semana !!; Tarea K- Reali)ar un programa [ue utilice (acros &Gan)adas

Ren Zahor Torres ecerra

2=

Lenguaje Ensamblador

#nidad .
.$ 4rogramacin 5brida .$!$ 0irectiGas para Compilacin 5brida El lenguaje $ es sin duda el m3s apropiado para la programacin de sistemas1 pudiendo sustituir al ensamblador en muc7os casos. -in embargo1 7ay ocasiones en 8ue es necesario acceder a un ni/el m3s bajo por ra5ones de operati/idad e incluso de necesidad :programas residentes 8ue economicen memoria1 algoritmos r3pidos para operaciones crticas1 etc.;. Es entonces cuando resulta e/idente la necesidad de poder emplear el ensamblador y el $ a la /e5. 0ara comprender este captulo1 basta tener unos conocimientos ra5onables de $ est3ndar. A8u se e6plicar3n las %unciones de librera necesarias para acceder al m3s bajo ni/el1 as como la manera de integrar el ensamblador y el $. #S+ 0EL T#R + C % +RL&@0 C & &_+ @ILEL$ A continuacin /eremos algunas %unciones1 macros y estructuras de la librera D4-.+ del "urbo $. &CCES+ & L+S 4#ERT+S 0E E7S$
int inp (int puerto); /* int inport (int puerto); /* unsigned char inportb (int puerto); /* int outp (int puerto, int valor); /* void outport (int puerto, int valor); /* void outportb (int puerto, unsigned char valor);/* leer del puerto E/S una palabra (16 bits) */ leer del puerto E/S una palabra (16 bits) */ leer del puerto E/S un byte (8 bits) */ enviar al puerto E/S una palabra (16 bits) */ enviar al puerto E/S una palabra (16 bits) */ enviar al puerto E/S un byte (8 bits) */

Aun8ue pueden parecer demasiadas1 algunas son id@nticas :caso de inp:; e inport:;; y otras se di%erencian slo ligeramente en el tipo de los datos de/ueltos1 lo cual es irrele/ante si se tiene en cuenta 8ue el dato de/uelto es descartado :caso de outp:; y outport:;;. En general1 lo normal es emplear inport:; e inportb:; para la entrada1 as como outport:; y outportb:; para la salida. 0or ejemplo1 para en/iar el E4I al %inal de una interrupcin 7ard,are se puede ejecutar: outportb:=6 =1 =6 =;9 &CCES+ & L& (E(+RI&$
int peek (unsigned seg, unsigned o ); /* leer la palabra (16 bits) en seg!o */ char peekb (unsigned seg, unsigned o ); /* leer el byte (8 bits) en seg!o */ void poke (unsigned seg, unsigned o , int valor);/* poner palabra valor (16 bits) en seg!o */ void pokeb (unsigned seg, unsigned o , char valor);/* poner byte valor (8 bits) en seg!o */ unsigned "#$%"" (void ar *puntero); /* obtener o set de variable tipo ar */ unsigned "#$SE& (void ar *puntero); /* obtener seg'ento de variable tipo ar */ void ar *()$"# (unsigned seg, unsigned o ); /* convertir seg!o en puntero tipo ar */

Ren Zahor Torres ecerra

6>

Lenguaje Ensamblador
Las %unciones pee.:;1 pee.b:;1 po.e:; y po.eb:; tienen una utilidad e/idente de cara a consultar y modi%icar las posiciones de memoria. $uando se necesita saber el segmento y(o el o%%set de una /ariable del programa1 las macros F0Z4FF y F0Z-EL de/uel/en dic7a in%ormacin. 0or ?ltimo1 con &CZF0 es posible asignar una direccin de memoria absoluta a un puntero %ar. 0or ejemplo1 si se declara una /ariable: c7ar %ar SpantallaZcolor9 se puede 7acer 8ue apunte a la memoria de /deo del modo te6to de los adaptadores de color con: pantallaZcolor N &CZF0 :=6)<==1 =;9
y despu@s se podra limpiar la pantalla con un bucle: %or :iN=9 i`#===9 iQQ; SpantallaZcolorQQN=9

C+@TR+L 0E I@TERR#4CI+@ES$
void enable(void); void disable(void); /* habilitar interrupciones hard*are, e+uivalente a S,- */ /* inhibir interrupciones hard*are, e+uivalente a ./- */

LL&(&0& & I@TERR#4CI+@ES$ 0ara llamar a las interrupciones es con/eniente conocer antes ciertas estructuras y uniones.
struct 0%121E&S 3 unsigned int 5; struct 67,E1E&S 3 unsigned char 5; a4, b4, c4, d4, si, di, c lag, lags;

al, ah, bl, bh, cl, ch, dl, dh;

union 1E&S 3 struct 0%121E&S 4; struct 67,E1E&S h; 5; struct S1E&S 3 unsigned int es; 5; unsigned int cs; unsigned int ss; unsigned int ds;

struct 1E&#8.) 3 unsigned r$a4, r$b4, r$c4, r$d4; unsigned r$bp, r$si, r$di, r$ds, r$es, r$ lags; 5;

A continuacin1 se listan las %unciones 8ue permiten in/ocar las interrupciones:


int int86(int interrupci9n, union 1E&S *entrada, union 1E&S *salida); int int864(int interrupci9n, union 1E&S *entrada, union 1E&S *salida, struct 1E&S *rseg'ento); void intr(int interrupci9n, struct 1E&#8.) *registros);
!"

Semana !"; Tarea l- Reali)ar la primera reGisin del 4ro%ecto /inal de Curso

Ren Zahor Torres ecerra

6!

Lenguaje Ensamblador
Las dos primeras %unciones se basan en la declaracin de dos uniones: una para entrada y otra para salida1 8ue simboli5an los /alores iniciales :antes de llamar a la interrupcin; y %inales :tras la llamada; en los registros. -i se desea 8ue la misma unin 8ue indica los /alores iniciales de/uel/a los %inales1 se puede indicar por duplicado:
union 1E&S regs; regs:h:ah ; <; regs:h:al ; <41=; int86 (<41<, Bs, Bs); /* >&8 =?<4?<< @ ?A6 colores */ /* ca'biar 'odo de vCdeo */

La di%erencia entre int<2:; e int<26:; reside en 8ue la ?ltima permite trabajar con los registros de segmento :la estructura -*EL- se puede iniciali5ar con los /alores 8ue tienen 8ue tener los registros de segmento antes de llamar a la interrupcin9 a la /uelta1 dic7a estructura 7abr3 sido modi%icada para indicar el /alor de/uelto en los registros de segmento tras la interrupcin;. +ay 8uien pre%iere trabajar con RE?4&C`1 8ue con una sola estructura permite tambi@n operar con los registros de segmento y la emplea tanto para en/iar como para recibir los resultados. El incon/eniente1 poco rele/ante1 es 8ue slo admite registros de 12 bits1 lo 8ue suele obligar a 7acer despla5amientos y %or5ar el empleo de m3scaras para trabajar con las mitades necesarias:
struct 1E&#8.) bios; bios:r$a4 ; <41=; intr (<41<, Dbios); /* >&8 =?<4?<< @ ?A6 colores */ /* ca'biar 'odo de vCdeo */

C&( I+ 0E LECT+RES 0E I@TERR#4CI3@$


void interrupt (*getvect(int interrupci9n))(); /*obtener vector de interrupci9n*/ void setvect (int interrupci9n, void interrupt (*rutina)());/*establecer vector de interrupci9n*/

La %uncin get/ect:; de/uel/e un puntero con la direccin del /ector de interrupcin indicado. La %uncin set/ect:; permite des/iar un /ector 7acia la rutina de tipo interrupt 8ue se indica. Interrupt es una palabra cla/e del "urbo $ 8ue ser3 e6plicada en el %uturo. 0or a7ora1 baste el siguiente programa de ejemplo:
void interrupt nueva$rutina(); void interrupt (*vieEa$rutina)(); int 'ain() 3 vieEa$rutina ; getvect (A); Screen) */ setvect (A, nueva$rutina); : : : : : : : : : setvect (A, vieEa$rutina); 5 void interrupt nueva$rutina() 3 : : : 5 /* nuestra unci9n de interrupci9n */ /* variable para al'acenar el vector inicial */

/* al'acenar direcci9n de -F, A (activada con #rint /* desviar -F, A a nuestra propia rutina de control */ /* resto del progra'a */ /* restaurar rutina inicial de -F, A */ /* rutina de control de -F, A */

Ren Zahor Torres ecerra

6"

Lenguaje Ensamblador
4R+?R&(&S RESI0E@TES$
void keep (unsigned char errorlevel, unsigned ta'aGo);

La %uncin anterior1 basada en el ser/icio !17 del D4-1 permite a un programa reali5ado en $ 8uedar residente en la memoria. Adem3s del cdigo de retorno1 es preciso indicar el tamaAo del 3rea residente :en p3rra%os;. Es di%cil determinar con precisin la memoria 8ue ocupa un programa en $. -in embargo1 en muc7os casos la siguiente %rmula puede ser /3lida:
keep (<, ($SS H (($S# H area$de$seguridad)/16) @ $psp));

En los casos en 8ue no lo sea1 se le puede 7acer 8ue /uel/a a serlo aumentando el tamaAo del 3rea de seguridad :8ue en los programas menos con%licti/os ser3 =;. "anto Zpsp como Z-- y Z-0 est3n de%inidas ya por el compilador1 por lo 8ue la lnea anterior es per%ectamente /3lida :sin m3s; al %inal de un programa. L&RI& LES ?L+ &LES 4RE0E/I@I0&S I@TERES&@TES$
$version $os'aEor $os'inor $psp $stklen $heaplen /* /* /* /* /* /* devuelve devuelve devuelve seg'ento contiene al'acena la versi9n del 2%S de 'anera co'pleta */ el nI'ero principal de versi9n del 2%S! eE:, A en el 2%S A:< */ el nI'ero secundario de versi9n del 2%S! eE:, < en el 2%S A:< */ del #S# */ el ta'aGo de la pila, en bytes */ el ta'aGo inicial del heap, en bytes (< para 'a4i'iJarlo) */

De estas /ariables prede%inidas1 las m3s ?tiles son 8ui53 las 8ue de/uel/en la /ersin del D4-1 lo 8ue a7orra el es%uer5o 8ue supone a/eriguarlo llamando al D4- o empleando la %uncin de librera correspondiente. "ambi@n es ?til Zpsp1 8ue permite un acceso a este 3rea del programa de manera inmediata. I@SERCI3@ 0E C30I?+ E@ LA@E&$
void $ $e'it$ $ (argu'ento,:::); void geninterrupt (int interrupci9n);

0or medio de Z ZemitZ Z:; se puede colocar cdigo m38uina de manera directa dentro del programa en $. Fo es con/eniente 7acerlo as por8ue as1 ya 8ue alterar directamente los registros de la $0U acabar3 alterando el %uncionamiento esperado del compilador y 7aciendo %allar el programa. -in embargo1 en un procedimiento dedicado e6clusi/amente a almacenar cdigo inline :en lnea;1 es seguro este m@todo1 sobre todo si se tiene cuidado de no alterar los registros -I y DI :empleados muy a menudo por el compilador como /ariables de tipo register;. 0or medio de geninterrupt:; se puede llamar directamente a una interrupcin: geninterrupt :interr; es e6actamente lo mismo 8ue Z ZemitZ Z:=6$D1 interr; ya 8ue =6$D es el cdigo de operacin de IF". 0or ejemplo1 para /olcar la pantalla por impresora se puede ejecutar geninterrupt:';. $on los smbolos ZAM1 ZAL1 ZA+1 Z)M1 Z)L1 Z)+1 Z$M1 Z$L1 Z$+1 ZDM1 ZDL1 ZD+1 Z-I1 ZDI1 Z)01 Z-01 Z$-1 ZD-1 ZE-1 Z-- y ZFLAL- se puede acceder directamente a los registros de la $0U. +ay 8ue tomar tambi@n precauciones para e/itar e%ectos laterales :una asignacin tipo ZD-N=6#= no a%ectar3 slo a D-;.
!'

1!

Semana !'; Tarea m- Reali)ar la segunda reGisin del 4ro%ecto /inal de Curso

Ren Zahor Torres ecerra

6'

Lenguaje Ensamblador
L&S 4&L& R&S CL&LE I@TERR#4T S &S($ $on interrupt Wdeclaracinadea1uncinU9 se declara una determinada %uncin como de tipo interrupcin. En estas %unciones1 el compilador preser/a y restaura todos los registros al comien5o y %inal de las mismas9 %inalmente1 retorna con I*E". 0or tanto1 es ?til para %unciones 8ue controlan interrupciones. 0ara emplear esto1 se debera compilar el programa con la opcin test stac. overflo5 y las /ariables tipo registro desacti/adas. $on asm se pueden insertar instrucciones en ensamblador1 como se /er3 m3s adelante. I@TER/&Z C * +RL&@07(ICR+S+/T- , E@S&( L&0+R$ (+0EL+S 0E (E(+RI&$ Los modelos de memoria constituyen las di/ersas maneras de acceder a la memoria por parte de los compiladores de $. En el caso del "urbo $ se pueden distinguir los siguientes: TI@S; -e emplea en los programas donde es preciso apurar el consumo de memoria 7asta el ?ltimo byte. Los # registros de segmento :$-1 D-1 E-1 --; est3n asignados a la misma direccin1 por lo 8ue e6iste un total de 2# Cb donde se me5clan cdigo1 datos y pila. Los programas de este tipo pueden con/ertirse a %ormato $4&. S(&LL; -e utili5a en aplicaciones pe8ueAas. Los segmentos de cdigo y datos son di%erentes y no se solapan. 0or ello1 7ay 2# .b para cdigo y otros 2# Cb a repartir entre datos y pila. -egmentos 0unteros &odelo $digo Datos 0ila $digo Datos "iny 2# Cb near near -mall 2# Cb 2# Cb near near &edium 1 &b 2# Cb %ar near $ompact 2# Cb 1 &b near %ar Large 1 &b 1 &b %ar %ar 1 &b +uge 1 &b %ar %ar :)lo8ues a 2# Cb; (E0I#(; Este modelo es ideal para programas largos 8ue no manejan demasiados datos. -e utili5an punteros largos para el cdigo :8ue puede e6tenderse 7asta 1 &b; y cortos para los datos: la pila y los datos juntos no pueden e6ceder de 2# Cb. C+(4&CT; Al contrario 8ue el anterior1 este modelo es el apropiado para los programas pe8ueAos 8ue emplean muc7os datos. 0or ello1 el programa no puede e6ceder de 2# Cb aun8ue los datos 8ue controla pueden alcan5ar el &b1 ya 8ue los punteros de datos son de tipo %ar por de%ecto.

Ren Zahor Torres ecerra

6.

Lenguaje Ensamblador
L&R?E; Empleado en las aplicaciones grandes y tambi@n por los programadores de sistemas 8ue no tienen paciencia para andar %or5ando continuamente el tipo de los punteros :para rebasar el lmite de 2# Cb;. "anto los datos como el cdigo pueden alcan5ar el &b1 aun8ue no se admite 8ue los datos est3ticos ocupen m3s de 2# Cb. Este modo es el 8ue menos problemas da para manejar la memoria1 no siendo 8ui53 tan lento y pesado como indica el %abricante. 5#?E; -imilar al anterior1 pero con algunas /entajas: por un lado1 todos los punteros son normali5ados autom3ticamente y se admiten datos est3ticos de m3s de 2# Cb. 0or otro1 y gracias a esto ?ltimo1 es %actible manipular blo8ues de datos de m3s de 2# Cb cada uno1 ya 8ue los segmentos de los punteros se actuali5an correctamente. -in embargo1 este modelo es el m3s costoso en tiempo de ejecucin de los programas. I@TE?R&CI3@ 0E (30#L+S E@ E@S&( L&0+R$ L& SE@TE@CI& &S( La sentencia asm permite incluir cdigo ensamblador dentro del programa $1 utili5ando los mnemnicos normales del ensamblador. -in embargo1 el uso de esta posibilidad est3 m3s o menos limitado seg?n la /ersin del compilador. En "urbo $ .=1 los programas 8ue utili5an este m@todo es necesario salir a la lnea de comandos para compilarlos con el tradicional compilador de lnea1 lo cual resulta poco atracti/o. En "urbo $QQ 1.=1 se puede con%igurar adecuadamente el compilador para 8ue localice el "urbo Assembler y lo utilice autom3ticamente para ensamblar1 sin necesidad de salir del entorno integrado. -in embargo1 es a partir del )orland $QQ cuando se puede trabajar a gusto: en concreto1 la /ersin )orland $QQ .= permite ensamblar sin rodeos cdigo ensamblador incluido dentro del listado $. El ?nico incon/eniente es la limitacin del 7ard,are disponible: para un 0$(M"1 el "urbo $ .= es el ?nico compilador aceptablemente r3pido. -in embargo1 en un <2 es m3s recomendable el "urbo $QQ1 mientras 8ue en un !<2 modesto :o incluso en un <2 potente; resulta m3s interesante emplear el )orland $QQ .=: las /ersiones !.M de este compilador son las m3s adecuadas para un #<2 o superior :bajo D4-;. La sinta6is de asm se puede entender %3cilmente con un ejemplo:
'ain() 3 int dato1, dato?, resultado; print (K2a'e dos nI'eros! K); scan (KLd LdK, Ddato1, Ddato?); as' as' as' 'ult! as' as' as' as' 5 push a4; push c4; 'ov c4,dato1 'ov a4,<h add loop 'ov pop a4,dato? 'ult resultado,a4 c4; pop a4;

print (KSu producto por el peor 'Mtodo da! LdK, resultado);

Ren Zahor Torres ecerra

62

Lenguaje Ensamblador
$omo se /e en el ejemplo1 los registros utili5ados son con/enientemente preser/ados para no alterar el /alor 8ue puedan tener en ese momento :importante para el compilador;. "ambi@n puede obser/arse lo %3cil 8ue resulta acceder a las /ariables. A71 cuidado con )0: el registro )0 es empleado muc7o por el compilador y no con/iene tocarlo :ni si8uiera guard3ndolo en la pila;. De 7ec7o1 la instruccin &4G $M1DA"41 ser3 compilada como &4G $M1\)0Balgo] al ser una /ariable local de main:;. Esta es la ?nica sinta6is soportada por el "urbo $ .=9 sin embargo1 en las /ersiones m3s modernas del compilador se admiten las lla/es XgX y XhX para agrupar /arias sentencias asm:
as' 3 push a4; push c4; 'ov c4,dato1 'ov a4,<h 5 'ult! as' 3 add a4,dato? loop 'ult 'ov resultado,a4 pop c4; pop a4; 5

S# R#TI@&S E@ E@S&( L&0+R $uando las rutinas a incluir son e6cesi/amente largas1 resulta m3s con/eniente escribirlas como %ic7eros independientes y ensamblarlas por separado1 incluy@ndolas en un %ic7ero de proyecto :S.0*^; seleccionable en los men?s del compilador. 0ara escribir este tipo de rutinas 7ay 8ue respetar las mismas de%iniciones de segmentos 8ue reali5a el compilador. +oy en da e6iste algo m3s de %le6ibilidad9 sin embargo1 a8u se e6pone el m@todo general para me5clar cdigo de ensamblador con $. Geamos el siguiente programa en $:
int variable; e4tern dato; e4tern uncion(); 'ain() 3 int a;?1N=<; char b;OPO; 5 variable ; uncion (a, b, <41?=QA6R8);

La /ariable variable es una /ariable global del programa a la 8ue no se asigna /alor alguno en el momento de de%inirla. "anto a como b son /ariables locales del procedimiento main:; y son asignadas con un cierto /alor inicial9 funcion%6 no aparece por ning?n sitio1 ya 8ue ser3 codi%icada en ensamblador en un %ic7ero independiente. A dic7a %uncin se le pasan ! par3metros. La manera de 7acerlo es coloc3ndolos en la pila :empe5ando por el ?ltimo y acabando por el primero;. 0or ello1 el compilador meter3 primero en la pila el /alor 1 !#7 y luego el '2I<7 :necesita dos palabras de pila por8ue es un dato de tipo long;. Luego coloca en la pila el car3cter almacenado en la /ariable b: como los /alores 8ue se apilan son
Ren Zahor Torres ecerra 66

Lenguaje Ensamblador
siempre de 12 bits1 la parte alta est3 a =. Finalmente1 deposita el dato entero a. -eguidamente1 llama a la %uncin funcion%6 con un $ALL 8ue puede ser de dos tipos: corto :$ALL(*E" en el mismo segmento; o largo :$ALL(*E"F entre distintos segmentos;. Esta llamada a la %uncin1 por tanto1 pro/oca un almacenamiento adicional de bytes :modelos "IFJ1 -&ALL y $4&0A$"; o # :en los restantes modelos de memoria1 8ue podramos llamar largos;. El es8ueleto de la subrutina en ensamblador 8ue 7a de recibir esos datos y1 tras procesarlos1 de/ol/er un resultado de tipo int es el siguiente:
2&1%S# $28,8 $dato $28,8 $6SS $in o $6SS $,EU, &1%S# $28,8, $6SS

SE&(EF, 0%12 #S6/-. O28,8O #S6/-. $dato ; $dato serT accesible desde el progra'a . 20 < ; valor inicial a < EF2S SE&(EF, 0%12 #S6/-. O6SSO EU,1F $variable!0%12 ; variable e4terna 20 V ; sin valor inicial EF2S SE&(EF, 67,E #S6/-. O.%2EO 8SSS(E .S!$,EU,,2S!2&1%S#,SS!2&1%S# #S6/-. $ uncion ; $ uncion serT accesible desde el progra'a . ; ; ; ; ; uncion() del . recuperar variable OaO recuperar variable ObO 8U ; A6R8h 2U ; 1?=Qh @Z 2U!8U ; 1?=QA6R8h unci9n

$ uncion

$ uncion $,EU,

#1%. #SSW (%> (%> (%> (%> (%> ; ::: ; ::: 822 822 SS6 ; ::: ; ::: (%> (%> #%# 1E, EF2# EF2S EF2

FE81 6# 6#,S# 6U,X6#HQY .U,X6#H6Y 8U,X6#H8Y 2U,X6#H1<Y .U,6U .U,8U .U,2U 8U,.U S#,6# 6#

; cuerpo de la

; resultado (tipo int)

$omo se puede obser/ar1 se respetan ciertas con/enciones en cuanto a los nombres de los segmentos y grupos. En el segmento a0&T& se de%inen las /ariables iniciali5adas :las 8ue tienen un /alor inicial;: 7dato podra 7aber sido accedida per%ectamente desde el programa en $1 ya 8ue es declarada como p?blica. 0or otro lado1 en el segmento a SS se de%inen o declaran las /ariables 8ue no son iniciali5adas con un /alor inicial :como es el caso de la /ariable 7variable del programa $1 8ue %ue de%inida simplemente como int variable: en el listado ensamblador se la declara como e6terna ya 8ue est3 de%inida en el programa $;. El compilador de $ precede siempre de un subrayado a todas las /ariables y %unciones cuando
Ren Zahor Torres ecerra 68

Lenguaje Ensamblador
compila1 moti/o por el cual 7ay 8ue 7acer lo propio en el listado ensamblador. Al tratarse de un modelo de memoria peque8o1 Z)-- y ZDA"A est3n agrupados. En el segmento aTEXT se almacena el cdigo1 es decir1 las %unciones de%inidas: en nuestro caso1 slo una :el procedimiento 7funcion;. $omo es de tipo FEA*1 slo se podr3 emplear con programas $ compilados en un modelo de memoria "IFJ1 -&ALL o $4&0A$" :para los dem3s modelos 7ay 8ue poner FA* en lugar de FEA*;. Esta %uncin de ejemplo en ensamblador no utili5a ninguna /ariable1 pero tanto 7variable :la variable del programa $; como1 por supuesto1 7info o 7dato son plenamente accesibles. A la 7ora de acceder a las /ariables1 7ay 8ue tener en cuenta el modelo de memoria: como no emplea m3s de 2# Cb para cdigo :modelos "IFJ1 -&ALL o $4&0A$";1 el compilador slo 7a colocado en la pila el o%%set de la direccin de retorno :registro I0;. Fosotros apilamos despu@s )0 :ya 8ue lo /amos a manc7ar; por lo 8ue el ?ltimo dato 8ue apil el programa $ antes de llamar a la rutina en ensamblador 7abr3 de ser accedido en \)0Q#]. La /entaja de iniciali5ar )0 es 8ue luego se pueden introducir datos en la pila sin perder la posibilidad de acceder a los par3metros de la rutina 8ue llama. -i el procedimiento %uera de tipo FA* :modelos &EDIU&1 LA*LE y +ULE;1 todos los accesos inde6ados sobre la pila se incrementaran en dos unidades :por ejemplo1 \)0Q2] en /e5 de \)0Q#] para acceder a la /ariable a; debido a 8ue tambi@n se 7abra almacenado $- en la llamada. $omo se puede obser/ar1 la rutina no preser/a ni restaura todos los registros 8ue /a a emplear: slo es necesario de/ol/er intactos D-1 --1 )0 y :por si se emplean /ariables register; -I y DI9 los dem3s registros pueden ser libremente alterados. $omo la %uncin es de tipo entero1 de/uel/e el resultado en AM9 si %uera de tipo long lo de/ol/era en DM:AM. El modelo de memoria tambi@n cuenta en los par3metros 8ue son pasados a la rutina en ensamblador cuando no son pasados por /alor :es decir1 cuando se pasan punteros;. En el ejemplo1 podramos 7aber pasado un puntero 8ue podra ser de tipo corto :para cargarlo en )M1 por ejemplo1 y e%ectuar operaciones tipo \)M];. -in embargo1 si se pasan punteros a /ariables de tipo %ar :o si se emplea un modelo de memoria $4&0A$"1 LA*LE o +ULE; es necesario cargar la direccin con una instruccin LE- de ! bits. Esta rutina de ejemplo en ensamblador es slo demostrati/a1 por lo 8ue no debe el lector intentar encontrar alguna utilidad pr3ctica1 de a7 8ue incluso ni si8uiera emplee todas las /ariables 8ue de%ine. E/identemente1 cuando el programa $ retome el control1 7abr3 de e8uilibrar la pila sumando < unidades a -0 :para compensar las # palabras 8ue apil antes de llamar a la %uncin en ensamblador;. En general1 el %uncionamiento general del $ en las llamadas a procedimientos se basa en apilar los par3metros empe5ando por el ?ltimo y llamar al procedimiento: @ste1 a su /e51 preser/a )0 y lo 7ace apuntar a dic7os par3metros :a los 8ue acceder3 con \)0Qdesp];9 a continuacin1 le resta a -0 una cantidad su%iciente para 8ue 8uepan en la pila todas las /ariables locales :a las 8ue acceder3 con \)0Bdesp];9 antes de retornar restaura el /alor inicial de -0 y recupera )0 de la pila. Es entonces cuando el procedimiento 8ue llam1 al recuperar el control1 se encarga de sumar el /alor adecuado a -0 para e8uilibrar la pila :de/ol/erla al estado pre/io a la introduccin de los par3metros;.
Ren Zahor Torres ecerra 6:

Lenguaje Ensamblador
Desde las rutinas en ensamblador tambi@n se puede llamar a las %unciones del compilador1 apilando adecuadamente los par3metros en la pila :empe5ando por el ?ltimo; y 7aciendo un $ALL al nombre de la %uncin precedido de un subrayado: no ol/idar nunca al %inal sumar a -0 la cantidad necesaria para ree8uilibrar la pila. &LIS+ I(4+RT&@TE: Algo a tener en cuenta es 8ue el compilador de $ es sensible a las may?sculas: %uncion:; no es lo mismo 8ue FUF$I4F:;. 0or ello1 al ensamblar1 es obligatorio emplear como mnimo el par3metro 7mB del ensamblador con objeto de 8ue no ponga todos los smbolos autom3ticamente en may?sculas :con (m6 se respetan las min?sculas en los smbolos globales y con (ml en todos los smbolos;. En &A-& 2.=1 el e8ui/alente a (m6 es ($6 y la opcin ($p se corresponde con (ml.
!.

1#

Semana !.; Tarea n- Reali)ar la ^ltima reGisin del 4ro%ecto /inal de Curso

Ren Zahor Torres ecerra

6=

Lenguaje Ensamblador

I LI+?R&/A&

Ensamblador <=!<2(<= <2 Autor: &urray f 0apas Editorial: &c Lra, +ill "ercera Edicin

Lenguaje Ensamblador y 0rogramacion para 0$ I)& y $ompatibles. Autor: 0eter Abel. Editorial: 0rentice +all. "ercera Edicin

Lenguajes Ensambladores Autor: Fuster $abaAero ( 0ere5 Aliaga Editorial:&c Lra, +ill 0rimera Edicin

0$ Intern Autor: &ic7ael "isc7er ( )runo ^ennric7 Editorial: Abacus

Ren Zahor Torres ecerra

8>

Lenguaje Ensamblador

Ap@ndice A
$onjunto de instrucciones del procesador <=<2 Aritmticos: ADC: Suma con acarreos ADD: Suma nmeros binarios DEC: Decrementa en 1 DIV: Divisin sin signo IDIV: Divide con signo (enteros) IMUL: Multiplica con signo (enteros) INC: Incrementa en1 MUL: Multiplica sin signo NEG: Negacin SBB: Resta con el bit prestado SUB: Resta valores binarios Conversin ASCII-BCD AAA: Ajuste AS II despu!s de sumar AAD: Ajuste AS II antes de dividir AAM: Ajuste AS II despu!s de multiplicar AAS: Ajuste AS II despu!s de restar DAA: Ajuste decimal despu!s de sumar DAS: Ajuste decimal despu!s de restar Corrimiento de bit RCL: Rota a la i"#uierda a trav!s del acarreo RCR: Rota a la derec$a a trav!s del acarreo ROL: Rota a la i"#uierda ROR: Rota a la derec$a SAL: orrimiento algebraico a la i"#uierda SAR: orrimiento algebraico a la derec$a SHL: orrimiento lgico a la i"#uierda SHR: orrimiento lgico a la derec$a SHLD/SHRD: orrimiento en doble precisin (%&'%( ) posteriores) Transferencia de datos LDS: arga el registro del segmento de datos LEA: arga una direccin e*ectiva LES: arga el registro de segmento e+tra LODS: arga una cadena LSS: arga el registro del segmento de la pila MOV: Mueve datos MOVS: Mueve cadenas
Ren Zahor Torres ecerra 8!

Lenguaje Ensamblador
MOVSX: Mueve con signo,e+tendido MOVZX: Mueve con cero,e+tendido STOS: Almacena una cadena XCHG: Intercambia XLAT: -raduce Operaciones con bandera CLC: .impia la bandera de acarreo CLD: .impia la bandera de direccin CLI: .impia la bandera de interrupcin CMC: omplementa la bandera de acarreo LAHF: arga A/ de las banderas POPF: Remueve banderas de la pila PUSHF: Agrega banderas a la pila SAHF: Almacena el contenido de A/ en las banderas STC: 0stablece la bandera de acarreo STD: 0stablece la bandera de direccin STI: 0stablece la bandera de interrupcin Entrada/Salida IN: introduce un b)te o una palabra OUT: Saca un b)te o una palabra Operaciones !icas AND: onjuncin .gica ()) NOT: Negacin .gica (no) OR: Dis)uncin .gica (o) XOR: Dis)uncin e+clusiva Ciclos LOOP: Repetir el ciclo $asta #ue se complete LOOPE/LOOPZ: Repetir el ciclo mientras sea igual1mientras sea cero2 LOOPNE/LOOPNZ: Repetir el ciclo mientras no sea igual1mientras no sea cero Control del procesador ESC: 0scape HTL: Introduce un estado de detencin LOCK: 3lo#uea el bus NOP: No operar WAIT: 4one al procesador en estado de espera Operaciones con la pila POP: remueve una palabra de la pila POPA: Remueve todos los registros generales (%&'%( ) posteriores) PUSH: Agrega a la pila
Ren Zahor Torres ecerra 8"

Lenguaje Ensamblador
PUSHA: Agrega todos los registros generales (%&'%( ) posteriores) Operaciones con cadena CMPS: compara cadenas LODS: arga cadenas MOVS: Mueve cadenas REP: Repite una cadena REPE/REPZ: Repite mientras sea igual1mientras sea cero REPNE/REPNZ: Repite mientras no sea igual1mientras no sea cero SCAS: 0+plora una cadena STOS: Almacena una cadena Transferencia "condicional# INTO: Interrumpe si $a) desbordamiento JA/JNBE: 3i*urca (salta) si es ma)or o salta si no es menor o igual JAE/JNB: Salta si es ma)or o igual o salta si no es menor JB/JNAE: Salta si es menor o salta si no es ma)or o igual JBE/JNA: Salta si es menor o igual o salta si no es ma)or JC/JNC: Salta si $a) acarreo o salta si no $a) acarreo JCXZ: Salta si 5 es cero JE/JZ: Salta si es igual o salta si es cero JG/JNLE: Salta si es ma)or o salta si no es menor o igual JGE/JNL: Salta si es ma)or o igual o salta si no es menor JL/JNGE: Salta si es menor o salta si no es ma)or o igual JLE/JNG: Salta si es menor o igual o salta si no es ma)or JNE/JNZ: Salta si no es igual o salta si no es cero JNP/JPO: Salta si no $a) paridad o salta si la paridad es impar JO/JNO: Salta si $a) desbordamiento o salta si no $a) desbordamiento JP/JPE: Salta si $a) paridad o salta si la paridad es par JS/JNS: Salta si el signo es negativo o salta si el signo es positivo Transferencia "incondicional# CALL: .lama a un procedimiento INT: Interrupcin IRET: Interrupcin de regreso JMP: Salto incondicional RET: Regreso RETN/RETF: Regreso cercano o regreso lejano Conversin de tipo CBW: onvierte b)te a palabra CDQ: onvierte palabra doble a palabra cu6druple (%&'%( ) posteriores) CWD: onvierte palabra a palabra doble CWDE: onvierte una palabra a una palabra doble e+tendida
Ren Zahor Torres ecerra 8'

You might also like