Anda di halaman 1dari 19

LENGUAJE DE BAJO NIVEL.

Ensamblador
Manual creado por Carlos Navarro (carlosnuel!
""".carlosnuel.com
carlosnuel#ma$l.com
%&u' es el len#ua(e ensamblador)
Se denomina lenguaje mquina a la serie de datos que la parte fsica de la computadora o
hardware, es capaz de interpretar.
La parte fsica de una computadora, slo distingue datos de tipo binario, es decir,
constituidos por dos nicos valores a los que se denomina valor 0 valor !.
La informacin que hace que el hardware de la computadora realice una determinada
actividad de llama instruccin "con#unto de unos ceros$.Las instrucciones as formadas
equivalen a acciones elementales de la m%quina, por lo que al con#unto de dichas
instrucciones que son interpretadas directamente por la m%quina se denomina lenguaje
mquina.
&sta secuencia es f%cilmente e#ecutada por la computadora, pero es de difcil interpretacin,
siendo aun mas difcil la interpretacin de un programa "con#unto de instrucciones$ escrito de
esta forma. 'or e#emplo una secuencia de dgitos binarios "bits$ puede indicar a la
computadora que(
))*raslade el contenido de la posicin de memoria + a la posicin de memoria ,.--
Si lo vemos escrito de esta forma, lo entenderemos f%cilmente, a que est% en nuestro
lengua#e natural, pero la m%quina elemental ser% incapaz de entender algo.
.on la pr%ctica en el mane#o de la m%quina se ca en la cuenta de que se podra utilizar la
propia m%quina para audar en la traduccin de estos programas. &s decir, que si a una
m%quina elemental se le dotaba de un programa, tambi/n elemental, que tradu#era un
nmero determinado de caracteres alfab/ticos en una secuencia de unos ceros, se podra
escribir un programa constituido por una secuencia de grupos de caracteres alfab/ticos, en
la que cada uno de los grupos indicara una accin a realizar por el ordenador , una vez
escrito el programa, sera la propia m%quina la que pasara los grupos de caracteres a bits.
0l grupo alfab/tico se le denomina mnemotcnico, e1istir% un mnemot/cnico por cada
instruccin. Se le da este nombre porque sirve para recordar con maor facilidad el con#unto
de instrucciones de una determinada m%quina.
*ambi/n se introdu#o la posibilidad de indicar a la computadora la direccin de un salto en
la secuencia de e#ecucin de un programa mediante la utilizacin de etiquetas.

0 los programas que permiten pasar del programa escrito de esta manera "programa fuente,
en ensamblador$ al lenguaje mquina tambi/n se les denomina normalmente
ensambladores.
VEN*AJA+ DE LO+ LENGUAJE+ EN+AMBLADO,E+
2n programa escrito en el lengua#e ensamblador requiere considerablemente menos
memoria tiempo de e#ecucin que un programa escrito en los conocidos lengua#es
de alto nivel, como ., .33, #ava, etc.
&l lengua#e ensamblador da a un programador la capacidad de realizar tareas mu
t/cnicas que serian difciles, si no es que imposibles de realizar en un lengua#e de
alto nivel.
&l conocimiento del lengua#e ensamblador permite una comprensin de la
arquitectura de la maquina que ningn lengua#e de alto nivel puede ofrecer.
0unque la maora de los especialistas en Software desarrolla aplicaciones en
lengua#es de alto nivel, que son m%s f%ciles de escribir de dar mantenimiento, una
practica comn es recodificar en lengua#e ensamblador aquellas rutinas que han
causado cuellos de botella en el procesamiento.
Los programas residentes rutinas de servicio de interrupcin casi siempre son
desarrollados en el lengua#e ensamblador.
Los lengua#es de alto nivel fueron dise4ados para eliminar las particularidades de una
computadora especfica, mientras que un lengua#e ensamblador esta dise4ado para una
familia especifica de microprocesadores.
,EGI+*,O+ IN*E,NO+ DEL -,OCE+ADO,.
Los registros del procesador se emplean para controlar instrucciones en e#ecucin, mane#ar
direccionamiento de memoria proporcionar capacidad aritm/tica. Los registros son
direccionables por medio de un nombre. Los bits por convencin, se numeran de derecha a
izquierda, como en(
... !5 !6 !7 !8 !! !0 9 : ; < 5 6 7 8 ! 0

,e#$s.ros de se#men.o
2n registro de segmento tiene !< bits de longitud facilita un %rea de memoria para
direccionamiento conocida como el segmento actual.

,e#$s.ro C+ (+e#men.o de C/d$#o!. &l =>S almacena la direccin inicial del segmento
de cdigo de un programa en el registro .S. &sta direccin de segmento, mas un valor de
desplazamiento en el registro apuntador de instruccin "?'$, indica la direccin de una
instruccin que es buscada para su e#ecucin.

,e#$s.ro D+ (+e#men.o de Da.os!. La direccin inicial de un segmento de datos de
programa es almacenada en el registro =S. &n t/rminos sencillos, esta direccin, mas un
valor de desplazamiento en una instruccin, genera una referencia a la localidad de un bte
especifico en el segmento de datos.
,e#$s.ro ++ (+e#men.o de -$la!. &l registro SS permite la colocacin en memoria de una
pila, para almacenamiento temporal de direcciones datos. &l =>S almacena la direccin
de inicio del segmento de pila de un programa en le registro SS. &sta direccin de
segmento, mas un valor de desplazamiento en el registro del apuntador de pila "S'$, indica
la palabra actual en la pila que esta siendo direccionada.
,e#$s.ros E+ (+e#men.o E0.ra!. 0lgunas operaciones con cadenas de caracteres "datos
de caracteres$ utilizan el registro e1tra de segmento para mane#ar el direccionamiento de
memoria. &n este conte1to, el registro &S esta asociado con el registro =? "ndice$. 2n
programa que requiere el uso del registro &S puede inicializarlo con una direccin de
segmento apropiada.
,e#$s.ros de prop/s$.o #eneral.
Son nicos en el sentido de que se puede direccionarlos como una palabra o como una
parte de un bte. &l ltimo bte de la izquierda es la parte @alta@, el ltimo bte de la
derecha es la parte @ba#a@. 'or e#emplo, el registro .+ consta de una parte .A "alta$ una
parte .l "ba#a$, podemos referirnos a cualquier parte por su nombre.

,e#$s.ro A1 (Acumulador!. &s utilizado para operaciones que implican entradaBsalida la
maor parte de la aritm/tica. *ambi/n, algunas operaciones generan cdigo mas eficiente si
se refieren al 0+ en lugar de a los otros registros.

,e#$s.ro B1 (Base!. &s el nico registro de propsito general que puede ser ndice para
direccionamiento inde1ado. *ambi/n es comn emplear el C+ para c%lculos.
,e#$s.ro D1 (da.os!. 0lgunas operaciones de entradaBsalida requieren uso, las
operaciones de multiplicacin divisin con cifras grandes suponen al =+ al 0+
traba#ando #untos.

,EGI+*,O+ A-UN*ADO,E+.
Los registros S' "apuntador de la pila$ , C' "apuntador de base$ est%n asociados con el
registro SS permiten al sistema acceder a datos en el segmento de la pila.

,e#$s.ro +-. &l apuntador de la pila de !< bits esta asociado con el registro SS
proporciona un valor de desplazamiento que se refiere a la palabra actual que esta siendo
procesada en la pila.
,e#$s.ro B-. &l C' de !< bits facilita la referencia de par%metros, los cuales son datos
direcciones transmitidos va pila. Los procesadores :07:< posteriores tienen un C'
ampliado de 78 bits llamado el registro &C'.

,EGI+*,O+ 2NDICE.
Los registros S? =? est%n disponibles para direccionamiento inde1ado para sumas
restas.
,e#$s.ro +I. &l registro ndice fuente de !< bits es requerido por algunas operaciones con
cadenas "de caracteres$. &n este conte1to, el S? esta asociado con el registro =S.

,e#$s.ro DI. &l registro ndice destino tambi/n es requerido por algunas operaciones con
cadenas de caracteres. &n este conte1to, el =? esta asociado con el registro &S. Los
procesadores :07:< posteriores permiten el uso de un registro ampliado de 78 bits, el &=?.

,EGI+*,O DE BANDE,A+.
O3 (Over4lo"5 desbordam$en.o!. ?ndica desbordamiento de un bit de orden alto "mas a la
izquierda$ despu/s de una operacin aritm/tica.
D3 (d$recc$/n!. =esigna la direccin hacia la izquierda o hacia la derecha para mover o
comparar cadenas de caracteres.
I3 ($n.errupc$/n!. ?ndica que una interrupcin e1terna, como la entrada desde el teclado,
sea procesada o ignorada.
*3 (.rampa!. 'ermite la operacin del procesador en modo de un paso. Los programas
depuradores, como el =&C2D, activan esta bandera de manera que usted pueda avanzar
en la e#ecucin de una sola instruccin a un tiempo, para e1aminar el efecto de esa
instruccin sobre los registros de memoria.
+3 (s$#no!. .ontiene el signo resultante de una operacin aritm/tica "0 E positivo ! E
negativo$.
63 (cero!. ?ndica el resultado de una operacin aritm/tica o de comparacin "0 E resultado
diferente de cero ! E resultado igual a cero$.
A3 (acarreo au0$l$ar!. .ontiene un acarreo e1terno del C?* 7 en un dato de : bits para
aritm/tica especializada.
-3 (par$dad!. ?ndica paridad par o impar de una operacin en datos de : bits de ba#o orden
"mas a la derecha$.
C3 (acarreo!. .ontiene el acarreo de orden mas alto "mas a la izquierda$ despu/s de una
operacin aritm/ticaF tambi/n lleva el contenido del ultimo C?* en una operacin de
corrimiento o de rotacin.
+EGMEN*O.
2n segmento es un %rea especial en un programa que inicia en un lmite de un p%rrafo, esto
es, en una localidad de regularmente divisible entre !<, o !0A. 0unque un segmento puede
estar ubicado casi en cualquier lugar de la memoria , en modo real, puede ser hasta de
<6G, solo necesita tanto espacio como el programa requiera para su e#ecucin.
Los tres segmentos principales son los segmentos de cdigo, de datos de la pila.
+e#men.o de c/d$#o (C+!.
.ontiene las instrucciones de maquina que son e#ecutadas por lo comn la primera
instruccin e#ecutable esta en el inicio del segmento, el sistema operativo enlaza a esa
localidad para iniciar la e#ecucin del programa. .omo su nombre indica, el registro del .S
direcciona el segmento de cdigo.
+e#men.o de da.os.
&l segmento de datos "=S$ contiene datos, constantes %reas de traba#o definidos por el
programa. &l registro =S direcciona el segmento de datos.
+e#men.o de p$la.
&n t/rminos sencillos, la pila contiene los datos direcciones que usted necesita guardar
temporalmente o para uso de sus @llamadas@ subrutinas. &l registro de segmento de la pila
"SS$ direcciona el segmento de la pila.

M7*ODO+ DE DI,ECCIONAMIEN*O.
MODO IM-L2CI*O.
&n este modo se especifican los operandos en forma implcita en la definicin de la
instruccin. *odas las instrucciones de referencia a registro que utilizan un acumulador son
instrucciones de modo implcito.
MODO INMEDIA*O.
&n este modo se especifica el operando en la instruccin misma. &n otras palabras, una
instruccin de modo inmediato tiene un campo operando, en lugar de una campo de
direccin. 2n campo de operando contiene el operando real que se va a usar #unto con la
operacin especificada en la instruccin. Las instrucciones de modo inmediato son tiles
para inicializar registros en un valor constante.
MODO DE ,EGI+*,O.
&n este modo, los operandos est%n en registros que residen dentro de la .'2. Se
selecciona el registro particular de un campo de registro en la instruccin. 2n campo H bits
puede especificar cualquiera de 8 a la H registros.

MODO INDI,EC*O -O, ,EGI+*,O.
&n este modo la instruccin especifica un registro en la .'2 cuo contenido proporciona la
direccin del operando en la memoria. &n otras palabras, el registro seleccionado contiene
la direccin del operando en lugar del operando mismo. 0ntes de utilizar una instruccin de
modo indirecto por registro, el programador debe asegurarse de que la direccin de
memoria del operando esta colocada en el registro del procesador con una instruccin
previa. &ntonces una referencia al registro es equivalente a especificar una direccin de
memoria.

MODO DE DI,ECCIONAMIEN*O DI,EC*O.
&n este modo la direccin efectiva es igual a la parte de direccin de la instruccin. &l
operando reside en memoria su direccin la proporciona en forma directa el campo de
direccin de la instruccin.
MODO DE DI,ECCIONAMIEN*O INDI,EC*O.
&n este modo, el campo de direccin de la instruccin proporciona la direccin en que se
almacena la direccin efectiva en la memoria. &l control recupera la instruccin de la
memoria utiliza su parte de direccin para acceder la memoria una vez m%s con el fin de
leer la direccin efectiva.
MODO DE DI,ECCIONAMIEN*O INDE1ADO.
&n este modo el contenido de un registro ndice se suma a la parte de direccin de la
instruccin para obtener la direccin efectiva. &l registro ndice es un registro .'2 especial
que contiene un valor ndice. 2n campo de direccin de la instruccin define 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 la direccin del operando es el valor del ndice
almacenado en el registro de ndice. .ualquier operando en el arreglo puede accederse con
la misma instruccin siempre cuando el registro ndice contenga el valor de ndice
correcto. &l registro ndice puede incrementarse para facilitar el acceso a operandos
consecutivos.
MODO DE DI,ECCIONAMIEN*O DE ,EGI+*,O BA+E.
&n este modo, el contenido de un registro base se suma a la parte de direccin de la
instruccin para obtener la direccin efectiva. &sto es similar al modo de direccionamiento
inde1ado, e1cepto en que el registro se denomina ahora registro base, en lugar de registro
ndice.
IN*E,,U-CIONE+ DEL BIO+.
&l C?>S contiene un e1tenso con#unto de rutinas de entradaBsalida tablas que indican el
estado de los dispositivos del sistema. &l dos los programas usuarios pueden solicitar
rutinas del C?>S para la comunicacin con los dispositivos conectados al sistema.
IN* 889: =ivisin entre cero. Llamada por un intento de dividir entre cero. Iuestra un
mensa#e por lo regular se cae el sistema.
IN* 8;9: 2n solo pas. 2sado por =&C2D otros depuradores para permitir avanzar por
paso a trav/s de la e#ecucin de un programa.
IN* 8<9: ?nterrupcin no enmascarare. 2sada para condiciones graves de hardware, tal
como errores de paridad, que siempre est%n habilitados.
IN* 8=9: 'unto de ruptura. 2sado por depuracin de programas para detener la e#ecucin.
IN* 8>9: =esbordamiento. 'uede ser causado por una operacin aritm/tica, aunque por lo
regular no realiza accin alguna.
IN* 8?9: ?mprime pantalla. Aace que el contenido de la pantalla se imprima.
IN* 8@9: Sistema del cronometro. 2na interrupcin de hardware que actualiza la hora del
sistema "si es necesario$ la fecha.
IN* 8A9: ?nterrupcin del teclado.
IN* OB95 IN* OC9: .ontrol de dispositivo serial. .ontrola los puertos .>I! .>I8,
respectivamente.
IN* 8D95 IN* O39: .ontrol de dispositivo paralelo. .ontrola los puertos L'*! L'*8,
respectivamente.
IN* 8E9: .ontrol de disco fle1ible. Se4ala actividad de disco fle1ible, como la terminacin
de una operacin de &BS.
IN* ;89: =espliegue en vdeo. 0cepta el nmero de funciones en el 0A para el modo de
pantalla, colocacin del cursor, recorrido despliegue.
IN* ;;9: =eterminacin del equipo. =etermina los dispositivos opcionales en el sistema
regresa el valor en la localidad 60(!0A del C?>S al 0+. "0 la hora de encender el equipo, el
sistema e#ecuta esta operacin almacena el 0+ en la localidad 60(!0A$.
IN* ;<9: =eterminacin del tama4o de la memoria. &n el 0+, regresa el tama4o de la
memoria de la tar#eta del sistema, en t/rminos de Hilo bites contiguos.
IN* ;=9: &ntradaBsalida de disco. 0cepta varias funciones en el 0A para el estado del disco,
sectores ledos, sectores escritos, verificacin, formato obtener diagnostico.
IN*E,U-CIONE+ DEL DO+.
Las interrupciones desde la 80A hasta la 7JA est%n reservadas para operaciones del =>S.
IN* <89: *ermina programa. Jinaliza la e#ecucin de un programa ..>I, limpia los bufer de
registros regresa el control al =>S. La terminacin preferida es por medio de la funcin
6.A de la ?K* 8!A.
IN* <;9: 'eticin de funcin al =>S. La principal operacin del =>S necesita una funcin
en el 0A.
IN* <<9: =ireccin de terminacin. .opia la direccin de esta interrupcin en el 'S' del
programa "en el desplazamiento 00A$ cuando el =>S carga un programa para e#ecucin. 0
la terminacin del programa, el =>S transfiere el control a la direccin de la interrupcin.
IN* <=9: =ireccin de .ltr 3 CreaH. =ise4ada para transferir el control a una rutina del =>S
"por medio del 'S' desplazamiento 0&A$ cuando presionas .tlt 3 CreaH o .tlr 3 c. La rutina
finaliza la e#ecucin de un programa o de un archivo de procesamiento por lotes.
IN* <>9: Iane#ador de error critico. 2sada por el dos para transferir el control cuando
reconoce un error
IN* <?9: Lectura absoluta de disco. Lee el contenido de uno o mas sectores de disco.
IN* <B9: &scritura absoluta de disco. &scribe informacin desde la memoria a uno o mas
sectores de disco.
IN* <C9: *ermina pero permanece residente en memoria. Aace que un programa ..>I al
salir permanezca residente en memoria.
IN* <39: ?nterrupcin de multiple1ion. ?mplica la comunicacin entre programas, como la
comunicacin del estado de un spooler de la impresora, la presencia de un controlador de
dispositivo o un comando del =>S tal como 0SS?DK o 0''&K=.
IN* ==9: Iane#ador del ratn. 'roporciona servicios para el mane#o del ratn.

COMEN*A,IO+ EN LENGUAJE EN+AMBLADO,.
&l uso de comentarios a lo largo de un programa puede me#orar su claridad, en especial en
lengua#e ensamblador, donde el propsito de un con#unto de instrucciones con frecuencia no
es claro. 2n comentario empieza con punto coma "F$ , en donde quiera que lo codifique, el
ensamblador supone que todos los caracteres a la derecha de esa lnea son comentarios.
2n comentario puede contener cualquier car%cter imprimible, incluendo el espacio en
blanco.

!. F *oda esta lnea es un comentario.
8. 0== 0+, C+F .omentario en la misma lnea que la instruccin.
DI,EC*IVA+ -A,A LI+*A,: -AGE D *I*LE
La directiva '0D& *?*L& audan a controlar el formato de un listado de un programa en
ensamblador.
-AGE. =esigna el nmero m%1imo de lneas para listar en una p%gina el nmero m%1imo
de caracteres en una lnea. Su formato general es(
'0D& LlongitudML, anchoM
&l e#emplo siguiente proporciona <0 lneas por p%gina !78 caracteres por lnea(
'0D& <0, !78
*I*LE. Se puede emplear la directiva *?*L& para hacer que un titulo para un programa se
imprima en la lnea 8 de cada p%gina en el listado del programa.
*?*L& *e1to.
*?*L& 'rog! Ii primer programa en ensamblador
DI,EC*IVA +EGMEN*
2n programa ensamblado en formato .&+& consiste en uno o m%s segmentos. 2n segmento
de pila define el almac/n de la pila, un segmento de datos define los elementos de datos
un segmento de cdigo proporciona un cdigo e#ecutable. Las directivas para definir un
segmento, S&DI&K* &K=S tienen el formato siguiente(
&l enunciado S&DI&K* define el inicio de un segmento. &l nombre del segmento debe
estar presente, ser nico cumplir las convenciones para nombres del lengua#e. &L
enunciado &K=S indica el final del segmento contiene el mismo nombre del enunciado
S&DI&K*. &l tama4o m%1imo de un segmento es de <6G. &l operando de un enunciado
S&DI&K* puede tener tres tipos de opciones( alineacin, combinar clase, codificadas en
este formato(

Kombre S&DI&K* alineacin combinar N claseO
*I-O ALINEACION. La entrada alineacin indica el lmite en el que inicia el segmento. 'ara
el requerimiento tpico, '0P0, alinea el segmento con el lmite de un p%rrafo, de manera que
la direccin inicial es divisible entre !<, o !0A. &n ausencia de un operando hace que el
ensamblador por omisin tome '0P0.
*I-O COMBINA,. La entrada combinar indica si se combina el segmento con otros
segmentos cuando son enlazados despu/s de ensamblar. Los tipos de combinar son
S*0.G, .>II>K, '2CL?. la e1presin 0*. 'or e#emplo, el segmento de la pila por lo
comn es definido como(
nombre S&DI&K* '0P0 S*0.G
'uede utilizar '2CL?. .>II>K en donde tenga el propsito de combinar de forma
separada programas ensamblados cuando los enlaza. &n otros casos, donde un programa
no es combinado con otros, puede omitir la opcin o codificar K>K&.
*I-O CLA+E. La entrada clase, encerrada entre apstrofos, es utilizada para agrupar
segmentos cuando se enlazan. Se utiliza la clase NcodeN para el segmento de cdigos, NdataN
por segmento de datos NstacHN para el segmento de la pila. &l e#emplo siguiente define un
segmento de pila con tipos alineacin, combinar clase(
nombre S&DI&K* '0P0 S*0.G NStacHN
DI,EC*IVA A++UME.
2n programa utiliza el registro SS para direccionar la pila, al registro =S para direccionar el
segmento de datos el registro .S para direccionar el segmento de cdigo. 'ara este fin,
usted tiene que indicar al ensamblador el propsito de cada segmento en el programa. La
directiva para este propsito es 0SS&I&, codificada en el segmento de cdigo como sigue(

>'&P0.?>K >'&P0K=>
0SS2I& SS( nompila, =S( nomsegdatos, .S( nomsegcodigo,...
Los operandos pueden aparecer en cualquier orden. 0l igual que otras directivas, 0SS2I&
es solo un mensa#e que auda al ensamblador a convertir cdigo simblico a cdigo
maquinaF aun puede tener que codificar instrucciones que fsicamente cargan direcciones en
registros de segmentos en el momento de la e#ecucin.


! '0D& <0,!78
8 *?*L& '060SI! &S*P2.*2P0 =& 2K 'P>DP0I0 .&+&
7FQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ
6 S*0.GSD S&DI&K* '0P0 S*0.G NStacHN
5 ...
< S*0.GSD &K=S
;FQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ
: =0*0SD S&DI&K* '0P0 N=ataN
9 ...
!0 =0*0SD &K=S
!!FQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ
!8 .>=&SD S&DI&K* '0P0 N.odeN
!7 C&D?K 'P>. J0P
!6 0SS2I& SS(S*0.GSD, =S(=0*0SD,.S(.>=&SD
!5 I>R 0+, =0*0SD F>btiene la direccin del segmento de datos
!< I>R =S, 0+ F0lmacena direccin en =S
!; ...
!: I>R 0+, 6.00A F'eticin
!9 ?K* 8!A FSalida al =>S
80 C&D?K &K='
8! .>=&SD &K=S
88 &K= C&D?K


DI,EC*IVA+ +IM-LI3ICADA+ DE +EGMEN*O+
Los ensambladores de Iicrosoft de Corland proporcionan algunas formas abreviadas para
definir segmentos. 'ara usar estas abreviaturas, inicialice el modelo de memoria antes de
definir algn segmento. &l formato general "incluendo el punto inicial$ es(

.MODEL modelo de memor$a
&l modelo de memoria puede ser *?K,, SI0LL, I&=?2I, .>I'0.* o L0PD&
&l modelo *?K, esta destinado para uso e1clusivo de programas ..>I, los cuales tienen
sus datos, cdigo pila en un segmento. &l modelo SI0LL e1ige que el cdigo quepa en un
segmento de <6G los datos en otro segmento de <6G. La directiva .I>=&LL genera
autom%ticamente el enunciado 0SS2I& necesario.
Los formatos generales "incluendo el punto inicial$ para las directivas que define los
segmentos de la pila, de datos de cdigo son(

.+*ACE F.amaGoH
.DA*A
.CODE FnombreH
.ada una de estas directivas hace que el ensamblador genere el enunciado S&DI&K*
necesario su correspondiente &K=S. Los nombres por omisin de los segmentos "que
usted no tiene que definir$ son S*0.G, =0*0 *&+* "para el segmento de cdigo$.
La figura 6.7 proporciona un e#emplo haciendo uso de las directivas simplificadas de
segmento.
'age <0,!78
*?*L& '060SI8 "&+&$ >peraciones de mover sumar
FQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ
.I>=&L SI0LL
.S*0.G <6
.=0*0
FQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ
..>=&
C&D?K 'P>. J0P
C&D?K &K='
&K= C&D?K
*,AN+3E,ENCIA DE DA*O+.
La instruccin de transferencia de datos por e1celencia es(
I>R destino, fuente
&ntendiendo por fuente el contenido que se va a transferir a una determinada zona o
registro de memoria denominada destino.
&sta instruccin, por tanto, nos va a permitir transferir informacin entre registros memoria,
memoria registros entre los propios registros utilizando alguno de los diferentes modos
de direccionamiento. .on la instruccin I>R diremos que se pueden realizar todo tipo de
movimientos teniendo en cuenta las siguientes restricciones(
!.Q Ko se puede realizar una transferencia de datos entre dos posiciones de memoria
directamente, porque siempre que queramos efectuarlas tendremos que utilizar un registro
intermedio que haga de puente.
8.Q *ampoco se puede hacer una transferencia directa entre dos registros de segmento.
7.Q *ampoco se puede cargar en los registros de segmento un dato utilizando
direccionamiento inmediato, es decir, una constante, por lo que tambi/n habr% que recurrir a
un registro puente cuando sea preciso.

2na instruccin til pero no imprescindible es(
+.AD =0*>!, =0*>8
Sue intercambia los contenidos de las posiciones de memoria o registros representados por
=0*>! =0*>8.
'or e#emplo, si queremos intercambiar los contenidos de los registros 0+ C+, podemos
hacer(

I>R 02+, 0+
I>R 0+, C+
I>R C+, 02+
&n donde 02+ es una variable au1iliar que hace de puente, o simplemente utilizar(
+.AD 0+, C+
Las restricciones que presenta esta operacin es que no se pueden efectuar intercambios
directamente entre posiciones de memoria ni tampoco entre registros de segmento.
La instruccin +L0* tabla carga en el registro 0L el contenido de la posicin LC+ML0LM, en
donde el registro C+ ha de apuntar al comienzo de una tabla. =icho de otra manera, 0L
hace de ndice de la tabla de almac/n destino del contenido de la tabla.
'or e#emplo, el siguiente programa(
=0*>S S&DI&K*
*0CL0 =C 8, 7, 5, :, !<,87
=0*>S &K=S
.>=?D> S&DI&K*
I>R& C+, >JJS&* *0CL0F ?nicializa C+ con la direccin donde comienza la tabla
I>R& 0L, 5
+L0* *0CL0
.>=?D> &K=S
Aace que al final el contenido de 0L se !< a que es el 5to. &lemento de la tabla 0L antes
de +L0* *0CL0 contena el valor 5.
'ara finalizar con las instrucciones de transferencia veremos un grupo de tres instrucciones(
Q L&0 o cargar direccin efectiva.
Q L=S o cargar el puntero en =S.
Q L&S o cargar el puntero en &S.
=enominadas de transferencia de direcciones.
La primera, L&0, carga el desplazamiento u >JJS&* correspondiente al operando fuente en
el operando destino. 'or e#emplo, la instruccin I>R& C+, >JJS&* *0CL0 del e#emplo
anterior sera equivalente a L&0 C+, *0CL0.
La segunda, L=S, se utiliza para cargar el valor del segmento de una variable en el registro
=S el desplazamiento correspondiente en el registro o posicin de memoria indicada en la
instruccin. 'or e#emplo, la instruccin L=S C+, K2I! hara esquem%ticamente lo siguiente(
La tercera ultima de las instrucciones, L&S, es similar a L=S, con la nica salvedad de que
el valor del segmento se carga sobre el registro de segmento &S en vez del =S.

+UMA D ,E+*A.
Las instrucciones 0== S2C realizan sumas restas sencillas de datos binarios. Los
nmeros binarios negativos est%n representados en la forma de complemento a dos( ?nvierta
todos los bits del nmero positivo sume !. .omo en otras instrucciones, no e1isten
operaciones directas de memoria a memoria. &l e#emplo siguiente utiliza el registro 0+ para
sumar T>P=0 a T>P=C(

T>P=0 =T !87 F =efine T>P=0
T>P=C =T 85 F =efine T>P=C
...
I>R 0+, T>P=0 F Iueve T>P=0 al 0+
0== 0+, T>P=C F Suma T>P=C al 0+
I>R T>P=C, 0+ F Iueve 0+ a T>P=C
DE+BO,DAMIEN*O+
&ste alerta con los desbordamientos en las operaciones aritm/ticas. ,a que un bte solo
permite el uso de un C?* de signo siete de datos "desde Q!8: hasta 3!8;$, una operacin
aritm/tica puede e1ceder con facilidad la capacidad de un registro de un bte. , una suma
en el registro 0L, que e1ceda su capacidad puede provocar resultados inesperados.
O-E,ANDO+ LIGICO+.
La lgica booleana es importante en el dise4o de circuitos tiene un paralelo en la lgica de
programacin. Las instrucciones para lgica booleana son 0K=, >P, +>P, *&S* K>*,
que pueden usarse para poner bits en 0 o en ! para mane#ar datos 0S.?? con propsitos
aritm/ticos. &l formato general para las operaciones booleanas es(
L&tiqueta(M U >peracin U VregistroBmemoriaW, VregistroBmemoriaBinmediatoWU
&l primer operando se refiere a un bte o palabra en un registro o memoria es el nico
valor que es cambiado. &l segundo operando hace referencia a un registro o a un valor
inmediato. La operacin compara los bits de los dos operandos referenciados de acuerdo
con esto establece las banderas .J, >J, 'J, SJ XJ.
AND. Si ambos bits comparados son !, establece el resultado en !. Las dem%s condiciones
dan como resultado 0.
O,. Si cualquiera "o ambos$ de los bits comparados es !, el resultado es !. Si ambos bits
est%n en 0, el resultado es 0.
1O,. Si uno de los bits comparados es 0 el otro !, el resultado es !. Si ambos bits
comparados son iguales "ambos 0 o ambos !$, el resultado es 0.
*E+*. &stablece las banderas igual que lo hace 0K=, pero no cambia los bits de los
operandos.
COM-A,ACIIN.
La instruccin .I' pro lo comn es utilizada para comparar dos campos de datos, uno de
los cuales est%n contenidos en un registro. &l formato general para .I' es(

U Letiqueta(M U .I' U VregistroBmemoriaW, VregistroBmemoriaBinmediatoW U
>bserve que la operacin compara el primer operando con el segundoF por e#emplo, el valor
del primer operando es maor que, igual o menor que el valor del segundo operandoY

La instruccin .I'S compara el contenido de una localidad de memoria "direccionada por
=S(S?$. =ependiendo de la bandera de direccin, .I'S incrementa o disminue tambi/n los
registros S? =? en ! para btes, en 8 para palabras en 6 para palabras dobles. La
operacin establece las banderas 0J, .J, >J, 'J, SJ XJ.
.uando se combinan con un prefi#o P&' una longitud en el .+, de manera sucesiva
.I'S puede comparar cadenas de cualquier longitud.
'ero observe que .I'S proporciona una comparacin alfanum/rica, esto es, una
comparacin de acuerdo a con los valores 0S.??. .onsidere la comparacin de dos cadenas
que contienen Z&0K Z>0K
0lgunas derivaciones de .I'S son las siguientes(
.I'SC. .ompara btes.
.I'S=. .ompara palabras dobles.
.I'ST. .ompara palabras.
+AL*O+ CONDICIONALE+ E INCONDICIONALE+.
La maora de los programas constan de varios ciclos en los que una serie de pasos se
repite hasta alcanzar un requisito especfico varias pruebas para determinar que accin se
realiza de entre varias posibles.
2na instruccin usada comnmente para la transferencia de control es la instruccin ZI'
"#ump, salto, bifurcacin$. 2n salto es incondicional, a que la operacin transfiere el control
ba#o cualquier circunstancia. *ambi/n ZI' vaca el resultado de la instruccin previamente
procesadaF por lo que, un programa con muchas operaciones de salto puede perder
velocidad de procesamiento.

La instruccin L>>', requiere un valor inicial en el registro .+. &n cada iteracin, L>>' de
forma autom%tica disminue ! de .+. Si el valor en el .+ es cero, el control pasa a la
instruccin que sigueF si el valor en el .+ no es cero, el control pasa a la direccin del
operando. La distancia debe ser un salto corto, desde Q!8: hasta 3!8; btes. 'ara una
operacin que e1ceda este limite, el ensamblador enva un mensa#e como @salto relativo
fuera de rango@.
&l siguiente programa muestra el funcionamiento de la instruccin L>>'.

'age <0,!78
*?*L& '0:L>>' ".>I$ ?lustracin de L>>'
.I>=&L SI0LL
..>=&
>PD !00A
I0?K 'P>. K&0P
I>R 0+,0! F?niciacin de 0+,
I>R C+,0! FC+
I>R .+,0! F.+ a 0!
I>R .+,!0 F?niciar
080( FKmero de iteraciones
0== 0+, 0! FSumar 0! a 0+
0== C+, 0+ FSumar 0+ a C+
SAL =+, ! FIultiplicar por dos a =+
L>>' 080 F?terar si es diferente de cero
I>R 0+, 6.00A FSalida a =>S
I0?K &K='
&K= I0?K
&1isten dos variaciones de la instruccin L>>', ambas tambi/n decrementan el .+ en !.
L>>'&BL>>'X "repite el ciclo mientras sea igual o repite el ciclo mientras sea cero$
continua el ciclo mientras que el valor en el .+ es cero o la condicin de cero esta
establecida.
L>>'K&BL>>'KX "repite el ciclo mientras no sea igual o repite el ciclo mientras sea cero$
continua el ciclo mientras el valor en el .+ no es cero o la condicin de cero no esta
establecida.
LLAMADA DE -,OCEDIMIEN*O+.
Aasta ahora los segmentos de cdigo han consistido solo en un procedimiento, codificado
como(
C&D?K 'P>. J0P
.
.
.
C&D?K &K='
&n este caso el operador J0P informa al sistema que la direccin indicada es el punto de
entrada para la e#ecucin del programa, mientras que la directiva &K=' define el final del
procedimiento. Sin embargo, un segmento de cdigo puede tener cualquier numero de
procedimientos, todos distinguidos por 'P>. &K='. 2n procedimiento llamado "o
subrutina$ es una seccin de cdigo que realiza una tarea definida clara "tal como ubicar el
cursor o bien obtener entrada del teclado$.
La organizacin de un programa en procedimientos proporciona los beneficios siguientes(
!. Peduce la cantidad de cdigo, a que un procedimiento comn puede ser llamado desde
cualquier lugar en el segmento de cdigo.
8. Jortalece la me#or organizacin del programa.
7. Jacilita la depuracin del programa, a que los errores pueden ser aislados con maor
claridad.
6. 0uda en el mantenimiento progresivo de programas, a que los procedimientos son
identificados de forma r%pida para su modificacin.

Operac$ones CALL J ,E*
La instruccin .0LL transfiere el control a un procedimiento llamado, la instruccin P&*
regresa del procedimiento llamado al procedimiento original que hizo la llamada. P&* debe
ser la ultima instruccin en un procedimiento llamado.
&l cdigo ob#eto particular que .0LL P&* generan depende de si la operacin implica un
procedimiento K&0P "cercano$ o un procedimiento J0P "le#ano$.

Llamada J re#reso cercanos. 2na llamada ".0LL$ a un procedimiento dentro del mismo
segmento es cercana realiza lo siguiente(

=isminue el S' en 8 "una palabra$
Iete el ?' "que contiene el desplazamiento de la instruccin que sigue al .0LL$ en la
pila.
?nserta la direccin del desplazamiento del procedimiento llamado en el ?' "esta
operacin vaca el resultado de la instruccin previamente procesada$,
2n P&* que regresa desde un procedimiento cercano realiza lo siguiente(

Saca el antiguo valor de ?' de la pila lo enva al ?' "lo cual tambi/n vaca el
resultado de la instruccin previamente procesada$.
?ncrementa el S' en 8.
0hora el .S(?' apunta a la instruccin que sigue al .0LL original en la llamada del
procedimiento, en donde se reasume la e#ecucin.
Llamada J re#reso le(anos. 2na llamada ".0LL$ le#ana llama a un procedimiento
etiquetado con J0P, tal vez en un segmento de cdigo separado. 2n .0LL le#ano mete a la
pila al .S al ?', P&* los saca de la pila.
page <0,!78
*?*L& '0:.0LL' "&+&$ Llamada a procedimientos
.I>=&L SI0LL
.S*0.G <6
.=0*0
FQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ
..>=&
C&D?K 'P>. J0P
.0LL C!0 FLlama a C!0
F ...
I>R 0+,6.00A FSalida a =>S
?K* 8!A
C&D?K &K='
FQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ
C!0 'P>. K&0P
.0LL .!0 FLlama a .!0
F ...
P&* F=e regreso
C!0 &K=' FSuien llama
FQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ
&K= C&D?K
DE3INICIIN DE UNA MAC,O.
2na definicin de macro aparece antes de que cualquier definicin de segmento.
&1aminemos una definicin de una macro sencilla que inicializa los registros de segmento
para un programa.&+&(

?K?.?0P&DS I0.P> F =efine macro
I>R 0+, [data FW .uerpo de
I>R =S, 0+ FW la definicin
I>R &S, 0+ FW de la macro
&K=I F Jin de la macro

&l nombre de esta macro es ?K?.?0P&DS, aunque es aceptable cualquier otro nombre
valido que sea nico. La directiva I0.P> en la primer lnea indica al ensamblador que las
instrucciones que siguen, hasta &K=I "@fin de la macro@$, son parte de la definicin de la
macro. La directiva &K=I termina la definicin de la macro.
Los nombres a que se hace referencia en la definicin de la macro, [data, 0+, =S &S,
deben estar definidos en alguna parte del programa o deben ser dados a conocer de alguna
otra forma al ensamblador.
&n forma subsecuente se puede usar la macroQinstruccin ?K?.?0P&DS en el segmento de
cdigo en donde quiera inicializar los registros. .uando el ensamblador encuentra la macroQ
instruccin ?K?.?0P&DS, busca en una tabla de instrucciones simblicas , a falta de una
entrada, busca macroinstrucciones. ,a que el programa contiene una definicin de la macro
?K?.?0P&DS, el ensamblador sustitue el cuerpo de la definicin generando instrucciones(
la e1pansin de la macro.
2n programa usara la macroinstruccin ?K?.?0P&DS solo una vez, aunque otras macros
est%n dise4adas para ser utilizadas cualquier numero de veces cada vez el ensamblador
genera la misma e1pansin.
'ara hacer una macro fle1ible, puede definir nombres en ella como argumentos mudos
"ficticios$.La definicin de la macro siguiente, llamada =&S'L&D0P\ISD, proporciona el
uso de la funcin 09A del =>S para desplegar cualquier mensa#e. .uando se usa la
macroinstruccin el programador tiene que proporcionar el nombre del mensa#e, el cual hace
referencia a un %rea de datos terminada por un signo de dlar.

=&S'L&D0P\ISD I0.P> I&KS0Z& F 0rgumento mudo
I>R 0A, 09A
L&0 =+, I&KS0Z&
?K* 8!A
&K=I F Jin de la macro

2n argumento mudo en una definicin de macro indica al ensamblador que haga coincidir su
nombre con cualquier aparicin del mismo nombre en el cuerpo de la macro. 'or e#emplo, el
argumento mudo I&KS0Z& tambi/n aparece en la instruccin L&0.
BIBLIOG,A32A
Lengua#e &nsamblador 'rogramacin para '. ?CI .ompatibles. 'eter 0belF &d.
'earson