UNIDAD II Programacion. --------------------------------------------------------------------------------------------------------------
UNIDAD II PROGRAMACIÓN PROGRAMACIÓN 2.1 LENGUAJE ENSAMBLADOR En el lenguaje ensamblador el programador utiliza instrucciones simbólicas en lugar de instrucciones de maquina y nombres descriptios para los elementos de datos y para las localidades de memoria. Usted escribe un programa en ensamblador de acuerdo con un conjunto conjunto estricto estricto de reglas reglas que despu!s utiliza el programa programa traductor traductor de ensamblador ensamblador para conertir el programa ensamblador en código m"quina. E#iste E#is ten n $ clas clases es de leng lenguaj uajes es de progr program amaci ación% ón% de alto alto nie niell y de bajo bajo nie niel. l. &o &oss programadores que escriben en un lenguaje de alto niel 'como ( y Pascal)* codi+ican comando comandoss pod podero erosos sos** cada cada uno de los cuales cuales puede puede genera generarr muc,as muc,as instru instrucci ccione oness en lenguaj lenguajee de m"quin m"quina. a. Por otro lado* lado* los programa programador dores es que escrib escriben en en un lengua lenguaje je ensamblador de bajo niel codi+ican instrucciones simbólicas* cada una de las cuales genera una instrucción en lenguaje maquina. A pesar del ,ec,o de que codi+icar en un lenguaje de alto niel es mas productio* algunas entajas de codi+icar en lenguaje ensamblador son% •
• •
Propor Proporcio ciona na mas contro controll sob sobre re el manejo manejo parti particula cularr de los requer requerim imient ientos os de ,ardare. enera módulos ejecutables mas peque/os y mas compactos. (on mayor probabilidad tiene una ejecución mas r"pida.
Una pr"ctica com0n es combinar los bene+icios de ambos nieles de programación. Un lenguaje de alto niel utiliza un compilador para traducir el código +uente a lenguaje maquina. Un lenguaje de bajo niel utiliza un ensamblador para realizar la traducción.
Un programa en lenguaje ensamblador consiste en un conjunto de enunciados. &os dos tipos de enunciados o l1neas de programación son% 2.- Instrucción* tal como 345 y ADD* que el ensamblador traduce a código objeto $.- Directia* que indican al ensamblador que realice una acción especi+ica* como de+inir un elemento de dato.
ENUNCIADO O LINEA DE PROGRAMACIÓN: PROGRAMACIÓN: [Etiqueta]
3I(74P74(E8AD47E8 I 'Apuntes del Ing. 9orge Aguirre :.)
2;
UNIDAD II Programacion. --------------------------------------------------------------------------------------------------------------
E(I)UE(A o IDEN(I*ICADOR+, Es un nombre para designar un dato y la dirección donde se encuentra dicho dato. Puede consistir de los siguientes caracteres: Letras del alfabeto: A- a -! "#gitos: $% &' $no puede ser el primer car(cter' )aracteres especiales: signo de interrogación $*' +ubrayado $ , ' +igno de pesos $ ' Arroba $ ' Punto $ . ' $no puede ser el primer car(cter' • • •
no debe tener espacios en blanco en medio de la eti/ueta. Para definir una eti/ueta se usan los directi0os "12 "3. 4na eti/ueta puede tener los siguientes usos: a'
)omo 0ariable.- E5emplo: num db 67
8 A num se le asocia el 0alor 67 y la dirección donde se encuentra dicho dato.
Tambi9n podemos hacer: num d 676;< b'
)omo dirección.- En la cual puede continuar el programa: +4=A: A"" A>2 "> ,,,,,,,,,,,,, ,,,,,,,,,,,,, ?=P +4=A
OPERACIÓN O DIREC(I-A+, En este campo deber( estar el nombre de la operación $=nemónico' /ue el micro deber( reali!ar2 o el nombre de una orden $directi0a' /ue el programa ensamblador deber( e5ecutar al momento de ensamblar nuestro programa. Al ensamblarse nuestro programa se genera un código e5ecutable2 /ue el micro entiende. La directi0a no genera código e5ecutable solo el mnemónico. $@nstrucción'
Eti/:
=OB A>2 C%<
$"irecti0a'
)onstante E/u
%%
Algunas directi0as ser#an: .=odel @ndica el modelo de memoria /ue usara el programa .+tacD @ndica el tamao del +tacD o pila ."ata @ndica el inicio del segmento de datos .)ode @ndica el inicio del segmento de código End @ndica el fin del programa
3I(74P74(E8AD47E8 I 'Apuntes del Ing. 9orge Aguirre :.)
$<
UNIDAD II Programacion. --------------------------------------------------------------------------------------------------------------
OPERANDO+, $+i eFiste' proporciona información para la operación /ue actGa sobre el. Para un elemento de datos2 el operando identifica su 0alor inicial. Por e5emplo2 en le definición siguiente de un elemento de datos llamado )O4NTEH2 la operación "3 significa Idefinir byteJ . ETIQUETA )ounter
OPERACIÓN "3
OPERANDO COMENTARIO % 8 define un byte con 0alorK%
Para una instrucción un operando indica en donde reali!ar la operación. 4na instrucción puede tener uno2 dos o tal 0e! ningun operando. A/u# est(n tres e5emplos: OPERACIÓN HET @N) A""
OPERANDO
)> A>2 C
COMENTARIO 8 Hegresa 8 @ncrementa el registro )> 8 +uma C al registro A>
COMEN(ARIO.+, Empie!an con $ 8 ' y me5oran la claridad del programa2 donde el propósito de un con5unto de instrucciones en especial no es claro.
E.(RUC(URA DE UN PROGRAMA+, 4n programa escrito en lengua5e ensamblador se ensambla por medio de un programa ensamblador: Los programas mas comunes para el %2 %6 con el Turboensamblador $TA+=' de la compa#a 3orland y el de la compa#a =icrosoft $=A+='. Los re/uerimientos m#nimos para un programa escrito en lengua5e ensamblador son: .=odel
+=ALL
8 indica el modelo de memoria $+=ALL'
.+TA)M
C%%
8 indica el tamao del +TA)M $bytes'
."ATA ,,, ,,, ,,, .)O"E ,,, ,,, ,,, =OB A<2)< @NT C<
8 indica /ue la siguiente información 8 deber( /uedar en el segmento de datos 8 indica /ue la siguiente información 8 es el programa e5ecutable
EN"
8 @ndica el fin del programa
8necesario para terminar el programa 8 y regresar al prompt )
3I(74P74(E8AD47E8 I 'Apuntes del Ing. 9orge Aguirre :.)
$2
UNIDAD II Programacion. --------------------------------------------------------------------------------------------------------------
(IPO. DE MODELO. DE MEMORIA =odel =odel =odel =odel =odel
TN +=ALL =E"@4= )O=PA) LAHRE
=odel <4RE
)+ K "+ )+ K 6Mb )+ 6Mb )+ Q 6Mb )+ 6Mb )+ 6Mb
En solo segmento d 6M "+ K 6Mb "+ Q 6Mb "+ 6Mb "+ 6Mb$Los arreglos de datos deben ocupar menos de 6 M' "+ 6Mb$Los arreglos de datos pueden ocupar mas de 6 Mb'
INICIALI/ACION DE DA(O. Los datos pueden tener diferentes longitudes2 asi podemos hablar de 3TE+ $ bits'2 de palabras 1OH" $6 bits' de doble palabra $SC bits'. "ependiendo de la longitud del dato se usa un directi0o diferente para declararlo. "3 byte "1 Cbyte "" byte " o "P 6byte "U byte "T %byte Podemos usar una eti/ueta para definir un arreglo2 e5emplo: Arreglo db
%2 2 C2 S2
8 define 7 bytes con 0alores$%22C2S2'
Otra forma de iniciali!ar arreglo. Arreglo
db db db db db
% C S
"irecti0a "4P para definir una cierta cantidad de datos. @LA
db
%% dup $%' 8 define %% bytes2 todos con 0alor de$ % '
3I(74P74(E8AD47E8 I 'Apuntes del Ing. 9orge Aguirre :.)
$$
UNIDAD II Programacion. --------------------------------------------------------------------------------------------------------------
2.2 MODOS DE DIRECCIONAMIENTO •
INMEDIATO.- El dato a cargar en el operando destino es una constante. El
usuario especifica un byte o palabra como operando fuente. Esta constante se ensambla como parte de la instrucción. Por e5emplo: =OB A>2 8)oloca el num. en el reg. A>. •
DE REGISTRO.- El dato a cargar en el operando destino se obtiene de un
registro . E5emplo : =OB
A>2 3>
Es un e5emplo de direccionamiento de registro en donde la unidad de e5ecución $E4' toma el operando del registro 3>2 determina como destino el registro A> y ordena a la AL4 lle0ar a cabo la operación. •
DIRECTO.- El dato a cargar en el operando destino esta guardado en una
0ariable $Eti/ueta'. En este direccionamiento la dirección efecti0a $EA'2 para una localidad de memoria2 esta contenida en la instrucción. Para obtener la dirección de C% bits2 se suman el despla!amiento /ue tiene la eti/ueta y el contenido del registro "+. La siguiente instrucción es un e5emplo de este tipo de direccionamiento. =OB A>2 BAH "onde pre0iamente se definió en el segmento de datos a BAH BAH "3 •
C%<
DE REGISTRO INDIRECTO.- El dato a cargar en el operando destino esta
guardado en una 0ariable$Normalmente un arreglo' y se carga al operando destino indirectamente a tra09s de uno de los siguientes registros: 012 0P2 .I o DI+ Para e0itar confundir este modo de direccionamiento con el de registro2 en la instrucción2 los registros deben aparecer entre par9ntesis rectangulares. )omo la EA es una dirección y no el contenido de una localidad de memoria2 antes de utili!ar los registros mencionados2 estos deben contener direcciones. 4na t9cnica para asegurar lo anterior es utili!ar el operador O+ET. =OB 3>2 O+ET AHHERLO Este modo de direccionamiento se puede usar para colocar el contenido de la localidad de memoria a la /ue apunta 3>2 por e5emplo en A>. =OB A>2 V 3> W "onde V3>W es un despla!amiento relati0o a "+ $ "+:V 3> W ' 3I(74P74(E8AD47E8 I 'Apuntes del Ing. 9orge Aguirre :.)
$=
UNIDAD II Programacion. -------------------------------------------------------------------------------------------------------------•
RELATIVO A LA BASE.- Al hacer uso de este modo de direccionamiento2
la EA del operando fuente se obtiene al sumar un despla!amiento a los siguientes registros: 0P o 01+ En este caso2 los registros deben contener la dirección del despla!amiento. 4n e5emplo del uso de este tipo de direccionamiento lo ofrece la siguiente instrucción: =OB A>2 V 3>XC W
•
INDEXADO DIRECTO.- En este modo2 la $EA' es la suma del contenido de
un registro #ndice #.I o DI% 3 un e$p4a5a'iento. 4n e5emplo comGn lo construye una secuencia de instrucciones2 donde primero se carga una dirección en un registro #ndice y despu9s la misma se combina con una localidad de memoria. =OB +@2 C =OB A>2 AHHERLOV +@ W En este caso2 en el registro A> se coloca el contenido de la localidad de memoria cuya dirección es la de AHHERLO X C.
•
INDEXADO DE BASE.- La $EA' es la suma de los contenidos del registro
base #01%2 un registro #ndice #.I o DI% 3 un e$p4a5a'iento $opcional'. La siguiente es una secuencia de instrucciones /ue ilustra este tipo de direccionamiento. =OB 3>2O+ET ET@U4ETA =OB +@2 =OB A>2V 3> X +@ XC W
3I(74P74(E8AD47E8 I 'Apuntes del Ing. 9orge Aguirre :.)
$>
UNIDAD II Programacion. --------------------------------------------------------------------------------------------------------------
2.3 CONJUNTO DE INSTRUCCIONES Las instrucciones est(n agrupadas en los siguientes grupos y subgrupos: .- THAN+EHEN)@A "E "ATO+. a' "e propósito general. b' EntradaY+alida. c' "e operando dirección. d' Transferencia de banderas. C.-@N+TH4))@ONE+ AH@T=ENT@)A+. a' +uma. b' Hesta. c' =ultiplicación. d' "i0isión. S.-=AN@P4LA)@ON "E 3@T. a' Lógicas. b' "espla!amiento. c' Riro. .-"E )A"ENA. 7.-"E THAN+EHEN)@A "E PHORHA=A. a' @ncondicional. b' )ondicional. c' )ontrol de iteraciones. 6.-"E @NTEHH4P)@ONE+. ;.-)ONTHOL "EL PHO)E+A"OH. A' Operaciones con banderas. b' +incroni!ación eFtrema. c' NOP.
3I(74P74(E8AD47E8 I 'Apuntes del Ing. 9orge Aguirre :.)
$?
UNIDAD II Programacion. --------------------------------------------------------------------------------------------------------------
CON6UN(O DE IN.(RUCCIONE.+ ' THAN+EHEN)@A "E "ATO+. A' "E PHOPO+@TO RENEHAL .- =OB destino2 uente C.- P4+< fuente S.- POP destino .- >)LAT
8=ue0e datos 8=ete datos a la Pila 8+aca datos de la Pila 8@ntercambia contenidos 8Traduce $4so para tablas'
3' RH4PO "E ENTHA"A-+AL@"A. .- @N acumulador2 puerto 8Lee un dato del Puerto C.- O4T puerto2 acumulador 8+aca un dato por el puerto )' "E OPEHAN"O "E "@HE))@ON. .- LEA destino2 fuente 8)arga una dirección efecti0a C.- L"+ destino2 fuente 8)arga el reg. "e segmento datos S.- LE+ destino2 fuente 8)arga el reg. "e segmento eFtra "' THAN+EHEN)@A "E 3AN"EHA+. .- LA< 8)arga al reg. A< con las banderas C.- +A< 8En0#a el reg A< al reg. de 3anderas S.- P4+< 8Ruarda las banderas en el stacD .- POP 8Lo /ue saca del stacD lo pone en el reg. "e banderas C' @N+TH4))@ONE+ AH@T=ET@)A+ A' "E +4=A .C.S..7.-
A"" destino2 fuente A") destino2 fuente @N) destino "AA AAA
8+uma de nGmeros binarios 8+uma con carry 8 @ncrementos de 8A5uste decimal despu9s de sumar 8A5uste A+)@@ despu9s de sumar
3' "E HE+TA .- +43 C.- +33 S.- )=P .- "A+ 7.- AA+
destino2 fuente destino2 fuente destino2 fuente
8resta 0alores binarios 8resta con borro 8compara datos 8A5uste decimal despu9s de restar 8A5uste A+)@@ despu9s de restar
3I(74P74(E8AD47E8 I 'Apuntes del Ing. 9orge Aguirre :.)
$@
UNIDAD II Programacion. --------------------------------------------------------------------------------------------------------------
)' "E =4LT@PL@)A)@ON. .- =4L C.- @=4L S.- AA=
fuente $sin signo' fuente $con signo'
8=ultiplica sin signo 8=ultiplica con signo$enteros' 8A5uste A+)@@ para la multiplicación
"' "@B@+@ON .- "@B fuente $sin signo' 8"i0ide sin signo C.- @"@B fuente $con signo' 8"i0ide con signo S.- AA" 8A5uste A+)@@ para la di0isión S' @N+TH4))@ONE+ "E =AN@P4LA)@ON "E 3@T+ A' LOR@)A+ .C.S..7.6.-
NOT AN" OH >OH TE+T NER
destino destino2 fuente destino2 fuente destino2 fuente destino2 fuente destino
8Negación lógica $No' 8)on5unción lógica $y' 8"isyunción lógica $o' 8OH EFclusi0a 8Prueba bits 8Negación
3' "E "E+PLAA=@ENTO .C.S..-
+
destino2 contador destino2 contador destino2 contador destino2 contador
8)orrimiento lógico a la i!/uierda 8)orrimiento algebraico a la i!/. 8)orrimiento lógico a la "erecha 8 )orrimiento algebraico a la "er.
)' R@HO+ .C.S..-
HOL HOH H)L H)H
destino2 contador destino2 contador destino2 contador destino2 contador
8Hotación a la i!/uierda 8Hotación a la derecha 8 Hotación a la i!/uierda con carry 8 Hotación a la iderecha con carry
' @N+TH4))@ONE+ "E )A"ENA .- =OB+ cadena-destino2 cadena-fuente =OB+3 ----- =OB+1
8 =ue0e cadenas
C.- LO"+ cadena-fuente S.- +TO+ cadena-destino2 cadena-fuente +TO+3 -----+TO+1
8carga cadena 8Almacena una cadena
3I(74P74(E8AD47E8 I 'Apuntes del Ing. 9orge Aguirre :.)
$
UNIDAD II Programacion. --------------------------------------------------------------------------------------------------------------
.- )=P+ cadena-destino2 cadena-fuente )=P+3 ------)=P+1
8)ompara cadenas
7.- +)A+ cadena-destino +)A+3 ------+)A+1
8EFplora una cadena
7' @N+TH4))@ONE+ "E THAN+EHEN)@A "E PHORHA=A
A' THAN+EHEN)@A @N)ON"@)@ONAL .- )ALL C.- HET S.- ?=P
destino $HETN2 HET' destino
8llama a un procedimiento 8regresa de un procedimiento 8+alto incondicional
3' THAN+EHEN)@A )ON"@)@ONAL .C.S..7.6.;..&.-
?3Y?NAE ?AEY?N3 ?3EY?NA ?AY?N3E ?EY? ?NEY?N ?LY?NRE ?REY?NL ?LEY?NR
%.- ?RY?NLE .- ?PY?PE C.- ?NPY?PO S.- ?+ .- ?N+ 7.- ?) 6.- ?N) ;.- ?O .- ?NO
$+alta si es ba5o Y no arriba ni igual' )K $+alta si esta arriba o igual Y no esta ba5o' )K% $+alta si es ba5o ó igual Y no esta arriba' )K o K $+alta si esta arriba Y no ba5o ni igual' )K% y K% $+alta si fueron iguales' K $+alta si no es igual a' K% $menorYno mas grande ni igual' + diferente de O $mas grande o igual Yno menor' +KO $menor o igualYno mas grande' K o + diferente de %. $mas grandeYno menos ni igual' K% o +KO $paridad puestoYsi hay paridad par' PK $paridad no puestaY paridad impar' PK% $bit de signo puesto' +K $bit de signo no puesto' +K% $carry puesto' )K $carry no puesto' )K% $sobreflu5o puesto' OK $sobreflu5o no puesto' OK
)' )ONTHOL "E @TEHA)@ONE+ .C.S..-
LOOP ET@U LOOPEYLOOP ET@U LOOPNEYLOOPN ET@U ?)> ET@U
8 Hepetir hasta /ue )>K% 8Hepetir hasta /ue )>K% o K 8Hep. hasta /ue )>K% o K% 8+alta si )>K%
3I(74P74(E8AD47E8 I 'Apuntes del Ing. 9orge Aguirre :.)
$B
UNIDAD II Programacion. --------------------------------------------------------------------------------------------------------------
6' @N+TH4))@ONE+ "E @NTEHH4P)@ON
.C.-
@NT 0ector @HET
8petición de @nterrupción 8Hegreso de una interrupción
;' @N+TH4))@ONE+ "E )ONTHOL "EL PHO)E+A"OH a. OPEHA)@ONE+ )ON 3AN"EHA+ .C.S..7.6.;.-
+T) Pone la bandera de carry )K )L) Limpia la bandera de carry )K% )=) )omplementa la bandera de carry +T" Pone la bandera de dirección "K )L" Limpia la bandera de dirección "K% +T@ Pone la bandera de interrupción habilitada @K )L@ Limpia la bandera de interrupción habilitada @K%
3. @N+TH4))@ONE+ "E )ONTHOL "EL PHO)E+A"OH .C.-
Pone al micro en estado est(tico. Entra en edo. de espera hasta /ue se acti0e la l#nea TE+T.
' @N+TH4))@ONE+ "E )ONBEH+@ON .- )31 C.- )1"
)on0ersión de 3yte a palabra )on0ersión de palabra a doble palabra
3I(74P74(E8AD47E8 I 'Apuntes del Ing. 9orge Aguirre :.)
$;
UNIDAD II Programacion. --------------------------------------------------------------------------------------------------------------
2.4 MODOS DE PROGRAMACIÓN EFisten C tipos de programas: a'.- Los programas .E>E b'.- Los programas .)O= Algunas de las diferencias b(sicas entre un programa /ue es para e5ecutarse como .E>E y un programa /ue es para e5ecutarse como .)O= implica el tamao del programa2 la segmentación y la iniciali!ación. • •
•
4n programa .)O= es mas pe/ueo /ue un programa .E>E 4n programa .)O= est( restringido a un solo segmento de 6Mb. El segmento de código2 el segmento de datos2 el segmento de stacD y el segmento eFtra est(n todos traslapados en uno solo. Esto no sucede as# en los programas .E>E En un programa .)O= los datos est(n en el mismo segmento /ue el de código2 por lo tanto la primera instrucción es un salto a donde continua el código del programa 2 e0itando /ue el )P4 lea los datos como si fueran instrucciones. En los programas .E>E no eFiste este problema ya /ue el segmento de código y el de datos est(n separados2 mas sin embargo las primeras instrucciones en este tipo de programas son para obtener la dirección en donde el sistema operati0o guardo los datos2 y carg(rsela al registro "+. =OB A>2 "ATA =OB "+2 A>
DI*ERENCIA. 0A.ICA. EN .U *ORMA(O DE PROGRAMA: FORMATO .COM .=odel T@N .)ode OHR %%< +TAHT: ?=P @N@)@O
Bar BarC
"3 "3
%%< %%<
@N@)@O: ,,,, ,,,, ,,,, ,,,, mo0 A<2)< @nt C< EN"
FORMATO .EXE .=odel +=ALL <4RE .+TA)M C%% ."ATA
Bar BarC
db %%< db %%<
@N@)@O: mo0 A>2"ATA mo0 "+2A> ,,, ,,, ,,, mo0 A<2)< int C< EN"
3I(74P74(E8AD47E8 I 'Apuntes del Ing. 9orge Aguirre :.)
=<
UNIDAD II Programacion. --------------------------------------------------------------------------------------------------------------
PHORHA=A+ .)O= -
Todos los segmentos inician en la misma dirección )+K"+KE+K++ o sea /ue se encuentran traslapados en un segmento de 6M $modelo T@N'. El programa inicia en la dirección %%<2 ya /ue este espacio lo reser0a para el P+P $Program +egment prefiF' La primera instrucción es brinco al inicio del código2 reser0ando el espacio para datos. Tienen brincos y llamados cortos $NEAH'.
PHORHA=A+ .E>E -
Puede tener modelos de memoria2 desde el +=ALL hasta <4RE. +us segmentos pueden estar en direcciones diferentes. Al inicio del segmento de códigos las primeras instrucciones son para recuperar la dirección del segmento de datos. Pueden tener ambos tipos de brincos y llamados $NEAH:AH'.
3I(74P74(E8AD47E8 I 'Apuntes del Ing. 9orge Aguirre :.)
=2
UNIDAD II Programacion. --------------------------------------------------------------------------------------------------------------
2.5 EJEMPLOS DE PROGRAMACIÓN BASICA
P7I3E7 P747A3A DE E9E3P&4'Cormato .EE)% Uso de las +unciones <2* <; y >( de la INF $2
Funcion (01H) INT 21H AG <2 Cuncion para leer 2 tecla del teclado* regresa el codigo asscii de la tecla presionada en el registro A&
Funcion (09H) INT 21H AG <; Cuncion para sacar una cadena de caracteres a la pantalla* la cadena termina con un H y a encerrado entre comillas. (argar en el registro D la EA de donde se encuentra la cadena de caracteres.
Funcion (4CH) INT 21H AG >( Cuncion que sire para terminar un programa y deoler el control al sistema operatio.
Funcion (09H) INT 21H .3odel .stac .data
8mall 2<<
let2 db let$ db
2=*2<*2<* J3i primer programa de ejemplo H J 2=*2<* J (ual mensaje deseas K2-=L H M
msg2 db 2=*2<* J3ensaje UN4 H J msg$ db 2=*2<* J3ensaje D48 H J msg= db 2=*2<* J3ensaje F7E8 H J .(ode mo mo
a#* DAFA ds* a#
3I(74P74(E8AD47E8 I 'Apuntes del Ing. 9orge Aguirre :.)
=$
UNIDAD II Programacion. --------------------------------------------------------------------------------------------------------------
inicio% mo mo int lea mo int
d#* Olet$ a,* <;, $2,
mo int
a,* <2, $2,
mo mo int
d#* o++set msg2 a,* <;, $2,
mo int mo mo int
a,* <2, $2, d#* o++set msg$ a,* <;, $2,
mo int mo mo int mo int e#it%
d#* o++set let2 a,* <;, $2,
mo int
a,* <2, $2, d#* o++set msg= a,* <;, $2, a,* <2, $2, a#* >(<< $2,
END 3I(74P74(E8AD47E8 I 'Apuntes del Ing. 9orge Aguirre :.)
==