Vous êtes sur la page 1sur 35

Programacin en lenguaje ensamblador

Indice
1. Arquitectura del microprocesador
2. Programacin Bsica
3. Manipulacin de cadenas (Strings)
. Programacin de !"S
#. Macros
$. Programacin modular
%. Programacin &'(rida
). *onclusin
+. Bi(liogra,'a
1. Arquitectura del microprocesador
Introduccin
Con la aparicin de las computadoras personales (PC) y la reduccin en el costo de las mismas, el
microprocesador se convirti en uno de los dispositivos electrnicos ms importantes en la historia de la
electrnica.
Bsicamente, un microprocesador es un circuito electrnico de muy alta escala de interacin, capa! de reali!ar
una in"inidad de tareas de "orma repetitiva a velocidades muy altas. #sto se lora por medio de la lica dictada
por un con$unto de instrucciones que el microprocesador interpreta y e$ecuta y que reci%e el nom%re de
prorama.
&esde su aparicin en 1'(1 el microprocesador ha su"rido una ran cantidad de cam%ios, todos ellos hacia el
lado de aumentar su capacidad y velocidad de procesamiento.
Para poder utili!ar todo el potencial que encierra un microprocesador, es necesario conocer y comprender su
lenua$e natural, esto es) el lenua$e ensam%lador.
Importancia del lenua$e ensam%lador
#l lenua$e ensam%lador es la "orma ms %sica de proramar un microprocesador para que *ste sea capa! de
reali!ar las tareas o los clculos que se le requieran.
#l lenua$e ensam%lador es conocido como un lenua$e de %a$o nivel, esto sini"ica que nos permite controlar el
1++ , de las "unciones de un microprocesador, as- como los peri"*ricos asociados a *ste.
A di"erencia de los lenua$es de alto nivel, por e$emplo .Pascal., el lenua$e ensam%lador no requiere de un
compilador, esto es de%ido a que las instrucciones en lenua$e ensam%lador son traducidas directamente a
cdio %inario y despu*s son colocadas en memoria para que el microprocesador las tome directamente.
Aprender a proramar en lenua$e ensam%lador no es "cil, se requiere un cierto nivel de conocimiento de la
arquitectura y orani!acin de las computadoras, adems del conocimiento de proramacin en al/n otro
lenua$e
0enta$as del lenua$e ensam%lador)
Velocidad de ejecucin de los programas
Mayor control sobre el hardware de la computadora
&esventa$as del lenua$e ensam%lador)
Repeticin constante de grupos de instrucciones
No existe una sintaxis estandarizada
Dificultad para encontrar errores en los programas bugs!
1istoria de los procesadores
Con la aparicin de los circuitos interados, la posi%ilidad de reducir el tama2o de alunos dispositivos
electrnicos se vio enormemente "avorecida. 3os "a%ricantes de controladores interados, calculadoras y
alunos otros dispositivos comen!aron a solicitar sistemas interados en una sola pastilla, esto dio orien a la
aparicin de los microprocesadores.
4icroprocesadores de 5 %its
#n 1'(1, una compa2-a que se dedica%a a la "a%ricacin de memorias electrnicas lan! al mercado el primer
microprocesador del mundo. #ste microprocesador "ue el resultado de un tra%a$o encarado por una empresa
que se dedica%a a la "a%ricacin de calculadoras electrnicas. #l 5++5 era un microprocesador de 5 %its capa!
de direccionar 5+'6 localidades de memoria de 5 %its de ancho. #ste microprocesador conta%a con un con$unto
de 57 instrucciones y "ue ampliamente utili!ado en los primeros video$ueos y sistemas de control.
4icroprocesadores de 8 %its
Con la aparicin de aplicaciones ms comple$as para el microprocesador y el ran *9ito comercial del 5++5,
Intel decidi lan!ar al mercado un nuevo microprocesador, el 8++8, *ste "ue el primer microprocesador de 8 %its.
3as caracter-sticas de este microprocesador "ueron)
"apacidad de direccionamiento de #$ %b
Memoria de & bits
"onjunto de '& instrucciones
#ste microprocesador tuvo tanto *9ito, que en cosa de dos a2os su capacidad de proceso "ue insu"iciente para
los inenieros y desarrolladores, por lo cual en 1'(: se li%er el 8+8+. #ste microprocesador "ue una versin
me$orada de su predecesor y las me$oras consistieron en un con$unto ms rande de instrucciones, mayor
capacidad de direccionamiento y una mayor velocidad de procesamiento.
;inalmente, en 1'((, Intel anunci la aparicin del 8+87. #ste era el /ltimo microprocesador de 8 %its y
%sicamente id*ntico al 8+8+. <u principal me$ora "ue la incorporacin del relo$ tempori!ador dentro de la misma
pastilla.
4icroprocesadores de 16 %its
#n 1'(8, Intel lan! al mercado el 8+86 y un poco ms tarde el 8+88. #stos dos microprocesadores conta%an
con reistros internos de 16 %its, ten-an un %us de datos e9terno de 16 y 8 %its respectivamente y am%os eran
capaces de direccionar 14% de memoria por medio de un %us de direcciones de =+ l-neas.
>tra caracter-stica importante "ue que estos dos microprocesadores eran capaces de reali!ar la multiplicacin y
la divisin por hard?are, cosa que los anteriores no pod-an.
;inalmente apareci el 8+=86. #ste era el /ltimo microprocesador de 16 %its, el cual era una versin me$orada
del 8+86. #l =86 incorpora%a una unidad adicional para el mane$o de memoria y era capa! de direccionar 164%
en luar de 14% del 8+86.
4icroprocesadores de := %its
#l 8+:86 marco el inicio de la aparicin de los microprocesadores de := %its. #stos microprocesadores ten-an
randes venta$as so%re sus predecesores, entre las cuales se pueden destacar) direccionamiento de hasta 5@%
de memoria, velocidades de operacin ms altas, con$untos de instrucciones ms randes y adems conta%an
con memoria interna (cach*) de 8A% en las versiones ms %sicas.
&el :86 surieron di"erentes versiones, las cuales se listan a continuacin.
4odelo Bus de &atos Coprocesador matemtico
8+:86&B := <i
8+:86<3 16 Co
8+:86<B 16 Co
8+586<B := Co
8+586&B := <i
Derminales del microprocesador
#n esta seccin se reali!ar una %reve descripcin del con$unto de terminales del microprocesador ms
representativo de la "amilia 8+986.
#l microprocesador 8+86 puede tra%a$ar en dos modos di"erentes) el modo m-nimo y el modo m9imo. #n el
modo m9imo el microprocesador puede tra%a$ar en "orma con$unta con un microprocesador de datos num*rico
8+8( y alunos otros circuitos peri"*ricos. #n el modo m-nimo el microprocesador tra%a$a de "orma ms
autnoma al no depender de circuitos au9iliares, pero
esto a su ve! le resta "le9i%ilidad.
#n cualquiera de los dos modos, las terminales del microprocesador se pueden arupar de la siuiente "orma)
(limentacin
Reloj
"ontrol y estado
Direcciones
Datos
#l 8+86 cuenta con tres terminales de alimentacin) tierra (@C&) en las terminales 1 y =+ y 0ccE70 en la
terminal 5+.
#n la terminal 1' se conecta la se2al de relo$, la cual de%e provenir de un enerador de relo$ e9terno al
microprocesador.
#l 8+86 cuenta con =+ l-neas de direcciones (al iual que el 8+88). #stas l-neas son llamadas A+ a A1' y
proporcionan un rano de direccionamiento de 14B.
Para los datos, el 8+86 comparte las 16 l-neas ms %a$as de sus l-neas de direcciones, las cuales son llamadas
A&+ a A&17. #sto se lora racias a un canal de datos y direcciones multiple9ado.
#n cuanto a las se2ales de control y estado tenemos las siuientes)
3a terminal 4BF4C controla el cam%io de modo del microprocesador.
3as se2ales <+ a <( son se2ales de estado, *stas indican di"erentes situaciones acerca del estado del
microprocesador.
3a se2al G& en la terminal := indica una operacin de lectura.
#n la terminal == se encuentra la se2al G#A&H. #sta se2al es utili!ada por los di"erentes dispositivos de #F<
para indicarle al microprocesador si se encuentran listos para una trans"erencia.
3a se2al G#<#D en la terminal =1 es utili!ada para reiniciali!ar el microprocesador.
3a se2al C4I en la terminal 1( es una se2al de interrupcin no enmascara%le, lo cual sini"ica que no puede ser
manipulada por medio de so"t?are.
3a se2al ICDG en la terminal 18 es tam%i*n una se2al de interrupcin, la di"erencia radica en que esta se2al si
puede ser controlada por so"t?are. 3as interrupciones se estudian ms adelante.
3a terminal D#<D se utili!a para sincroni!ar al 8+86 con otros microprocesadores en una con"iuracin en
paralelo.
3as terminales GIF@D y 3>CA se utili!an para controlar el tra%a$o en paralelo de dos o mas microprocesadores.
3a se2al JG es utili!ada por el microprocesador cuando *ste requiere reali!ar aluna operacin de escritura
con la memoria o los dispositivos de #F<.
3as se2ales 1>3& y 13&A son utili!adas para controlar el acceso al %us del sistema.
&iarama de componentes internos
&escripcin de los componentes
3a "iura = muestra la estructura interna del microprocesador 8+86 con %ase en su modelo de proramacin. #l
microprocesador se divide en dos %loques principales) la unidad de inter"a! del %us y la unidad de e$ecucin.
Cada una de estas unidades opera de "orma as-ncrona para ma9imi!ar el rendimiento eneral del
microprocesador.
Knidad de e$ecucin
#ste elemento del microprocesador es el que se encara de e$ecutar las instrucciones. 3a unidad de e$ecucin
comprende el con$unto de reistros de propsito eneral, el reistro de %anderas y la unidad aritm*ticoLlica.
Knidad de inter"a! de %us
#sta unidad, la cual se conoce como BIK (Bus Inter"ace Knit), procesa todas las operaciones de
lecturaFescritura relacionadas con la memoria o con dispositivos de entradaFsalida, provenientes de la unidad de
e$ecucin. 3as instrucciones del prorama que se est e$ecutando son le-das por anticipado por esta unidad y
almacenadas en la cola de instrucciones, para despu*s ser trans"eridas a la unidad de e$ecucin.
Knidad aritm*ticoLlica
Conocida tam%i*n como A3K, este componente del microprocesador es el que realmente reali!a las
operaciones aritm*ticas (suma, resta, multiplicacin y divisin) y licas (and, or, 9or, etc.) que se o%tienen
como instrucciones de los proramas.
Buses internos (datos y direcciones)
3os %uses internos son un con$unto de l-neas paralelas (conductores) que interconectan las di"erentes partes
del microprocesador.
#9isten dos tipos principales) el %us de datos y el %us de direcciones. #l %us de datos es el encarado de
transportar los datos entre las distintas partes del microprocesadorM por otro lado, el %us de direcciones se
encara de transportar las direcciones para que los datos puedan ser introducidos o e9tra-dos de la memoria o
dispositivos de entrada y salida.
Cola de instrucciones
3a cola de instrucciones es una pila de tipo ;I;> (primero en entrar, primero en salir) donde las instrucciones
son almacenadas antes de que la unidad de e$ecucin las e$ecute.
Geistros de propsito eneral
#l microprocesador 8+86 cuenta con cuatro reistros de propsito eneral, los cuales pueden ser usados
li%remente por los proramadores. #stos reistros reci%en los nom%res siuientes)
AB (Acumulador) #ste reistro es el encarado de almacenar el resultado de alunas operaciones aritm*ticas y
licas.
BB (Base) #ste reistro es utili!ado para calcular direcciones relativas de datos en la memoria.
CB (Contador) <u "uncin principal es la de almacenar el n/mero de veces que un ciclo de instrucciones de%e
repetirse.
&B (&atos) Por lo eneral se utili!a para acceder a las varia%les almacenadas en la memoria.
Geistros apuntadores
#l 8+86 tam%i*n cuenta con dos reistros apuntadores <P y BP. #stos reistros reci%en su nom%re por que su
"uncin principal es la de apuntar a aluna direccin de memoria especi"ica.
<P (Apuntador de pila) <e encara de controlar el acceso de los datos a la pila de los proramas. Dodos los
proramas en lenua$e ensam%lador utili!an una pila para almacenar datos en "orma temporal.
BP (Apuntador Base) <u "uncin es la de proporcionar direcciones para la trans"erencia e intercam%io de datos.
Geistros -ndices
#9isten dos reistros llamados <I y &I que estn estrechamente liados con operaciones de cadenas de datos.
<I (Nndice ;uente) Proporciona la direccin inicial para que una cadena sea manipulada.
&I (Nndice &estino) Proporciona la direccin de destino donde por lo eneral una cadena ser almacenada
despu*s de aluna operacin de trans"erencia.
Geistros de semento
#l 8+86 cuenta con cuatro reistros especiales llamados reistros de semento.
C< (<emento de cdio) Contiene la direccin %ase del luar donde inicia el prorama almacenado en
memoria.
&< (<emento de datos) Contiene la direccin %ase del luar del rea de memoria donde "ueron almacenadas
las varia%les del prorama.
#< (<emento e9tra) #ste reistro por lo eneral contiene la misma direccin que el reistro &<.
<< (<emento de Pila) Contiene la direccin %ase del luar donde inicia el rea de memoria reservada para la
pila.
Geistro apuntador de instrucciones
IP (Apuntador de instrucciones) #ste reistro contiene la direccin de despla!amiento del luar de memoria
donde est la siuiente instruccin que ser e$ecutada por el microprocesador.
Geistro de estado
Conocido tam%i*n como reistro de %anderas (;las), tiene como "uncin principal almacenar el estado
individual de las
di"erentes condiciones que son mane$adas por el microprocesador. #stas condiciones por lo eneral cam%ian de
estado despu*s de cualquier operacin aritm*tica o lica)
C; (Acarreo) #sta %andera indica el acarreo o pr*stamo despu*s de una suma o resta.
>; (<o%re"lu$o) #sta %andera indica cuando el resultado de una suma o resta de n/meros con sino so%repasa
la capacidad de almacenamiento de los reistros.
<; (<ino) #sta %andera indica si el resultado de una operacin es positivo o neativo. <;E+ es positivo, <;E1
es neativo.
&; (&ireccin) Indica el sentido en el que los datos sern trans"eridos en operaciones de manipulacin de
cadenas. &;E1 es de derecha a i!quierda y &;E+ es de i!quierda a derecha.
O; (Cero) Indica si el resultado de una operacin aritm*tica o lica "ue cero o di"erente de cero. O;E+ es
di"erente y O;E1 es cero.
I; (interrupcin) Activa y desactiva la terminal ICDG del microprocesador.
P; (paridad) Indica la paridad de un n/mero. <i P;E+ la paridad es impar y si P;E1 la paridad es par.
A; (Acarreo au9iliar) Indica si despu*s de una operacin de suma o resta ha ocurrido un acarreo de los %its : al
5.
D; (Drampa) #sta %andera controla la e$ecucin paso por paso de un prorama con "ines de depuracin.
;uncionamiento interno (e$ecucin de un prorama)
Para que un microprocesador e$ecute un prorama es necesario que *ste haya sido ensam%lado, enla!ado y
carado en memoria.
Kna ve! que el prorama se encuentra en la memoria, el microprocesador e$ecuta los siuientes pasos)
1.L #9trae de la memoria la instruccin que va a e$ecutar y la coloca en el reistro interno de instrucciones.
=.L Cam%ia el reistro apuntador de instrucciones (IP) de modo que se2ale a la siuiente instruccin del
prorama.
:.L &etermina el tipo de instruccin que aca%a de e9traer.
5.L 0eri"ica si la instruccin requiere datos de la memoria y, si es as-, determina donde estn situados.
7.L #9trae los datos, si los hay, y los cara en los reistros internos del CPK.
6.L #$ecuta la instruccin.
(.L Almacena los resultados en el luar apropiado.
8.L Geresa al paso 1 para e$ecutar la instruccin siuiente.
#ste procedimiento lo lleva a ca%o el microprocesador millones de veces por seundo.
4ane$o de memoria
<ementacin
#l microprocesador 8+86, como ya se mencion, cuenta e9ternamente con =+ l-neas de direcciones, con lo cual
puede direccionar hasta 1 4B (+++++hLL;;;;;h) de localidades de memoria. #n los d-as en los que este
microprocesador "ue dise2ado, alcan!ar 14B de direcciones de memoria era alo e9traordinario, slo que
e9ist-a un pro%lema) internamente todos los reistros del microprocesador tienen una lonitud de 16 %its, con lo
cual slo se pueden direccionar 65 AB de localidades de memoria. Gesulta o%vio que con este dise2o se
desperdicia una ran cantidad de espacio de almacenamientoM la solucin a este pro%lema "ue la sementacin.
3a sementacin consiste en dividir la memoria de la computadora en sementos. Kn semento es un rupo de
localidades con una lonitud m-nima de 16 %ytes y m9ima de 65AB.
3a mayor-a de los proramas dise2ados en lenua$e ensam%lador y en cualquier otro lenua$e de"inen cuatro
sementos. #l semento de cdio, el semento de datos, el semento e9tra y el semento de pila.
A cada uno de estos sementos se le asina una direccin inicial y *sta es almacenada en los reistros de
semento correspondiente, C< para el cdio, &< para los datos, #< para el semento e9tra y << para la pila.
&ireccin "-sica
Para que el microprocesador pueda acceder a cualquier localidad de memoria dentro del rano de 14B, de%e
colocar la direccin de dicha localidad en el "ormato de =+ %its.
Para lorar esto, el microprocesador reali!a una operacin conocida como clculo de direccin real o "-sica.
#sta operacin toma el contenido de dos reistros de 16 %its y o%tiene una direccin de =+ %its.
3a "ormula que utili!a el microprocesador es la siuiente)
&ir. ;-sica E &ir. <emento P 1+h Q &ir. &espla!amiento
Por e$emplo) si el microprocesador quiere acceder a la varia%le B almacenada en memoria, necesita conocer su
direccin despla!amiento. 3a direccin semento para las varia%les es proporcionada por el reistro &<. Para
este caso, suponamos que B tiene el despla!amiento +1++h dentro del semento de datos y que &< tiene la
direccin semento 1+++h, la direccin "-sica de la varia%le B dentro del espacio de 14% ser)
&ir. ;-sica E 1+++h P 1+h Q+1++h
&ir. ;-sica E 1++++h Q +1++h
&ir. ;-sica E 1+1++h (direccin en "ormato de =+ %its).
&ireccin e"ectiva (despla!amiento)
3a direccin e"ectiva (despla!amiento) se re"iere a la direccin de una localidad de memoria con respecto a la
direccin inicial de un semento. 3as direcciones e"ectivas slo pueden tomar valores entre ++++h y ;;;;h,
esto es porque los sementos estn limitados a un espacio de 65 A% de memoria.
#n el e$emplo anterior, la direccin real de la varia%le B "ue de 1+1++h, y su direccin e"ectiva o de
despla!amiento "ue de 1++h con respecto al semento de datos que comien!a en la direccin 1++++h.
&ireccionamiento de los datos
#n la mayor-a de las instrucciones en lenua$e ensam%lador, se hace re"erencia a datos que se encuentran
almacenados en di"erentes medios, por e$emplo) reistros, localidades de memoria, varia%les, etc.
Para que el microprocesador e$ecute correctamente las instrucciones y entreue los resultados esperados, es
necesario que se indique la "uente o el orien de los datos con los que va a tra%a$ar, a esto se le conoce como
direccionamiento de datos.
#n los microprocesadores 8+986 e9isten cuatro "ormas de indicar el orien de los datos y se llaman modos de
direccionamiento.
Para e9plicar estos cuatro modos, tomaremos como e$emplo la instruccin ms utili!ada en los proramas en
ensam%lador, la instruccin 4>0.
3a instruccin 4>0 permite trans"erir (copiar) in"ormacin entre dos operandosM estos operandos pueden ser
reistros, varia%les o datos directos colocados por el proramador. #l "ormato de la instruccin 4>0 es el
siuiente)
4ov >per1,>per=
#sta instruccin copia el contenido de >per= en >per1.
&ireccionamiento directo
#ste modo se conoce como directo, de%ido a que en el seundo operando se indica la direccin de
despla!amiento donde se encuentran los datos de orien.
#$emplo)
4ov AB,R1+++hS MCopia en AB lo que se encuentre almacenado en
M &<)1+++h
&ireccionamiento inmediato
#n este modo, los datos son proporcionados directamente como parte de la instruccin.
#$emplo)
4ov AB,:5h MCopia en AB el n/mero :5h he9adecimal
4ov CB,1+ MCopia en CB el n/mero 1+ en decimal
&ireccionamiento por reistro
#n este modo de direccionamiento, el seundo operando es un reistro, el cual contiene los datos con los que
el microprocesador e$ecutar la instruccin.
#$emplo)
4ov AB,BB MCopia en AB el contenido del reistro BB
&ireccionamiento indirecto por reistro
;inalmente, en el modo indirecto por reistro, el seundo operando es un reistro, el cual contiene la direccin
despla!amiento correspondiente a los datos para la instruccin.
#$emplo)
4ov AB,RBBS M Copia en AB el dato que se encuentre en la localidad de
Mmemoria &<)RBBS
3os par*ntesis cuadrados sirven para indicar al ensam%lador que el n/mero no se re"iere a un dato, si no que
se re"iere a la localidad de memoria.
#n los siuientes cap-tulos se muestran varios proramas, en los cuales podr identi"icar los di"erentes modos
de direccionamiento de datos.
=. Proramacin Bsica
Para comen!ar con la proramacin en lenua$e ensam%lador, es necesario contar con un con$unto de
herramientas de proramacin. #ste con$unto de herramientas consta de un editor de te9to capa! de producir
archivos en cdio A<CII, un ensam%lador y un enla!ador.
Para propsitos de este tra%a$o, se utili!aran los siuientes proramas)
#l ensam%lador PA<<:=
#l editor de te9to #&ID proporcionado con todas las versiones de 4<L&>< y Jindo?s.
PA<<:= es un ensam%lador y enla!ador capa! de producir cdio e$ecuta%le de 16 y := %its.
Am%os proramas se encuentran en el C&LG>4 que se incluye como parte de este documento.
3a ra!n por la cual se seleccionaron estos proramas, es que pertenecen al so"t?are %a$o licencia @CK, lo
cual permite que sean utili!ados por instituciones educativas sin "ines de lucro. #sta caracter-stica permite que
dichos proramas sean utili!ados sin caer en la prctica de la pirater-a in"ormtica por no comprar licencias.
;ormatos de instrucciones
#n el lenua$e ensam%lador e9isten tres tipos de instrucciones) instrucciones con dos operandos, instrucciones
con un operando e instrucciones con operandos impl-citos.
#l campo nemnico es ocupado por cualquiera de las instrucciones que "orman parte del con$unto de la "amilia
986.
#$emplo) 4ov (Drans"erir)
#n los dos campos siuientes Ge sini"ica que el operando puede ser un reistro, 4em indica que puede ser
una direccin de memoria y dato indica que el operando puede ser un dato colocado directamente por el
proramador. 3os campos dos y tres se encuentran entre par*ntesis cuadrados para indicar que son opcionales
en alunas instrucciones.
3os siuientes son alunos e$emplos de instrucciones de las tres "ormas)
Instruccin con dos operandos)
4ov AB,BB
#n este caso 4ov es el nemnico, AB es el operando 1 y BB es el operando =.
Instruccin con un operando)
ICC BB
#n este caso ICC es el nemnico y BB es el /nico operando.
;inalmente las instrucciones con operandos impl-citos o sin operandos)
PK<1;
&onde PK<1; es el nemnico y /nico elemento de la instruccin.
;ormato de un prorama
#n esta seccin aprenderemos como se constituye el cdio "uente de un prorama en lenua$e ensam%lador.
#l siuiente listado se utili!ar para mostrar las di"erentes partes.
.C>44#CD
PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP
PGI4#G>.A<4 #$emplo de un prorama en lenua$e ensam%lador.
Tuan Carlos @u!mn C. #nsam%lado con Pass:= 0ersin =.7.
A%ril, =+++.
EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP
.4>&#3 DICHM 4odelo de memoria para el prorama
.&ADAM &eclaracin de varia%les
4ensa$e d% U4i primer proramaU,1+,1:,UVU
.C>&#M Cuerpo del prorama
ICICI>)M Punto de entrada al prorama
mov d9,>;;<#D 4ensa$e M &ireccin de la cadena de te9to
mov ah,' M ;uncin para imprimir cadenas
int =1h M 3lamada al sistema operativo
mov ah,5ch M ;uncin para terminar un prorama
int =1h M 3lamada al sistema operativo
#C& ICICI> M ;in del %loque principal del prorama
#C&
Kn prorama en lenua$e ensam%lador se compone de las siuientes partes)
)rea de comentarios
Definicin del modelo de memoria
)rea de datos
"uerpo del programa
#l rea de comentarios sirve para incluir comentarios acerca del prorama que se est ela%orando, comien!a
con la directiva .C>44#CD y el comentario es colocado entre dos caracteres WPX.
3a de"inicin del modelo de memoria es la parte donde se indica que tipo de cdio se va enerar (16 o := %its).
#n este tra%a$o slo se escri%irn proramas e$ecuta%les .C>4, por lo que siempre se usa la directiva .4>&#3
DICH.
#l rea de datos es el luar donde de%en ser declaradas las constantes y varia%les del prorama. 3as varia%les
son declaradas despu*s de la directiva .&ADA y las constantes despu*s de .C>C<D.
#n el cuerpo del prorama es donde se colocan las instrucciones en lenua$e ensam%lador que se encararn
de reali!ar las tareas deseadas. #l cuerpo del prorama comien!a con la directiva .C>&# y termina con la
directiva #C&. #sta parte corresponde al Bein y #nd de un prorama en lenua$e Pascal.
Adicionalmente se de%e indicar un punto de entrada al prorama. #l punto de entrada se indica por medio de
una etiqueta antes de la primer instruccin real del prorama. #n el e$emplo anterior el punto de entrada es
ICICI>) y el punto "inal de las instrucciones se indica por medio de la instruccin #C& ICICI>.
Cuando se requiere comentar las instrucciones de un prorama, se de%e colocar un punto y coma (M) y as- el
ensam%lador interpreta todo lo que siue como un comentario de una sola l-nea. <i requiere comentarios de
ms de una l-nea puede usar la directiva .C>44#CD.
Proceso de ensam%le y liado de un prorama
#ste proceso es muy sencillo y se descri%e a continuacin)
<i est tra%a$ando en 4<L&>< sia estos pasos)
1.L #scri%a el prorama, tal y como aparece en el listado anterior, usando su editor de te9to pre"erido.
=.L @urdelo con al/n nom%re y la e9tensin .A<4.
:.L #n el s-m%olo del 4<L&>< escri%a lo siuiente
C)YPA<<:=YBICYZPA<<:= Com%re.A<4 [t \#nterZ
5.L #$ecute el prorama .C>4 que se enera.
Para pro%ar el prorama a%ra una ventana de 4<L&>< y seleccione el prorama haciendo do%le clic so%re el
icono.
&irectivas de ensam%le (<eudo instrucciones)
Pass:= cuenta con alunas pala%ras reservadas que cumplen tareas especiales para "acilitar la proramacin
en ensam%lador, estas pala%ras son llamadas seudo instrucciones o directivas de ensam%le.
3a siuiente es una lista de las directivas de ensam%le ms utili!adas en Pass:=)
&B Geserva un %yte en memoria
&J Geserva una pala%ra (Jord) en memoria o = %ytes
&& Geserva una pala%ra do%le (&ou%le Jord)
.#IK <e utili!a para reempla!ar s-m%olos por valores
PG>CL#C&P <e utili!an para declarar procedimientos en los proramas
.4ACG>L#C&4 <e utili!an para declarar macros
&KP <irve para iniciali!ar cadenas de caracteres o arrelos num*ricos
.ICC3K&# <e utili!a para o%tener datos o su%rutinas de otros proramas
.#BD#GC &eclara un s-m%olo como e9terno, tra%a$a en con$unto con .ICC3K&# .PKB3IC &eclara un s-m%olo
como p/%lico
3os proramas incluidos como e$emplos muestran la "orma de utili!ar estas directivas.
Instrucciones de trans"erencia de datos
3os microprocesadores 8+986 cuentan con alunas instrucciones %sicas de trans"erencia de in"ormacin de
acuerdo con los modos de direccionamiento e9plicados en el cap-tulo anterior. 3as instrucciones ms
representativas del rupo de trans"erencia son)
4>0.L Drans"iere (copia) contenidos. <u "ormato es 4>0 >P1,>P=. #sta instruccin copia el contenido de >P=
en >P1. #$emplo)
4ov AB,+ M ABE+
3#A.L Cara un reistro con la direccin de despla!amiento de aluna varia%le en memoria. <u "ormato es 3#A
G#@,0aria%le. #$emplo)
.&ata
4ensa$e d% W1olaX,XVX
.Code
LLLLLL
LLLLLL
3ea &B,4ensa$e M&<)&BLZ4ensa$e
3&<.L Iniciali!a el reistro &<
3#<.L Iniciali!a el reistro #<
Cota)
3as instrucciones 3&< y 3#< modi"ican directamente el contenido de los reistros de semento &< y #<, por lo
cual se recomienda que slo sean utili!adas por proramadores avan!ados.
BC1@.L Intercam%ia contenidos. <u "ormato es BC1@ >P1,>P=. #l resultado es que el contenido de >P= se
pasa a >P1 y el de >P1 se pasa a >P=.
#$emplo)
BC1@ AB,BB M ABLZBB, BBLZAB
#l siuiente prorama muestra la "orma de usar las instrucciones de trans"erencia, adems de alunas
directivas de ensam%le.
Inicialmente, el prorama de"ine un arrelo de 1+ elementos llamado Array1, y lo iniciali!a con ceros. &espu*s,
utili!ando la instruccin 4ov, copia el n/mero 1+ en el reistro AB y el 7 en el reistro BB. Por medio de la
instruccin 3ea, el reistro &B es carado con la direccin de memoria donde comien!a Array1 y "inalmente
intercam%ia el contenido de los reistros AB y BB por medio de la instruccin BC1@.
&e%ido a que el ensam%lador es un lenua$e de %a$o nivel, es decir que el proramador se encuentra en
contacto directo con los componentes de la computadora, no e9isten instrucciones que nos permitan ver el
contenido de los reistros o los resultados de las operaciones en pantalla, es por esto que la mayor-a de los
proramas no muestran datos en pantalla.
.C>44#CD
P
Prorama) Drans1.A<4
Autor) Tuan Carlos @u!mn C.
&escripcin) #ste prorama ilustra es uso de las operaciones para trans"erencia de datos.
#l prorama realmente no hace nada que sea visi%le al usuario, es solo con "ines ilustrativos.
P
.4>&#3 tiny
.&ADA
Array1 d% 1+ dup (+) MArrelo de 1+ elementos inicialiL
M!ados en cero.
.C>&#
inicio) MPunto de entrada al prorama
mov AB,1+ MCopiar el n/mero 1+ dentro de AB
mov BB,7 MCopiar le n/mero 7 dentro de BB
lea &B,Array1 M&B contiene la direccin e"ectiva de Array1R+S
9ch AB,BB MIntercam%iar los valores contenidos en AB y BB
mov a9,5C++h MDerminar prorama y salir al &><
int =1h
#C& inicio
#C&
Instrucciones aritm*ticas
#9isten 8 instrucciones aritm*ticas %sicas) A&& (<uma), <KB (Gesta), 4K3 (4ultiplicacin sin sino), &I0
(&ivisin sin sino), I4K3 (4ultiplicacin con sino), I&I0 (&ivisin con sino), ICC (Incremento unitario) y &#C
(&ecremento unitario).
3as instrucciones A&& y <KB permiten reali!ar sumas y restas sencillas y tienen el siuiente "ormato)
A&& &estino, ;uente
<KB &estino, ;uente
#$emplos)
A&& AB,BB MABEABQBB
A&& AB,1+ MABEABQ1+
<KB AB,BB MABEABLBB
<KB AB,1+ MABEABL1+
#n las operaciones de suma y resta el resultado siempre es almacenado en el operando de destino, el cual
puede ser un reistro o una varia%le.
3as instrucciones ICC y &#C permiten incrementar los contenidos de los reistros y de las varia%les
almacenadas en memoria.
#$emplos)
ICC AB MABEABQ1
ICC 0AG1 M0AG1E0AG1Q1
&#C AB MABEABL1
&#C 0AG1 M0AG1E0AG1L1
#l siuiente prorama muestra la "orma de utili!ar estas instrucciones %sicas)
.C>44#CD
P
Prorama) Addsu%.A<4
Autor) Tuan Carlos @u!mn C.
&escripcin) #ste prorama ilustra el uso de las instrucciones A&&, <KB, ICC y &#C.
P
.4>&#3 DICH
.&ADA
0ar1 &J 1+ M&eclaracin de una varia%le de tipo entero
Miniciali!ada con 1+.
.C>&#
Inicio) MPunto de entrada al prorama
4ov AB,7 MABE7
4ov BB,1+ MBBE1+
Add AB,BB MABEABQBB
4ov CB,8 MCBE8
Add CB,0ar1 MCBECBQ0ar1
Inc AB MABEABQ1
&ec BB MBBEBBL1
Inc 0ar1 M0ar1E0ar1Q1
&ec 0ar1 M0ar1E0ar1L1
4ov AB,5C++h MDerminar prorama y salir al &><
Int =1h M
#C& Inicio
#C&
4ultiplicacin
Por otro lado, las operaciones de multiplicacin y divisin son un poco ms comple$as de utili!ar, esto se de%e a
que de%emos tomar en cuenta el tama2o de los operandos para no so%repasar la capacidad de
almacenamiento de los reistros del microprocesador.
#9isten dos instrucciones para la multiplicacin, estas son) 4K3 e I4K3. 4K3 permite reali!ar operaciones de
multiplicacin entre operandos sin sino e I4K3 permite reali!ar operaciones entre operandos con sino.
3a multiplicacin se puede e"ectuar entre %ytes (8 %its), pala%ras (16 %its) o do%les pala%ras (:= %its).
<olamente los microprocesadores :86 y posteriores pueden reali!ar multiplicaciones entre operandos de :=
%its.
#l producto de una multiplicacin siempre tiene el do%le de ancho. <i se multiplican dos n/meros de 8 %its, el
resultado ser de 16 %itsM si se multiplican dos n/meros de 16 %its, el producto ser de := %its y, "inalmente, si
se multiplican cantidades de := %its, el resultado ser un n/mero de 65 %its.
#n la multiplicacin de 8 %its, con o sin sino, el multiplicando est siempre en el reistro A3. #l multiplicador
puede ser cualquier reistro de 8 %its o cualquier varia%le. #l resultado de la multiplicacin se almacena en el
reistro AB, que es de do%le ancho que los operandos involucrados.
#$emplos vlidos de operaciones de multiplicacin son los siuientes)
4>0 B3,7 MCarar datos
4>0 A3,1+ M
4K3 B3 M ABEA3PB3
4>0 A3,1+
4K3 n/mero1 M ABEA3Pn/mero1
M donde n/mero1 es una varia%le de tipo %yte.
#n la multiplicacin de 16 %its, el multiplicando de%e ser colocado en el reistro AB y el resultado siempre
aparece en el par de reistros &B)AB. #l reistro &B contiene los 16 %its ms sini"icativos de producto,
mientras que el reistro AB contiene los 16 %its menos sini"icativos del resultado.
#$emplos)
4>0 AB,5++ MCarar datos
4>0 CB,1++ M
4K3 CB M &B)ABEABPCB
4>0 AB,5++ M
4K3 numero= M &B)ABEABPnumero=
#l siuiente prorama muestra la "orma de utili!ar alunas de estas operaciones de multiplicacin en sus
di"erentes "ormatos. &e%ido a que el ensam%lador no cuenta con "unciones para imprimir in"ormacin num*rica
en la pantalla, no es posi%le mostrar los resultadosM considere este e$emplo /nicamente con "ines ilustrativos.
.C>44#CD
P
Prorama) 4ul.A<4
Autor) Tuan Carlos @u!mn C.
&escripcin) #ste prorama ilustra el uso de las instrucciones 4K3 e I4K3.
P
.4>&#3 DICH
.&ADA
CK41 d? :
CK4= d% L7
.C>&#
ICICI>)
M4K3DIP3ICACI]C &# 8 BID< C>C G#@I<DG><
4>0 B1,5 MB1E5
4K3 B1 MABEA3PB1
M4K3DIP3ICACI]C &# 16 BID<
4>0 AB,L: MABEL:
4K3 CK41 M&B)ABEABPCK4=
M4K3DIP3ICACI]C &# 8 BID< C>C 0AGIAB3#<
4>0 A3,: MA3E:
I4K3 CK4= MABEA3PCK4=
4>0 AB,5c++h
ICD =1h
#C& ICICI>
#C&
&ivisin
3as instrucciones para divisin permiten reali!ar divisiones de 8, 16 o := %its (esta /ltima slo est disponi%le en
los microprocesadores :86 y posteriores). 3os operandos pueden ser n/meros con sino (I&I0) o n/meros sin
sino (&I0). #l dividendo siempre tiene el do%le de ancho que el operando divisor. #sto sini"ica que en una
divisin de 8 %its se divide un n/mero de 16 %its entre uno de 8M en una de 16 %its se divide un n/mero de :=
%its entre uno de 16, etc.
#n la divisin de 8 %its, el dividendo es almacenado en el reistro AB y el divisor puede ser cualquier reistro de
8 %its o cualquier varia%le declarada de tipo %yte. &espu*s de la divisin, el cociente es carado en el reistro
A3 y el residuo en el reistro A1.
#$emplo de divisin sin sino)
4>0 AB,1+
4>0 B3,7
&I0 B3
#$emplo de divisin con sino)
4>0 A3,L1+
4>0 B3,=
CBJ
I&I0 B3
#n este /ltimo e$emplo, el dividendo es carado en el reistro A3, pero de%ido a las relas del microprocesador
el dividendo de%e ser de 16 %itsM para lorar esto, se utili!a una instruccin especial. 3a instruccin CBJ
(convertir %yte a pala%ra) permite convertir un n/mero de 8 %its con sino en A3 en un n/mero de 16 %its con
sino en AB.
#n la divisin de 16 %its se siuen las mismas relas que en la divisin de 8 %its, slo que en *sta, el dividendo
se encuentra en los reistro &B)AB. &espu*s de la divisin el cociente es almacenado en el reistro AB y el
residuo en el reistro &B. #n el caso de la divisin con sino, e9iste una instruccin que permite convertir un
n/mero con sino de 16 %its en AB en un n/mero con sino de := %its en &B)AB.
#l siuiente prorama muestra la "orma de utili!ar alunas de estas operaciones de divisin en sus di"erentes
"ormatos. &e%ido a que el ensam%lador no cuenta con "unciones para imprimir in"ormacin num*rica en la
pantalla, no es posi%le mostrar los resultadosM considere este e$emplo /nicamente con "ines ilustrativos.
.C>44#CD
P
Prorama) &iv.A<4
Autor) Tuan Carlos @u!mn C.
&escripcin) #ste prorama ilustra el uso de las instrucciones &I0 e I&I0.
P
.4>&#3 DICH
.&ADA
CK41 d% :
CK4= d% L7
.C>&#
ICICI>) MICICI> &#3 PG>@GA4A
4>0 AB,1++ MABE1++
4>0 B1,1+ MB1E1+
&I0 B1 M&I0I<I>C &# 8 BID< <IC <I@C>
4>0 AB,1++ MABE1++
&I0 CK41 M&I0I<I>C &# 8 BID< <IC <I@C> C>C 0AGIAB3#<
4>0 A3,L1+ MABEL1+
CBJ M#BD#C<I]C &# <I@C> A 16 BID<
I&I0 num= M&I0I<I>C &# 8 BID< C>C <I@C>
4>0 AB,5c++h M;IC &#3 PG>@GA4A
ICD =1h M
#C& ICICI>
#C&
Instrucciones para la manipulacin de %anderas
#l reistro de %anderas tiene di"erentes "unciones en cada uno de sus %its, alunos de estos %its (%anderas)
pueden ser controlados por instrucciones directas de %a$o nivelM sin em%aro, se de%e tener en cuenta que
estas %anderas estn -ntimamente liadas con "unciones internas del microprocesador, por e$emplo la l-nea
ICDG (interrupcin por hard?are), acarreos, etc., y que al manipularlas incorrectamente podemos llear al
e9tremo de %loquear la computadora. #s por esto que se recomienda que slo proramadores e9perimentados
modi"iquen dichas %anderas.
#n esta seccin se e9plicarn alunas de las instrucciones ms comunes y sus aplicaciones, pero no se
desarrollarn proramas por ra!ones de seuridad.
Control de interrupcin
3a terminal ICDG del microprocesador puede ser activada o desactivada directamente por los proramas por
medio de las instrucciones <DI y C3I. <DI cara un 1 en I;, con lo cual ICDG queda ha%ilitadaM por otro lado, C3I
cara un cero en I;, con lo cual las interrupciones e9ternas o por hard?are quedan desha%ilitadas.
Control de la %andera de acarreo
3a %andera de acarreo, C;, es la encarada de indicar cuando ha ocurrido un acarreo o pr*stamo en
operaciones de suma o resta, tam%i*n indica errores en la e$ecucin de procedimientos. #9isten tres
instrucciones %sicas para su manipulacin) <DC (activar acarreo), C3C (desactivar acarreo) y C4C
(Complementar acarreo).
Control de la %andera de direccin
3a %andera de direccin, &;, es utili!ada para esta%lecer el sentido en el que las cadenas de datos sern
procesadas por los proramas. Kn cero en &; indica procesamiento de i!quierda a derecha, mientras que un
uno indica procesamiento de derecha a i!quierda.
Para controlar esta %andera, e9isten dos instrucciones, C3& (limpiar %andera) y <D& (esta%lecer %andera). <D&
coloca un uno y C3& coloca un cero.
#stas instrucciones sern aplicadas ms adelante en el cap-tulo :, en el cual se desarrollan varios proramas
para mostrar su uso.
Instrucciones de comparacin y prue%a
#9isten dos instrucciones especiales en el microprocesador 8+86) C4P y D#<D. C4P (Comparar) compara si
dos valores son iuales o di"erentes. <u "uncionamiento es similar al de la instruccin <KB (restar), slo que no
modi"ica el operando de destino, solamente modi"ica las %anderas de sino (<;), de cero (O;) y de acarreo
(C;).
Por e$emplo)
C4P AB,1=:7
#sta instruccin compara si el valor almacenado en el reistro AB es iual que el valor 1=:7 en decimal.
Por otro lado, la instruccin D#<D reali!a la operacin AC& de los operandos especi"icados sin que el resultado
se almacene en al/n reistro, modi"icando /nicamente ciertas %anderas. <u aplicacin ms com/n es la de
pro%ar si al/n %it es cero.
#$emplo)
Dest A3,1
#sta instruccin prue%a si el %it menos sini"icativo de A3 es 1 y
Dest A3,1=8 prue%a si el %it ms sini"icativo de A3 es 1.
Por lo eneral estas instrucciones van seuidas de aluna de las instrucciones de salto, las cuales se estudian
en otra seccin.
Instrucciones de salto
#n los lenua$es de alto nivel como Pascal y C, los proramadores pueden controlar el "lu$o de los proramas
por medio de instrucciones condicionales compuestasM por e$emplo, en Pascal el siuiente con$unto de
instrucciones permite tomar una decisin so%re el "lu$o del prorama)
I; AE7 then
?rite(.#rror....)M
else
A)EAQ1M
#n contraste, el lenua$e ensam%lador no proporciona tales mecanismos. #ste tipo de decisiones se reali!an
por medio de una serie de instrucciones que van teniendo un sini"icado consecutivoM es decir, el e"ecto de la
instruccin siuiente depende del resultado anterior.
#l lenua$e ensam%lador proporciona un con$unto de instrucciones conocidas como instrucciones de salto.
#stas instrucciones son utili!adas en con$unto con instrucciones de comparacin y prue%a para determinar el
"lu$o del prorama.
#9isten dos tipos de instrucciones de salto) las instrucciones de salto condicional y las de salto incondicional.
3as instrucciones de salto condicional, revisan si ha ocurrido aluna situacin para poder trans"erir el control del
prorama a otra seccin, por e$emplo)
C4P AB,+
T# otro
...........
..........
otro)
..........
..........
#nd
#n este e$emplo, la instruccin T# (<alta si es iual) revisa si la prue%a impl-cita en la instruccin anterior result
positiva, es decir, si la comparacin de AB con + "ue cierta. #n caso de que AB sea iual a +, T# trans"iere el
control del prorama a las instrucciones que se encuentran despu*s de la etiqueta .otro.. #n caso contrario
e$ecuta las instrucciones siuientes a T#.
Por otro lado, las instrucciones de salto incondicional (slo e9iste una) permiten cam%iar el "lu$o del prorama
sin veri"icar si se cumpli aluna condicin.
#$emplo)
4ov AB,1+
Tmp otro
........
........
otro)
........
........
#n este e$emplo, inmediatamente despu*s de carar el reistro AB con el valor de 1+, se trans"iere el control del
prorama a la instruccin que siue despu*s de la etiqueta .otro..
3a siuiente es una lista de las instrucciones de salto condicional y su descripcin)
TA o TCB#) <alta si est arri%a o salta si no est por de%a$o o si no es iual ($ump i" a%ove or $ump i" not %elo?
or equal). #l salto se e"ect/a si la %andera de C;E+ o si la %andera O;E+.
TA# o TCB) <alta si est arri%a o es iual o salta si no est por de%a$o ($ump i" a%ove or equal or $ump i" not
%elo?). #l salto se e"ect/a si C;E+.
TB o TCA#) <alta si est por de%a$o o salta si no est por arri%a o es iual ($ump i" %elo? or $ump i" not a%ove or
equal). #l salto se e"ect/a si C;E1.
TB# o TCA) <alta si est por de%a$o o es iual o salta si no est por arri%a ($ump i" %elo? or equal or $ump i" not
a%ove). #l salto se e"ect/a si C;E1 o O;E1.
T# o TO) <alta si es iual o salta si es cero ($ump i" equal or $ump i" !ero). #l salto se e"ect/a si O;E1.
TC# o TCO) <alta si no es iual o salta si no es cero ($ump i" not equal or $ump i" not !ero). #l salto se e"ect/a si
O;E+.
T@ o TC3#) <alta si es mayor o salta si no es menor o iual ($ump i" reater or $ump i" not less or equal). #l salto
se e"ect/a si O;E+ u >;E<;.
T@# o TC3) <alta si es mayor o iual o salta si no es menor ($ump i" reater or equal or $ump i" not less). #l salto
se e"ect/a si <;E>;.
T3 o TC@#) <alta si es menor o salta si no es mayor o iual ($ump i" less or $ump i" not reater or equal). #l salto
se e"ect/a si <;\Z>;
T3# o TC@) <alta si es menor o iual o salta si no es mayor ($ump i" less or equal or $ump i" not reater). #l salto
se e"ect/a si O;E1 o <;\Z>;.
TC) <alta si hay acarreo ($ump i" carry). #l salto se e"ect/a si C;E1.
TCC) <alta si no hay acarreo ($ump i" no carry). #l salto se e"ect/a si C;E+.
TC>) <alta si no hay des%ordamiento ($ump i" no over"lo?). #l salto se e"ect/a si >;E+.
TCP o TP> ) <alta si no hay paridad o salta si la paridad es non (Tump i" no parity or $ump i" parity odd). #l salto
se e"ect/a si P;E+.
TC<) <alta si no hay sino ($ump i" not sin). #l salto se e"ect/a si <;E+.
T>) <alta si hay so%re"lu$o ($ump i" over"lo?). #l salto se e"ect/a si >;E1.
TP o TP#) <alta si hay paridad o salta si la paridad es par ($ump i" parity or $ump i" parity even). #l salto se
e"ect/a si P;E1.
T<) <alta si hay sino ($ump i" sin). #l salto se e"ect/a si <;E1.
#l siuiente prorama muestra la "orma de utili!ar instrucciones de saltos condicionales)
.C>44#CD
P
Prorama) Tumps1.Asm
Autor) Tuan Carlos @u!mn C.
&escripcin) #ste prorama ilustra el uso de las instrucciones de salto condicional e incondicional
P
.4>&#3 DICH
.&ADA
cad1 d% U3as cantidades son iuales...U,1:,1+,UVU
cad= d% U3as cantidades no son iuales...U,1:,1+,UVU
.C>&#
ICICI>) MPunto de entrada al prorama
4ov a9,1+ MABE1+
4ov %9,1+ MBBE1+
Cmp a9,%9 M#s ABEBB^
Te iual M<_, entonces saltar a la etiqueta iual
3ea d9,cad= MCo, entonces imprimir Cad=
4ov ah,+'h M
Int =1h M
Tmp salir Msaltar a la etiqueta salir
iual)
3ea d9,cad1 Mimprimir el mensa$e en cad1
4ov ah,+'h M
Int =1h M
salir)
4ov a9,5c++h M<alir
Int =1h M
#C& ICICI>
#C&
#ste prorama ilustra de "orma %sica la utili!acin de las instrucciones de salto, tanto condicionales como
incondicionales.
Primeramente, el prorama iniciali!a los reistros AB y BB con el valor 1+ en decimalM despu*s utili!a la
instruccin C4P para comparar el contenido de am%os reistrosM la instruccin T# (<alta si es iual) veri"ica la
%andera de cero O;, si O;E1 sini"ica que los contenidos son iuales y por lo tanto e"ect/a el salto hacia la
etiqueta .Iual., en caso de que O;E+ el prorama contin/a su "lu$o normal hasta encontrar la instruccin T4PM
en este caso la instruccin T4P se utili!a para evitar llear a la etiqueta .Iual. en el caso de que los datos sean
di"erentes.
#l "ormato para utili!ar las instrucciones de salto es id*ntico al mostrado en este prorama, solamente hay que
identi"icar cual es la condicin que queremos pro%ar, para de esta "orma seleccionar adecuadamente la
instruccin de salto.
Instrucciones para ciclos
#l lenua$e ensam%lador cuenta con una instruccin muy poderosa que permite la proramacin de ciclos
"initos, la instruccin 3>>P.
#sta instruccin tra%a$a en "orma con$unta con el reistro contador CB. #l "ormato eneral de esta instruccin
es)
4ov CB,Co`0eces
#tiqueta)
LLLLLLL
3oop #tiqueta
3a instruccin 3>>P e$ecuta las instrucciones que se encuentran entre la #tiqueta) y 3oop #tiqueta el numero
de veces que indique el campo Co`0eces.
Por e$emplo, el siuiente rupo de instrucciones incrementa en 1 el reistro AB, esto lo repite 1+ veces.
4ov CB,1+ M1+ veces
>tro)
Inc AB M ABEABQ1
3oop >tro
3a instruccin 3oop decrementa el reistro CB en cada iteracin y se detiene cuando CB es iual a cero.
#l siuiente prorama da un e$emplo ms ilustrativo)
.C>44#CD
P
Prorama) 3oop.A<4
Autor) Tuan Carlos @u!mn C.
&escripcin) #ste prorama calcula la sucesin de ;i%onacci para los 1+ primeros t*rminos de la serie,
utili!ando para ello un
ciclo controlado por la instruccin 3oop.
3a sucesin est "ormada por n/meros, de modo tal que cada n/mero es la suma de los dos anterioresL
#$emplo)
1,1,=,:,7,8,1:,=1,:5,77....
P
.4>&#3 tiny
.C>&#
Inicio) MPunto de entrada al prorama
4ov AB,+ MABE+
4ov BB,1 MBBE1 #stos son los dos primeros elementos +Q1E1
4ov CB,1+ MGepetir 1+ veces
Gepite)
4ov &B,AB M&BEAB
Add &B,BB M&BEABQBB
4ov AB,BB MAvan!ar AB
4ov BB,&B MAvan!ar BB
3oop Gepite Msiuiente n/mero
4ov AB,5C++h MDerminar prorama y salir al &><
Int =1h M
#C& Inicio
#C&
Instrucciones licas
#l microprocesador 8+86 cuenta con un rupo de instrucciones licas que operan a nivel de %it, estas
instrucciones son) AC&, >G, B>G y C>D.
A continuacin se muestran las ta%las de verdad de estas instrucciones)
3as instrucciones que se enlistan antes requieren dos operandos, a e9cepcin de la operacin C>D que slo
requiere uno.
#n la "iura se puede o%servar que para la operacin AC&, si los dos operandos son 1, el resultado ser 1, en
cualquier otra situacin ser +.
3a operacin >G esta%lece el resultado a 1 si cualquiera de los dos operandos es 1, de lo contrario el resultado
ser +.
3a instruccin B>G coloca en + el resultado si los operandos son iuales, de lo contrario esta%lece 1.
;inalmente, la instruccin C>D cam%ia de estado todos los %its del operando, los unos por ceros y los ceros por
unos.
3a principal aplicacin de estas instrucciones es el enmascaramiento de in"ormacin. 3a operacin AC& nos
permite poner a cero cualquier %it de un datoM la operacin >G nos permite poner a uno cualquier %it de un dato
y la operacin B>G permite %orrar el contenido de al/n reistro o localidad de memoria, as- como para near
al/n %it.
#l siuiente prorama muestra la "orma de utili!ar estas instrucciones)
.C>44#CD
P
Prorama) And>r.A<4
Autor) Tuan Carlos @u!mn C.
&escripcin) #ste prorama ilustra el uso de las instrucciones
AC&, >G, B>G y C>D.
P
.4>&#3 DICH
.&ADA
4ascara1 d% 1111111+%
4ascara= d% +++++++1%
&ato1 d% 11111111%
&ato= d% ++++++++%
.CA&#
ICICI>)
4ov c9,++++h MCBE+M
4ov al,dato1 MalEdato1
And al,mascara1 MalEal and mascara1
4ov ah,dato= MahEdato=
>r ah,mascara= MahEah or mascara=
Bor %9,%9 M%9E+
Cot c9 Mc9Enot c9
4ov a9,5c++h
Int =1h
#C& ICICI>
#C&
#l prorama del listado 8 declara cuatro varia%les de tipo %yte) 4ascara1, 4ascara=, &ato1 y &ato=M despu*s
iniciali!a CBE++h, AlE;;h, AhE++hM al aplicar una operacin and de ;;h y ;#h, el resultado es ;#h, en otras
pala%ras, se apa el %it menos sini"icativo de alM la siuiente operacin es un >G entre ++ y +1, lo cual da
como resultado que se encienda el %it menos sini"icativo del Ah, el resultado es +1. 3a siuiente operacin es
B>G BB,BB, la cual al ser aplicada so%re el mismo operando da como resultado que dicho operando sea
%orrado. Por ultimo, la operacin C>D CB cam%ia todos los %its de + a 1 y viceversa, por lo cual CBE11h.
Instrucciones de rotacin y despla!amiento
#l microprocesador cuenta con un con$unto de instrucciones que permiten la manipulacin de las posiciones
individuales de los %its dentro de un reistro o localidad de memoria, estas instrucciones se encuentran
divididas en dos rupos) instrucciones de rotacin e instrucciones de despla!amiento (tam%i*n conocidas como
instrucciones para corrimientos).
3as instrucciones para rotacin son cuatro y nos permiten mover de "orma c-clica los %its que "orman parte de
un reistro o localidad de memoria, estas instrucciones son G>3, G>G, GC3 , GCG.
G>3 y G>G "uncionan de "orma muy seme$anteM al e$ecutar una instruccin G>3, el %it ms sini"icativo del dato
es despla!ado hacia la %andera de acarreo y tam%i*n hacia la posicin del %it memos sini"icativo, por lo cual
todos los %its restantes son rotados o movidos hacia la i!quierda. 3a instruccin G>G "unciona iual, slo que
*sta tra%a$a hacia la derecha.
3as instrucciones GC3 y GCG permiten la rotacin de los %its de una localidad de memoria o reistro,
considerando tam%i*n el contenido de la %andera de acarreo. #n el caso de GC3, el %it ms sini"icativo pasa
hacia la %andera de acarreo, el %it que se encontra%a en la %andera de acarreo pasa al %it menos sini"icativo y
"inalmente los %its restantes son rotados hacia la i!quierda. 3a instruccin GCG "unciona iual, pero aplica su
rotacin hacia la derecha.
Para ilustrar el uso de estas instrucciones, tomaremos como e$emplo la instruccin G>3 (Gotacin a la
i!quierda).
3as instrucciones de rotacin y despla!amiento tienen di"erentes "ormas de utili!arse dependiendo del modelo
del microprocesador, los siuientes e$emplos muestran estas "ormas)
#n el microprocesador 8+86 e9isten dos "ormas, con contador impl-cito y con contador e9pl-cito.
3a "orma con contador impl-cito se utili!a para reali!ar una sola rotacin a la ve! y tiene el siuiente "ormato)
G>3 AB,1 MGotar AB un %it
3a "orma con contador e9pl-cito se utili!a para reali!ar rotaciones n veces so%re un reistro o localidad de
memoria)
4>0 C3,: MC/mero de rotaciones
G>3 AB,C3 M Gotar AB : veces
#n el microprocesador 8+:86 y superiores e9iste una variante de contador impl-cito, la cual nos permite
esta%lecer el contador directamente como un operando, su "orma es la siuiente)
G>3 AB,: M Gotar AB : veces, slo en 8+:86 y posteriores
#n el caso de las instrucciones de despla!amiento, tam%i*n e9isten cuatro) <13, <1G, <A3, <AG.
<13 y <1G se utili!an para despla!ar los %its de un reistro o localidad de memoria, sin considerar el sino de
su contenido.
<A3 y <AG se utili!an para despla!ar los %its de un reistro o localidad de memoria, considerando su contenido
como una cantidad con sino.
3as instrucciones <13 y <1G "uncionan de "orma id*ntica, slo que en sentidos opuestos. 3a instruccin <13
inserta un + en la posicin del %it menos sini"icativo y despla!a todos los dems %its una posicin hacia la
i!quierda, colocando el %it ms sini"icativo en la %andera de acarreo. 3a instruccin <1G inserta un + en la
posicin ms sini"icativa, despla!a todos los %it una posicin hacia la derecha y "inalmente coloca el %it menos
sini"icativo en la %andera de acarreo.
Alunos e$emplos de su uso son los siuientes)
<13 AB,1 M &espla!a el contenido de AB una posicin a la i!quierda
4>0 CB,: M C/mero de veces
<1G AB,C3 M &espla!a AB : veces hacia la derecha
<13 BB,5 M &espla!a BB 5 veces hacia la i!quierda, slo en :86 y posteriores
3as dos instrucciones restantes <A3 y <AG son muy parecidas a las instrucciones <13 y <1G, slo que estas
dos instrucciones consideran el contenido de los reistros como cantidades con sino, por lo cual el %it en la
posicin ms sini"icativa del dato (%it de sino) se conserva sin cam%io.
#l siuiente e$emplo muestra el uso de las instrucciones de rotacin y despla!amiento, revise el cdio slo con
"ines ilustrativos.
C>44#CD
P
Prorama) Gota.A<4
Autor) Tuan Carlos @u!mn C.
&escripcin) #ste prorama ilustra el uso de las instrucciones de rotacin y despla!amiento.
P
.4>&#3 DICH
.&ADA
dato1 d? 1+ M varia%le de tipo entero
.C>&#
ICICI>) M Punto de entrada al prorama
mov a9,1 M ABE1
mov %9,1+ M BBE1+
shl a9,1 M a9Ea9P=
mov c9,: M contador iual a :
shl a9,cl M a9Ea9P8
shr %9,1 M %9E%9F=
mov c9,= M
shr %9,cl M %9E%9F5
shl dato1,1 M dato1Edato1P=
mov a9,1 M a9E1
rol a9,1 M rotar a9 1 ve!
mov %9,L1+ M %9EL1+
sal %9,1 M %9E%9P=
mov a9,5c++h M Derminar
int =1h M <alir al dos
#C& ICICI>
#C&
Instrucciones para la pila
3a pila es un rupo de localidades de memoria que se reservan con la "inalidad de proporcionar un espacio para
el almacenamiento temporal de in"ormacin.
3a pila de los proramas es del tipo 3I;> (3ast In ;irst >ut, Kltimo en entrar, Primero en salir).
Para controlar la pila el microprocesador cuenta con dos instrucciones %sicas) Push (4eter) y Pop (sacar).
#l "ormato de estas instrucciones es el siuiente)
Push operando
Pop operando
Cuando se e$ecuta la instruccin Push, el contenido del operando se almacena en la ultima posicin de la pila.
Por e$emplo, si AB se cara previamente con el valor 7, una instruccin Push AB almacenar-a el valor 7 en la
ultima posicin de la pila.
Por otro lado la instruccin Pop saca el /ltimo dato almacenado en la pila y lo coloca en el operando.
<iuiendo el e$emplo anterior, la instruccin Pop BB o%tendr-a el n/mero 7 y lo almacenar-a en el reistro BB.
#l siuiente e$emplo muestra como implementar la instruccin BC1@ por medio de las instrucciones Push y
Pop. Gecuerde que la instruccin BC1@ intercam%ia el contenido de sus dos operandos.
.C>44#CD
Prorama) PushPop.A<4
Autor) Tuan Carlos @u!mn C.
&escripcin) #ste prorama demuestra el uso de las instrucciones para el mane$o de la pila, implementando la
instruccin BC1@ con Push y Pop
P
.4>&#3 tiny
.C>&#
Inicio) MPunto de entrada al prorama
4ov AB,7 MABE7
4ov BB,1+ MBBE1+
Push AB MPilaE7
4ov AB,BB MABE1+
Pop BB MBBE7
4ov AB,5C++h MDerminar prorama y salir al &><
Int =1h M
#C& Inicio
#C&
:. 4anipulacin de cadenas (<trins)
&e"inicin de strin
#n el lenua$e ensam%lador el tipo de dato cadena (strin) no est de"inido, pero para "ines de proramacin,
una cadena es de"inida como un con$unto de localidades de memoria consecutivas que se reservan %a$o el
nom%re de una varia%le.
Almacenamiento en memoria
&e acuerdo con la de"inicin anterior, las siuientes l-neas en ensam%lador declaran cadenas)
.&ADA
Cadena`A<CII d% WCadenaX,1:,1+,XVX
Cadena`#nteros d? 7 &up (+)
3as dos l-neas anteriores estn declarando varia%les de tipo cadena. #n el primer caso, Cadena`A<CII reserva
un total de '
%ytes de memoria (1 %yte E 1 Carcter A<CII) incluyendo el carcter WVX que indica "in de cadena. #n el seundo
caso, Cadena`#nteros reserva espacio para almacenar : cantidades enteras o lo que es lo mismo 6 %ytes de
memoria (1 entero E = %ytes), todas iniciali!adas con cero.
3a di"erencia en los casos anteriores radica en el tama2o del dato que compone la cadena, 1 %yte para cadenas
de caracteres y = o ms %ytes para cadenas de datos num*ricos.
#l almacenamiento en memoria se ver-a de la siuiente "orma)
Instrucciones para el mane$o de strins
#l lenua$e ensam%lador cuenta con cinco instrucciones para el mane$o de cadenas)
4>0<) 4ueve un %yte o pala%ra desde una localidad de memoria a otra.
3>&< ) Cara desde la memoria un %yte en A3 o una pala%ra en AB.
<D>< ) Almacena el contenido del reistro A3 o AB en la memoria.
C4P< ) Compara localidades de memoria de un %yte o pala%ra.
<CA< ) Compara el contenido de A3 o AB con el contenido de aluna localidad de memoria.
3as instrucciones para cadenas tra%a$an en con$unto con la instruccin C3&, la cual permite esta%lecer que el
sentido en el que las cadenas sern procesadas ser de i!quierda a derecha.
>tra instruccin importante es el pre"i$o de repeticin G#P, el cual permite que una instruccin para mane$o de
cadenas pueda ser repetida un n/mero determinado de veces.
3os reistros -ndice $uean un papel importante en el procesamiento de cadenas de datos, el par de reistros
C<)<I indican la direccin de la cadena oriinal que ser procesada, y el par #<)&I contienen la direccin donde
las cadenas pueden ser almacenadas.
Para comprender realmente como "uncionan las instrucciones para cadenas anali!aremos varios proramas
que "ueron escritos para este "in. Gecuerde que las cadenas en ensam%lador no se re"ieren /nicamente a
cadenas de caracteres A<CII, sino a cualquier tipo de dato.
.C>44#CD
Prorama) Cad1.A<4
Autor) Tuan Carlos @u!mn C.
&escripcin) #ste prorama ilustra la "orma de utili!ar la instruccin 4>0< para copiar el contenido de una
cadena dentro de otra.
.4>&#3 tiny
.&ADA
cad1 d% U#sta es la cadena1U,UVU
cad= d% U#sta es la cadena=U,UVU
.C>&#
inicio) MPunto de entrada al prorama
cld MProcesamiento de cadenas de i!qLZder.
mov c9,18 Mlonitud de la cadena oriinal
lea di,cad= M#<)&I contienen la direccin de Cad=
lea si,cad1 M&<)<I contienen la direccin de Cad1
rep movs% M&<)<ILZ#<)&I, <IE<IQ1, &IE&IQ1
lea d9,cad1 MImprimir Cad1 en pantalla
mov ah,+'h M
int =1h M
lea d9,cad= MImprimir Cad= en pantalla
mov ah,+'h M
int =1h M
mov a9,5c++h MDerminal prorama y reresar al &><
int =1h M
#C& inicio
#C&
.C>44#CD
Prorama) Cad=.A<4
Autor) Tuan Carlos @u!mn C.
&escripcin) #ste prorama demuestra la di"erencia entre el uso de 4>0<B y 4>0<J.
#l prorama de%e copiar Cad: dentro de Cad1 usando 18 repeticiones con 4>0<B, despu*s reali!a lo mismo
con Cad5 y Cad= pero usando solo nueve repeticiones de la instruccin 4>0<J.
#l resultado es el mismo en am%os casos
.4>&#3 tiny
.&ADA
cad1 d% UCadena de prue%a1 U,UVU
cad= d% UCadena de prue%a= U,UVU
cad: d% 18 dup (U U)
cad5 d% 18 dup (U U)
.C>&#
inicio) MPunto de entrada al prorama
cld Mprocesamiento de i!qLZder.
mov c9,18 M3onitud de la cadena
lea si,cad: M&<)<ILZCad:
lea di,cad1 M#<)&ILZCad1
rep movs% MCad:LZCad1
mov c9,' M3onitud de la cadena por pares de %ytes
lea si,cad5 M&<)<ILZCad5
lea di,cad= M#<)&ILZCad=
rep movs? MCad5LZCad=
lea d9,cad1 M
mov ah,+'h MImprimir Cad1
int =1h M
lea d9,cad= M
mov ah,+'h MImprimir Cad=
int =1h M
mov a9,5c++h MDerminar prorama y reresar al &><
int =1h M
#C& inicio
#C&
.C>44#CD
Prorama) Cad:.A<4
Autor) Tuan Carlos @u!mn C.
&escripcin) #ste prorama muestra el uso de la instruccin 3>&<B.
#l prorama invierte el orden de los elementos de una cadena y los almacena en otra cadena que oriinalmente
esta iniciali!ada con espacios. Al "inal se imprimen las dos cadenas.
.4>&#3 tiny
.&ADA
cad1 d% UCadena de prue%aU,UVU
cad= d% 16 dup (U U),UVU
.C>&#
inicio) MPunto de entrada al prorama
cld MProcesamiento de i!qLZder.
mov c9,16 M3onitud de la cadena
lea si,cad1 M&<)<ILZCad1
lea di,cad=Q17 M#<)&I apuntan al "inal del rea reservada para
otro) Malmacenar la cadena invertida
lods% M>%tener el primer carcter de Cad1
mov RdiS,al Malmacenarlo en la posicin actual de &I
dec di M&isminuir &I
loop otro M>%tener siuiente carcter de Cad1
lea d9,cad1 M
mov ah,+'h MImprimir cadena oriinal
int =1h M
lea d9,cad= M
mov ah,+'h MImprimir cadena invertida
int =1h M
mov a9,5c++h MDerminar prorama y reresar al &><
int =1h M
#C& inicio
#C&
C>44#CD
Prorama) Cad5.A<4
Autor) Tuan Carlos @u!mn C.
&escripcin) #ste prorama utili!a la instruccin <D><B para rellenar un rea de memoria con el contenido del
reistro A3.
#n este caso, el rea de memoria reservado para la varia%le Cad1 es rellenada con el carcter
A<CII UPU.
.4>&#3 tiny
.&ADA
cad1 d% UCadena de prue%aU,1:,1+,UVU
C>&#
inicio)
lea d9,cad1 MImprimir Cad1 antes de que sea %orrada
mov ah,+'h M
int =1h M
cld MProcesamiento de i!qLZder
mov al,UPU MIniciali!ar A3 con UPU
mov c9,16 M3onitud de la cadena que se va a rellenar
lea di,cad1 M#<)&ILZCad1
rep stos% MGellenar 16 %ytes de memoria con UPU
lea d9,cad1 M
mov ah,+'h MImprimir Cad1 despu*s de ser %orrada
int =1h M
mov a9,5c++h MDerminar prorama y reresar al &><
int =1h M
#C& inicio
#C&
.C>44#CD
Prorama) Cad7.A<4
Autor) Tuan Carlos @u!mn C.
&escripcin) #ste prorama utili!a la instruccin C4P<B para comparar si dos cadenas son iuales.
#n este prorama se declaran : cadenas de prue%a.
#l reistro B1 sirve como %andera)
B1E+ Co hay cadenas iuales
B1E1 Cad1 es iual a Cad=
B1E= Cad1 es iual a Cad:
<e puede cam%iar el contenido de las cadenas de prue%a para compro%ar los tres posi%les resultados.
.4>&#3 tiny
.&ADA
cad1 d% UCA&#CA1U,1:,1+,UVU
cad= d% UCA&#CA1U,1:,1+,UVU
cad: d% UCadena=U,1:,1+,UVU
error1 d% UCo hay cadenas iuales...U,UVU
error= d% UCadena 1 E Cadena =U,UVU
error: d% UCadena 1 E Cadena :U,UVU
.C>&#
inicio)
9or %h,%h MB1E+
cld MComparacin de i!qLZder.
mov c9,( M3onitud de la cadena
lea di,cad= M#<)&ILZ Cad=
lea si,cad1 M&<)<ILZ Cad1
repe cmps% MComparar Cad1 y Cad=
$ne otra M<on iuales ^Co, Comparar Cad1 y Cad:
mov %h,1 M<i, entonces B1E1
otra)
mov c9,( M3onitud de la cadena
lea di,cad: M#<)&ILZCad:
lea si,cad1 M&<)<ILZCad1
repe cmps% MComparar Cad1 y Cad:
$ne salir M<on iuales ^Co, imprimir mensa$es.
mov %h,= M<i, entonces B1E=
salir)
cmp %h,+ M#s B1E+^
$e ninuna M<i, #ntonces no hay cadenas iuales
cmp %h,1 MCo. #s B1E1^
$e cad1`cad= M<i. #ntonces Cad1 es iual a Cad=
lea d9,error: M<i no es ninuna de las anteriores
mov ah,+'h Mentonces de%e ser que Cad1 es iual que Cad:
int =1h Mimprimir mensa$e
$mp salir=
cad1`cad=)
lea d9,error= M
mov ah,+'h MImprimir mensa$e
int =1h M
$mp salir= M
ninuna)
lea d9,error1 M
mov ah,+'h MImprimir mensa$e
int =1h M
salir=)
mov a9,5c++h MDerminar prorama y reresar al &><
int =1h M
#C& inicio
#C&
5. Proramacin de #F<
&e"inicin de interrupcin
Kna interrupcin es un estado en el cual el microprocesador detiene la e$ecucin de un prorama para atender
una peticin especial solicitada por el propio prorama o por un dispositivo "-sico conectado al microprocesador
e9ternamente.
3as interrupciones "ueron creadas para "acilitar al proramador el acceso a los di"erentes dispositivos de la
computadora (puertos de comunicaciones, terminales, impresoras, etc.).
#$ecucin de una interrupcin
Cuando durante la e$ecucin de un prorama se produce una interrupcin, el microprocesador reali!a los
siuientes pasos)
1.L &etiene la e$ecucin del prorama
=.L Almacena los reistros C<, IP y Banderas en la pila
:.L 4odi"ica el C< y el IP para que apunten a la direccin donde se encuentra la rutina de interrupcin.
5.L #$ecuta las instrucciones de la rutina de interrupcin.
7.L Gesta%lece usando la instruccin G#DI los valores oriinales de los reistros C<, IP y Banderas.
6.L Continua con la e$ecucin del prorama en el punto donde "ue interrumpido.
3as rutinas se almacenan en la memoria de la computadora cada ve! que *sta es iniciali!ada, a esto se le
conoce como vector de interrupciones.
Dipos de interrupciones
#l microprocesador puede atender dos tipos de interrupciones) interrupciones por so"t?are e interrupciones por
hard?are.
3as interrupciones por so"t?are son llamadas desde los proramas y son proporcionadas por el sistema
operativo (4<L&><). #9isten dos tipos de estas) las interrupciones del &>< y las interrupciones del BI><
(Basic Input >utput <ystem o <istema Bsico de #ntradaF<alida). #stas interrupciones son invocadas con la
instruccin ICD del ensam%lador.
Por otro lado, las interrupciones por 1ard?are son proporcionadas por el propio microprocesador y tam%i*n
e9isten dos tipos) interrupciones por hard?are internas y las interrupciones por hard?are e9ternas. 3as
interrupciones internas son invocadas por el microprocesador cuando se produce aluna operacin incorrecta,
como por e$emplo, un intento de dividir por cero o una trans"erencia de datos entre reistros de di"erentes
lonitudes.
3as interrupciones e9ternas son provocadas por los dispositivos peri"*ricos conectados al microprocesador.
Para lorar esto, a cada dispositivo peri"*rico se le asina una l-nea "-sica de interrupcin que lo comunica con
el microprocesador por medio de un circuito interado au9iliar, el cual se conoce como controlador prorama%le
de interrupciones (PIC).
3as computadoras %asadas en el microprocesador 8+86F8+88 cuentan solamente con un PIC, con lo cual
pueden proporcionar hasta 8 l-neas de interrupcin (IGI), las cuales son llamadas IGI+ a IGI(, por otro lado,
las computadoras %asadas en el microprocesador 8+=86 y posteriores cuentan con dos chips controladores,
con los cuales pueden proporcionar hasta un m9imo de 16 l-neas IGI, las cuales son llamadas IGI+ a IGI17.
3a siuiente es una lista de las interrupciones por so"t?are disponi%les por el sistema operativo.
Interrupciones del BI><
4ane$o de dispositivos peri"*ricos
*N+ #,- Manejo de la pantalla.
*N+ #/- Manejo de unidades de disco.
*N+ #'- Manejo de los puertos de comunicacionesR01/1!.
*N+ #2- Manejo de cinta magn3tica.
*N+ #$- Manejo del teclado.
*N+ #4- Manejo de la impresora.
4ane$o del estado del equipo
*N+ ##- 0er5icios de la lista de elementos de la computadora.
*N+ #1- 0er5icios para el c6lculo del tama7o de la memoria.
<ervicios de "echa y hora
*N+ #(- Manejo del reloj.
Impresin de pantalla
*N+ 2- *mpresin de la informacin contenida en la pantalla.
<ervicios especiales
*N+ #&- (cti5acin del lenguaje *nterprete 8asic de la R9M.
*N+ #:- (cti5acin de la rutina de arran;ue de la computadora.
Interrupciones del &><
*N+ 1,- +ermina la ejecucin de un programa.
*N+ 11- Direccin de terminacin. <uarda la direccin donde se transfiere el control cuando
termina la ejecucin del programa.
*N+ 1/- Direccin de la interrupcin ;ue se ejecuta cuando se presiona "trl=8rea>.
*N+ 1'- Manejo de errores cr?ticos.
*N+ 12- @ectura directa de sectores del disco.
*N+ 1$- Ascritura directa de sectores del disco.
*N+ 14- +erminar un programa y de5ol5er el control al D90 sin borrar el programa de la
memoria.
*N+ 1#- Asta interrupcin proporciona una gran cantidad de funcionesB las cuales deben ser
in5ocadas en conjunto con el registro (-.
+erminacin de un programa.
Antrada de car6cter con eco.
0alida a pantalla.
Antrada por el puerto serie.
0alida por el puerto serie.
0alida a la impresora.
AC0 directa por pantalla.
Antrada directa de car6cter sin eco.
Antrada de car6cter sin eco.
Visualizar cadenas de caracteres.
Antrada desde el teclado.
"omprobacin del estado de entrada.
8orrar registro de entrada.
*nicializar unidad de disco.
A continuacin se mostrarn alunos proramas que utili!an llamadas a di"erentes interrupciones por so"t?are
tanto del BI>< como del &><.
#l siuiente prorama utili!a la "uncin +'h de la interrupcin =1 del &>< para mostrar en la pantalla un
mensa$e.
.C>44#CD
P
Prorama) Int1.A<4
Autor) Tuan Carlos @u!mn C.
&escripcin) Imprime una cadena de caracteres en la pantalla por medio de la "uncin +'h de la interrupcin
=1h del &><.
P
.4>&#3 tiny
.&ADA
4ensa$e d% UInterrupciones =1h del &><U,1:,1+,UVU
.C>&#
Inicio)
3ea &B,4ensa$e
4ov Ah,+'h
Int =1h
4ov a9,5C++h
Int =1h
#C& Inicio
#C&
#l siuiente prorama e9hi%e dos cadenas de caracteres en la pantalla, pero a di"erencia del anterior *ste no
reresa al &>< inmediatamente, espera a que cualquier tecla sea presionada y entonces termina, para ello se
utili!a la "uncin 1+h de la interrupcin 16h del BI><.
.C>44#CD
P
Prorama) Int=.A<4
Autor) Tuan Carlos @u!mn C.
&escripcin) Imprime dos cadenas de caracteres en la pantalla por medio de la "uncin +'h de la interrupcin
=1h del &>< y despu*s espera a que una tecla sea presionada, esto por medio de la interrupcin 16h del BI><
con la "uncin 1+h.
P
.4>&#3 tiny
.&ADA
4ensa$e d% U4as interrupcionesU,1:,1+,UVU
4ensa$e= d% UPresione cualquier tecla...U,1:,1+,UVU
.C>&#
Inicio)
3ea &B,4ensa$e
4ov Ah,+'h
Int =1h
3ea &B,4ensa$e=
4ov Ah,+'h
Int =1h
4ov Ah,1+h
Int 16h
4ov a9,5C++h
Int =1h
#C& Inicio
#C&
Como /ltimo e$emplo de esta seccin, se mostrar un prorama que utili!a otra "uncin del BI><, pero esta ve!
para posicionar el cursor en di"erentes coordenadas de la pantalla, esto con el "in de tener me$or control so%re el
luar en el que los mensa$es son visuali!ados.
.C>44#CD
P
Prorama) Int:.A<4
Autor) Tuan Carlos @u!mn C.
&escripcin) Imprime dos cadenas de caracteres en la pantalla, controlando su posicin por medio de la "uncin
+=h de la Int 1+h del BI><.
P
.4>&#3 tiny
.&ADA
4ensa$e d% U4as interrupcionesU,1:,1+,UVU
4ensa$e= d% UPresione cualquier tecla...U,UVU
.C>&#
Inicio)
4ov Bh,+ MPaina de video +
4ov dl,:+ MBE:+
4ov dh,7 MHE7
4ov Ah,+=h MPosicionar cursor
Int 1+h M
3ea &B,4ensa$e M
4ov Ah,+'h MImprime 4ensa$e
Int =1h M
4ov Bh,+ MPaina de video
4ov dl,5+ MBE5+
4ov dh,=5 MHE=5
4ov Ah,+=h MColocar cursor
Int 1+h M
3ea &B,4ensa$e= M
4ov Ah,+'h MImprimir 4ensa$e=
Int =1h M
4ov Ah,1+h M#sperar tecla
Int 16h M
4ov a9,5C++h MDerminar prorama y salir al &><
Int =1h M
#C& Inicio
#C&
7. 4acros
&e"inicin
Kna de las principales desventa$as de la proramacin en lenua$e ensam%lador es la repeticin constante de
ciertos rupos de instrucciones. Por e$emplo el siuiente con$unto de instrucciones nos permite imprimir una
varia%le de tipo cadena en la pantalla)
3ea &B,Cadena M&ireccionar la cadena
4ov A1,+'h MKsar la "uncin +'h para imprimir cadenas
Int =1h Mllamada a la interrupcin =1h del &><
<i necesitamos que en nuestro prorama se muestren mensa$es constantemente, es o%vio que de%emos
duplicar este con$unto de instrucciones por cada mensa$e que se desea enviar a pantalla.
#l principal pro%lema que esto nos ocasiona es que el tama2o de nuestro prorama crece considera%lemente, y
mientras ms rande sea el prorama, ms di"-cil ser encontrar la causa de al/n error cuando *ste ocurra.
3a me$or solucin en estos casos es el uso de las 4ACG><. Kna macro es un con$unto de instrucciones que se
arupan %a$o un nom%re descriptivo (macroinstruccin) y que slo es necesario declarar una ve!
(macrode"inicin).
Kna ve! que la macro ha sido declarada, slo es necesario indicar su nom%re en el cuerpo del prorama y el
ensam%lador se encarara de reempla!ar la macroinstruccin por las instrucciones de la macro (e9pansin de
la macro).
#l "ormato eneral de una macro es el siuiente)
.4ACG> Com%re R(parametro1, parametro=, etc)S
IC<DGKCCI>C#<
#C&4
Cuevamente, lo que se encuentra entre par*ntesis cuadrados es opcional.
&e acuerdo con esto, la macro para imprimir cadenas quedar-a de la siuiente "orma)
.4ACG> Imprime`Cad(Cadena)
3ea &B,Cadena
4ov Ah,+'h
Int =1h
#C&4
Parmetros y etiquetas
&entro de las propiedades ms importantes de las macros se de%en destacar la posi%ilidad de utili!ar
parmetros y etiquetas.
3os parmetros permiten que una misma macro pueda ser usada %a$o di"erentes condiciones, por e$emplo, se
puede crear una macro para posicionar el cursor en di"erentes coordenadas de la pantalla e indicar sus
coordenadas por medio de parmetros.
3a siuiente macro nos muestra esta propiedad)
M#sta macro posiciona el cursor en las coordenadas que se le indican como
Mparmetros. #s el equivalente al @otoBH de Pascal.
.4ACG> oto9y (9,y)
9or %h,%h M<eleccionar pina cero de video
mov dl,9 MColumna
mov dh,y MGenln
mov ah,+=h M;uncin +=h para posicionar cursor
int 1+h Mllamada a la int 1+h del BI><
#C&4
Dam%i*n e9isten situaciones en las que los parmetros no son necesarios, es por esta ra!n que los parmetros
son opcionales en la declaracin de la macro.
M#sta macro reali!a una pausa en el prorama hasta que una tecla es Mpresionada. #s el equivalente del
readaey en Pascal.
.4ACG> tecla
mov ah,1+h
int 16h
#C&4
Por otro lado, las etiquetas tam%i*n son /tiles dentro de las macros. <upona que se desea crear una macro
que imprima una cadena un numero n de veces, esta macro podr-a ser declarada de la siuiente "orma)
.4ACG> Imprime`nCad (Cadena, Cuantos)
4ov CB,Cuantos MIniciar Contador
3ea &B,Cadena M&ireccionar la cadena que se va a imprimir
4ov Ah,+'h MKsar la "uncin +'h
>tra) M#tiqueta interna
Int =1h MImprimir la Cadena n veces
3oop >tra M<iuiente Impresin
#C&4
#nsam%le de macros
Como ya se mencion antes, una macro es declarada una sola ve! y puede ser llamada cuantas veces sea
necesario dentro del cuerpo del prorama.
Cada ve! que el ensam%lador encuentra una macroinstruccin, veri"ica si *sta "ue declaradaM si esta veri"icacin
es e9itosa, el ensam%lador toma las instrucciones del cuerpo de la macro y las reempla!a en el luar donde la
macro "ue llamada.
#l siuiente prorama muestra la declaracin y uso de las macros)
.C>44#CD
Prorama) 4acros1.A<4
Autor) Tuan Carlos @u!mn C.
&escripcin) #ste prorama muestra el uso de macros.
.4>&#3 DICH
M &eclaracin de varia%les
.&ADA
cad d% U#$emplo del uso de macros...U,1:,1+,UVU
cad1 d% UPresiona una tecla...U,UVU
cad= d% U#$emplo del uso de la macro oto9y...U,UVU
MAqu- se declaran las macros.
MPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP
MLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
M#sta macro imprime una cadena pasada como parmetro.
MKtili!a la "uncin +'h de la Int =1h del &><.
.4ACG> imprime`cad(cadena)
lea d9,cadena
mov ah,+'h
int =1h
#C&4
MLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
M#sta macro reali!a una pausa en el prorama hasta que una tecla se Mpresione. #s el equivalente del readaey
en Pascal.
.4ACG> tecla
mov ah,1+h
int 16h
#C&4
MLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
M#sta macro posiciona el cursor en las coordenadas que se le indican como
Mparmetros. #s el equivalente al @otoBH de Pascal.
.4ACG> oto9y (9,y)
9or %h,%h
mov dl,9
mov dh,y
mov ah,+=h
int 1+h
#C&4
MLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
M#sta macro limpia la pantalla.
MKtili!a la "uncin +6h de la Int 1+h del Bios.
.4ACG> limpiar`pantalla
mov a9,+6++h
mov %h,1(h
mov c9,++++h
mov d9,185"h
int 1+h
#C&4
MLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
MAqu- comien!a el cuerpo del prorama principal
.C>&#
inicio) M&eclaracin del punto de entrada
limpiar`pantalla M3lamada a la macro
oto9y (+,+) MColocar el cursor en +,+
imprime`cad(cad) MImprime el primer mensa$e
imprime`cad(cad1) MImprime el seundo mensa$e
tecla M#spera a que se presione una tecla
oto9y (:+,1=) MColocar el cursor en :+,1=
imprime`cad(cad=) MImprimir el tercer mensa$e
oto9y (7+,=5) MColocar el cursor en 7+,=5
imprime`cad(cad1) MImprimir el seundo mensa$e
tecla M#sperar por una tecla
mov a9,5c++h M;in del prorama y reresar al &><.
int =1h
#C& inicio
#C&
0enta$as y desventa$as
<i %ien es cierto que las macros proporcionan mayor "le9i%ilidad a la hora de proramar, tam%i*n es cierto que
tienen alunas desventa$as.
3a siuiente es una lista de la principales venta$as y desventa$as del uso de las macros.
0enta$as)
Menor posibilidad de cometer errores por repeticin.
Mayor flexibilidad en la programacin al permitir el uso de par6metros.
"digo fuente m6s compacto.
(l ser m6s pe;ue7o el cdigo fuenteB tambi3n es m6s f6cil de leer por otros.
&esventa$as)
Al cdigo ejecutable se 5uel5e m6s grande con cada llamada a la macro.
@as macros deben ser bien planeadas para e5itar la redundancia de cdigo.
6. Proramacin modular
&e"inicin de procedimientos
Kn procedimiento es un con$unto de instrucciones que tienen la "inalidad de e$ecutar una tarea especi"ica dentro
de un prorama. 3os procedimientos son muy similares a las macros.
Kn procedimiento se declara una sola ve! en el cdio "uente y cuando el prorama se ensam%la y e$ecuta, el
procedimiento se coloca en memoria para que pueda ser utili!ado por el prorama.
3as principales venta$as en el uso de procedimientos son) permiten una codi"icacin ms limpia y compacta, es
decir el cdio "uente es ms peque2oM tam%i*n permiten el ahorro de memoria, esto es porque un mismo
procedimiento puede ser llamado varias veces en el mismo prorama y slo requiere memoria una ve!.
3os procedimientos tienen la desventa$a de que reducen la velocidad de e$ecucin de los proramas, esto se
de%e a la "orma en que los procedimientos se e$ecutan. A continuacin se presentan los pasos necesarios para
e$ecutar un procedimiento)
1.L <e encuentra la llamada Call
=.L #l microprocesador almacena en la Pila el contenido del IP
:.L <e coloca en el IP el valor del despla!amiento correspondiente al Procedimiento
5.L #l microprocesador e$ecuta las instrucciones del procedimiento
7.L #l procedimiento termina cuando se encuentra la instruccin Get
6.L <e saca de la pila el valor oriinal del IP y se continua el "lu$o del prorama
Kn procedimiento se declara de la siuiente "orma)
PG>C nom%re
instruccin
instruccin
....
G#D
#C&P C>4BG#
#n donde PG>C es una pala%ra reservada que indica el inicio de un procedimiento, G#D es una instruccin que
indica la terminacin del con$unto de instrucciones de un procedimiento y "inalmente #C&P es la pala%ra
reservada para "in de procedimiento.
Paso de parmetros
3os procedimientos en lenua$e ensam%lador no cuentan con un mecanismo para el paso de parmetrosM por lo
cual, la /nica "orma de lorar esto es colocando los parmetros que nos interesan en los reistros de propsito
eneral antes de que el procedimiento sea e$ecutado.
#l siuiente procedimiento coloca el cursor en las coordenadas esta%lecidas en &l y &h.
Proc @otoBH
9or %h,%h
mov ah,+=h
int 1+h
Get
#ndp @otoBH
#n este e$emplo, las coordenadas BH se de%en situar en el reistro &B antes de que se llame al procedimiento.
3lamada a procedimientos
3os procedimientos son llamados por los proramas por medio de la instruccin CA33, seuida del nom%re del
procedimiento.
#$emplo)
Call @otoBH
#l siuiente prorama muestra la "orma de pasarle parmetros a los procedimientos por medio de los reistros
enerales. #ste prorama declara tres procedimientos)
@otoBH) Coloca el cursor en las coordenadas especi"icadas
3impia`Pantalla) 3impia la pantalla
Imprime`Cad) Imprime una cadena en la posicin actual del cursor
.C>44#CD
P
Prorama) Proc=.A<4
Autor) Tuan Carlos @u!mn C.
&escripcin) #ste prorama ilustra la "orma de utili!ar procedimientos en los proramas por medio de la
instruccin Call y la "orma de pasarles parmetros.
.4>&#3 DICH
.&ADA
Cad1 d% U#sta es una cadena de prue%a...U,1:,1+,UVU
.C>&#
ICICI>) MPunto de entrada al prorama
4ov &3,=+ MBE=+
4ov &1,1+ MHE1+
Call @oto9y M@otoBH =+,1+
3ea &B,cad1 M&BLZCad1
Call Imprime`Cad MImprimir Cad1
4ov A9,+5C++h MDerminar y reresar al dos
Int =1h M
#C& ICICI>
MPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP
MProcedimiento) @otoBH
M&escripcin) Coloca el cursor una posicin especi"ica de la pantalla
MParmetros) &lEB, &hEH
MPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP
PG>C @otoBH
Bor Bh,Bh
4ov Ah,+=h
Int 1+h
Get
#C&P @otoBH
MPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP
MProcedimiento) 3impia`Pantalla
M&escripcin) Imprime una cadena de caracteres en la posicin del cursor
MParmetros) 3a direccin de la cadena en &B
MPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP
PG>C Imprime`Cad
4ov Ah,+'h
Int =1h
Get
#C&P Imprime`Cad
#C&
Procedimientos internos
3os procedimientos internos son aquellos que se declaran y se llaman dentro del mismo prorama, tam%i*n son
llamados procedimientos locales.
#l listado anterior muestra la "orma de utili!ar procedimientos internos.
Procedimientos e9ternos
3os procedimientos e9ternos, a di"erencia de los internos, se declaran en mdulos o proramas separados al
prorama donde el procedimiento es llamado, en otras pala%ras, la llamada al procedimiento se encuentra en
un prorama y el procedimiento en otro.
Para poder utili!ar procedimientos e9ternos, es necesario que sean declarados como p/%licos en el prorama
donde se encuentran y que sean llamados como e9ternos en el prorama donde sern usados. Para lorar
esto, Pass:= cuenta con tres directivas de ensam%le) .PKB3IC para declarar los procedimientos como
p/%licos, .#BD#GC para indicar que el procedimiento que se va a usar est "uera del prorama y .ICC3K&#
para enla!ar el prorama que contiene los procedimientos con el prorama que los llama.
#l siuiente prorama muestra el uso de las directivas de inclusin. Primeramente, el archivo Proc=.A<4 se
modi"ic para que su varia%le Cad1 "uera declarada como pu%lica, el prorama Proc:.A<4 contiene la l-nea
.ICC3K&# Proc=.A<4, lo cual indica al ensam%lador que, en caso de que se soliciten datos, etiquetas o
procedimientos e9ternos, *stos se %usquen en el archivo incluido.
Pass:= proporciona randes "acilidades para el mane$o de procedimientosM en este caso, solamente Cad1 de%e
ser declarada como p/%lica, puesto que los procedimientos se %uscan y ane9an automticamente al prorama
que los llama si es que e9isten.
.C>44#CD
P
Prorama) Proc:.A<4
Autor) Tuan Carlos @u!mn C.
&escripcin) #ste prorama ilustra la "orma de utili!ar procedimientos y datos e9ternos en los proramas por
medio de las directivas de inclusin include y pu%lic.
.4>&#3 DICH
.ICC3K&# proc=.A<4 MIncluir el archivo proc=.asm
Mel cual contiene la varia%le de cadena
MCad1 y los procedimientos e9ternos
Musados en este prorama.
.&ADA
Cad= d% U#sta es una cadena de prue%a =...U,1:,1+,UVU
.C>&#
ICICI>) MPunto de entrada al prorama
4ov &l,=+ MBE=+
4ov &h,1+ MHE1+
Call @otoBH M@otoBH =+,1+
3ea &B,Cad= M&BLZCad= en Proc:.asm
Call Imprime`Cad MImprime Cad=
3ea &B,Cad1 M&BLZCad1 en Proc=.asm
Call Imprime`Cad MImprime Cad1
4ov AB,+5C++h M;in del prorama
Int =1h M
#C& ICICI>
#C&
.C>44#CD
P
Prorama) Proc=.A<4
Autor) Tuan Carlos @u!mn C.
&escripcin) #ste prorama ilustra la "orma de utili!ar procedimientos en los proramas por medio de la
instruccin Call y la "orma de pasarles parmetros.
.4>&#3 DICH
.&ADA
.PKB3IC Cad1 d% U#sta es una cadena de prue%a...U,1:,1+,UVU
.C>&#
ICICI>) MPunto de entrada al prorama
4ov &3,=+ MBE=+
4ov &1,1+ MHE1+
Call @oto9y M@otoBH =+,1+
3ea &B,cad1 M&BLZCad1
Call Imprime`Cad MImprimir Cad1
4ov A9,+5C++h MDerminar y reresar al dos
Int =1h M
#C& ICICI>
MPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP
MProcedimiento) @otoBH
M&escripcin) Coloca el cursor una posicin especi"ica de la pantalla
MParmetros) &lEB, &hEH
MPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP
PG>C @otoBH
Bor Bh,Bh
4ov Ah,+=h
Int 1+h
Get
#C&P @otoBH
MPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP
MProcedimiento) 3impia`Pantalla
M&escripcin) Imprime una cadena de caracteres en la posicin del cursor
MParmetros) 3a direccin de la cadena en &B
MPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP
PG>C Imprime`Cad
4ov Ah,+'h
Int =1h
Get
#C&P Imprime`Cad
#C&
Con estas capacidades, es "cil crear %i%liotecas de procedimientos y macros que puedan ser utili!ados
constantemente por los dems proramas, ahorrando con ello tiempo de proramacin al reutili!ar cdio
"uente.
#l siuiente prorama muestra la "orma de escri%ir una %i%lioteca de procedimientos y la "orma de utili!arlos en
los proramas.
.C>44#CD
P
Prorama) Proc:.A<4
Autor) Tuan Carlos @u!mn C.
&escripcin) #ste prorama ilustra la "orma de utili!ar procedimientos y datos e9ternos en los proramas por
medio de las directivas de inclusin include y pu%lic.
.4>&#3 DICH
.ICC3K&# procli%.inc MIncluir el archivo procli%.inc
Mel cual contiene la varia%le de cadena
MCad1 y los procedimientos e9ternos
Musados en este prorama.
.&ADA
Cad1 d% U#sta es una cadena de prue%a =...U,1:,1+,UVU
Cad= d% UPresiona una tecla...U,UVU
.C>&#
ICICI>) MPunto de entrada al prorama
Call limpia`Pantalla M
4ov &l,=+ MBE=+
4ov &h,1+ MHE1+
Call @otoBH M@otoBH =+,1+
3ea &B,Cad1 M&BLZCad1
Call Imprime`Cad MImprime Cad1
4ov &l,5+ M
4ov &h,=5 M
Call @otoBH M@otoBH 5+,=7
3ea &B,Cad= M
Call Imprime`Cad MImprime Cad=
Call #spera`Decla M#sperar por una tecla presionada
4ov AB,+5C++h M;in del prorama
Int =1h M
#C& ICICI>
#C&
.C>44#CD
Bi%lioteca de Procedimientos en 3enua$e ensam%lador
.C>&#
MPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP
MProcedimiento) @otoBH
M &escripcin) Coloca el cursor una posicin especi"ica de la pantalla
M Parmetros) &lEB, &hEH
MPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP
PG>C @otoBH
Bor Bh,Bh
4ov Ah,+=h
Int 1+h
Get
#C&P @otoBH
MPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP
MProcedimiento) Imprime`Cad
M &escripcin) Imprime una cadena de caracteres en la posicin del cursor
M Parmetros) 3a direccin de la cadena en &B
MPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP
PG>C Imprime`Cad
Int =1h
Get
#C&P Imprime`Cad
MPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP
MProcedimiento) 3impia`Pantalla
M &escripcin) 3impia la pantalla de la computadora y coloca el cursor
M en +,+.
M Parmetros) Cinuno
MPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP
PG>C 3impia`Pantalla
mov a9,+6++h
mov %h,1(h
mov c9,++++h
mov d9,185"h
int 1+h
4ov d9,++++h
Call @oto9y
Get
#C&P 3impia`Pantalla
MPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP
MProcedimiento) #spera`Decla
M &escripcin) &etiene la e$ecucin de un prorama hasta que se presiona
M una tecla
M Parmetros) Cinuno
MPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP
PG>C #spera`Decla
mov ah,1+h
int 16h
Get
#C&P #spera`Decla
(. Proramacin h-%rida
Pascal y ensam%lador
Como ya se mencion, la proramacin en lenua$e ensam%lador proporciona un mayor control so%re el
hard?are de la computadora, pero tam%i*n di"iculta la %uena estructuracin de los proramas.
3a proramacin h-%rida proporciona un mecanismo por medio del cual podemos aprovechar las venta$as del
lenua$e ensam%lador y los lenua$es de alto nivel, todo esto con el "in escri%ir proramas ms rpidos y
e"icientes.
#n esta seccin se mostrar la "orma para crear proramas h-%ridos utili!ando el lenua$e ensam%lador y Dur%o
Pascal.
Dur%o Pascal permite escri%ir procedimientos y "unciones en cdio ensam%lador e incluirlas como parte de los
proramas en lenua$e PascalM para esto, Dur%o Pascal cuenta con dos pala%ras reservadas) Assem%ler y Asm.
Assem%ler permite indicarle a Dur%o Pascal que la rutina o procedimiento que se est escri%iendo est
totalmente escrita en cdio ensam%lador.
#$emplo de un procedimiento h-%rido)
Procedure 3impia`PantallaM
Assem%lerM
Asm
4ov AB,+6++h
4ov B1,18h
4ov CB,++++h
4ov &B,185;h
Int 1+h
#ndM
#l procedimiento del listado =: utili!a la "uncin +6h de la Int 1+h del BI>< para limpiar la pantalla, este
procedimiento es anloo al procedimiento Clr<cr de la unidad CGD de Dur%o Pascal.
Por otro lado, Asm nos permite incluir %loques de instrucciones en lenua$e ensam%lador en cualquier parte del
prorama sin necesidad de escri%ir procedimientos completos en ensam%lador.
#$emplo de un prorama con un %loque de instrucciones en ensam%lador)
b #ste prorama muestra como se construye un prorama h-%rido utili!ando un %loque Asm... #ndM en Dur%o
Pascal.
#l prorama solicita que se introdu!can dos n/mero, despu*s calcula la suma por medio de la instruccin Add
de
ensam%lador y "inalmente imprime el resultado en la pantalla.c
Proram hi%ridoM
Kses CrtM
0ar
C1,C=,Ges ) inteerM
Bein
Jriteln(.Introduce un n/mero) .)M
Geadln(C1)M
Jriteln(.Introduce un n/mero) .)M
Geadln(C=)M
Asm
4ov AB,C1M
Add AB,C=M
4ov Ges,AB
#ndM
Jriteln(.#l resultado de la suma es) .,Ges)M
GeadlnM
#nd.
#l prorama del listado =5 reali!a la suma de dos cantidades enteras (C1 y C=) introducidas previamente por el
usuario, despu*s almacena el resultado en la varia%le Ges y "inalmente presenta el resultado en la pantalla.
#l lenua$e ensam%lador no cuenta con "unciones de entrada y salida "ormateada, por lo cual es muy
complicado escri%ir proramas que sean interactivos, es decir, proramas que soliciten in"ormacin o datos al
usuario. #s aqu- donde podemos e9plotar la "acilidad de la proramacin h-%rida, en el prorama anterior se
utili!an las "unciones Geadln y Jriteln para o%tener y presentar in"ormacin al usuario y de$amos los clculos
para las rutinas en ensam%lador.
#n el siuiente listado nos muestra la "orma de escri%ir proramas completos utili!ando procedimientos h-%ridos.
b#ste prorama solicita al usuario que presione aluna tecla, cuando la tecla es presionada, *sta se utili!a para
rellenar la pantalla.
#l prorama termina cuando se presiona la tecla enter.
#l prorama utili!a tres procedimientos)
3impia`Pantalla) #ste se encara de %orrar la pantalla
Cursor`BH) #ste procedimiento reempla!a al @otoBH de Pascal
Imprime`Car) #ste procedimiento imprime en pantalla el carcter que se le pasa como parmetro. c
Proram 1i%rido=M
Kses CrtM
0ar
Car) CharM
i,$ ) inteerM
b#ste procedimiento limpia la pantalla y pone %lanco so%re a!ulc
Procedure 3impia`PantallaM
Assem%lerM
Asm
4ov AB,+6++h
4ov Bh,1(h
4ov CB,++++h
4ov &B,185;h
Int 1+h
#ndM
b#ste procedimiento imprime el carcter en la pantallac
Procedure Imprime`Car(C) Char)M
Assem%lerM
Asm
4ov Ah,+=h
4ov &l,C
Int =1h
#ndM
b#ste procedimiento tiene la misma "uncin que el procedimiento @otoBH de Dur%o Pascalc
Procedure Cursor`BH(B,H) Byte)M
Assem%lerM
Asm
4ov Ah,+=h
4ov Bh,++h
4ov &h,H
4ov &l,B
Int 1+h
#ndM
Bein
3impia`PantallaM
Gepeat
3impia`PantallaM
Cursor`BH(+,+)M
Jrite(UIntroduce un carcter) U)M
Car)EGeadAeyM
Imprime`Car(Car)M
3impia`PantallaM
I" car \Z d1: then
Bein
;or i)E+ to =5 do
;or $)E+ to (' do
Bein
Cursor`BH($,i)M
Imprime`Car(Car)M
#ndM
Cursor`BH(:+,=5)M
Jrite(UPresiona enter para salir u otro para seuir...U)M
GeadlnM
Kntil car E d1:M
#nd.
8. Conclusin
Dal ve! no sea el lenua$e de proramacin ms sencillo de aprender, pero el lenua$e ensam%lador es y
seuir siendo una de las herramientas de proramacin ms utili!adas por todas aquellas personas que
desean tener un mayor rado de comprensin so%re el "uncionamiento a nivel de dispositivo de una
computadora personal.
#l lenua$e ensam%lador no est releado /nicamente a computadoras antiuas con sistemas operativos en
modo te9to como el 4<L&><. #9iste en la actualidad una ran cantidad de proramas ensam%ladores que nos
permiten proramar en am%ientes operativos r"icos como Jindo?s '7F'8, Jindo?s CD y 3inu9, y una
muestra de ello es el ensam%lador que se utili! para pro%ar los proramas de e$emplo de este tra%a$o.
Por lo tanto, si aluien piensa que el lenua$e ensam%lador ya pas de moda, tal ve! de%er-a reconsiderar su
postura y visitar alunas de las pinas en Internet que se dedican a cu%rir temas so%re proramacin en
lenua$e ensam%lador y que se actuali!an diariamente, tal ve! lo que descu%ra le haa cam%iar de opinin.
'. Bi%liora"-a
A%el, P.M 3enua$e #nsam%lador para IB4 PC y Compati%lesM #d. Prentice 1allM :e #dicinM 1''6.
Brey, B.M 3os microprocesadores de Intel) Arquitectura, Proramacin e Inter"acesM #d. Prentice 1allM :e #dicinM
1''7.
Ca%allar, T.M #l li%ro de las comunicaciones del PC) t*cnica, proramacin y aplicacionesM #d. GamaLComputecM
1e #dicinM 1''(.
4oran y JaiteM Introduccin al microprocesador 8+86F8+88M #d. Byte BooasF4c @ra? 1illM 1e #dicinM 1''=.
Pa?elc!aaM Pass:= := %it Assem%ler 0 =.7 Instruction 4anualM 1''(.
Go$as, A.M #nsam%lador BsicoM #d. ComputecM =e #dicinM 1''7.
<ocha y CortonM Assem%ly 3anuae "or the PCM #d. Brady Pu%lishinM :e #dicinM 1''=.
Dannen%aum, A.M >rani!acin de Computadoras un en"oque estructuradoM #d. Prentice 1allM :e #dicinM 1''=.
Pinas en Internet con in"ormacin relacionada
CA<4 1ome Pae)
#sta pina contiene in"ormacin so%re la proramacin en lenua$e ensam%lador y una ran cantidad de
enlaces hacia otras pinas con temas relacionados.
http)FF???.cryoen.comFCasm
Pass:= 1ome Pae)
#sta pina contiene la in"ormacin ms reciente so%re el desarrollo y nuevas versiones del ensam%lador
Pass:=
http)FF???.eocities.comF<ilicon0alleyFBayF:5:(Finde9.html