1. PROCESODE MODULARIZACION.
El procesode segmentaciónconsiste enhacerunaabstraccióndel problema,del cual se tiene
inicialmente unpanoramageneral.Enseguida,se procede a“desmenuzar”o“dividir”el
problemaenpartespequeñasysimples,comose muestra:Se forma un primermodulo
enunciandoel problemaentérminosde lasoluciónaéste.
MACRO INTERNO
Una macro, es unconjuntode instruccionesque se puedenmandara llamardesde cualquier
parte del programa.
Para definirunamacro,se utilizala directivaMACRO.El formatode estadirectivaes:
(nombre_de_macro) MACRO(lista_parámetros)
Una macro constade trespartesesenciales:
a) CABECERA:Contiene el nombre de lamacro,lapseudo-opMACROyopcionalmente,
variablesficticiasque seránpasadasdesdelamacro.
b) CUERPO: Contiene el códigoreal que seráinsertadoencualquierprogramaque llame al
nombre de la macro.
c) FIN:Debe incluirlasentenciaENDM.
Ejemplode unamacro sencilla:
INICIO MACRO
; Define macro
MOV AX,DATA ; cuerpode
MOV DS, AX ; la definición
MOV ES, AX ; de lamacro
ENDM ; Finde la macro
El nombre de estamacro es INICIO,aunque esaceptablecualquierotronombre válidoque sea
único.La directivaMACROenla primerlíneaindicaal ensambladorque lasinstruccionesque
siguen,hastaENDM(“finde lamacro”), sonparte de la definiciónde lamacro.
La directivaENDMterminaladefiniciónde lamacro.Las instruccionesentreMACROyENDM
comprendenel cuerpode ladefiniciónde lamacro.Si su programa realizafrecuentemente
funcionesde entrada/salida,lasmacrosofrecenlafacilidadde codificarunasolavezun
conjuntode instruccionesyreutilizarel códigocuantasvecesdeseedentrode suprograma.
Una macro esuna pseudo-opque permite el establecimientode operacionesúnicasen
ensambladorolainclusiónde frecuentesllamadasde códigoensamblador.Unamacro
2. tambiénse puede definircomoungrupo de instruccionesrepetitivasenunprogramaque se
codificasólounavezy puede utilizarsecuantasvecesseanecesario.[1]
Internas.
Una macro internaesaquellaque se declarayse llamandentro del mismoprograma.
Una macro internase declarade la siguientemanera:
Sintaxis:
<Nombre>MACRO [parámetros]
…
ENDM
Ejemplo:
DuplicaAL? MACRO
SHL AL, 1
ENDM
Códigoque lausa:
MOV AL, 2
DuplicaAL ; Esta esla “llamada”al macro
El ensambladorsustituye cadavezque aparezcalamacro. No escomo losprocedimientos,que
se “llaman”perono repitenel códigoEjemplo:
MOV AL, 2
DuplicaAL ; CALL Duplica
DuplicaAL ; CALL Duplica
Este códigoqueda:
MOV AL, 2
SHL AL, 1 ; CALL Duplica
SHL AL, 1 ; CALL Duplica
Cuándousarlasy cuándono
1.- Cuandose quiere el códigomásrápidoy no importaserrepetitivo(códigogrande)
2.-Cuandose van a generardiversasvariantesde códigosimilar
3. 3.-Nocuando se quiere códigocompacto,evitandorepetirel mismo(eneste caso,usar
procedimientos).[2]
MACROS
Macro: enaplicacionesde computadora,unconjuntode accionesoinstruccionesgrabadasy
ejecutadasmedianteunasimpleunainstrucción.Asíse evitalaintroducciónrepetitivade
instrucciones,se minimizanloserrorestipográficosyse permite alosusuariosque no
conozcanel programa reproducirconjuntosde instruccionespreviamente grabadospor
alguienmásexpertoenlaaplicación.Si laaplicaciónincluye tambiénunlenguaje de macros
que respondaa variablese instruccionescondicionales,el usuariopuede tambiéncontrolarel
resultadode unprocedimiento,haciendoque lamacrorespondade formadiferentebajo
condicionesdiversas.
“En el lenguaje de programaciónensamblador”,unamacroesun nombre que define un
conjuntode instruccionesque seránsustituidasporlamacro cuando el nombre de ésta
aparezca enun programa(procesodenominadoexpansiónde macros) enel momentode
ensamblarel programa.Las instruccionesde macrosse puedenguardarenel programamismo
o enun archivoseparadoque el programa puedaidentificar.
Procedimientosinternos Losprocedimientosinternossonaquellosque se declaranyse
llamandentrodel mismoprograma,tambiénsonllamadosprocedimientoslocales.
ProcedimientosExternosLenguaje Ensamblador
‘’‘Definiciónde procedimientoUnprocedimientoesunconjuntode instruccionesalosque
podemosdirigirel flujode nuestroprograma,yunavezterminadalaejecuciónde dichas
instruccionesse devuelve el control alasiguiente lineaaprocesardel códigoque mando
llamaral procedimiento.Unprocedimientose declaraunasolavezenel códigofuente y
cuandoel programa se ensamblayejecuta,el procedimientose colocaenmemoriaparaque
puedaserutilizadoporel programa.Los procedimientosnosayudanacrear programas
legiblesyfácilesde modificar.Al momentode invocaraun procedimientose guardaenla pila
la direcciónde lasiguienteinstruccióndel programaparaque,una veztransferidoel flujodel
programa y terminadoel procedimiento,se puedaregresarala lineasiguientedel programa
original (el que llam—al procedimiento).Sintaxisde unprocedimientoExistendostiposde
procedimientos,losintrasegmentos,que se encuentranenel mismosegmentode
instruccionesylosintersegmentosque puedenseralmacenadosendiferentessegmentosde
memoria.Cuandose utilizanlosprocedimientosintrasegmentosse almacenaenlapilael valor
de IP y cuandose utilizanlosintersegmentosse almacena el valorCS:IPParadesviarel flujoa
un procedimiento(llamarlo) se utilizaladirectiva:CALLNombre Del ProcedimientoLaspartes
que componena unprocedimientoson:• Declaracióndel procedimiento•códigodel
procedimiento•Directivade regreso• Terminacióndel procedimientoPorejemplo,si
queremosunarutinaque nossume dosbytes,almacenadosenAHy AL cada uno y guardarla
suma enel registroBX:Suma Proc Near;Declaracióndel procedimientoMovBx,0 ;Contenido
del procedimientoMovBl,AhMov Ah,00 AddBx,Ax Ret ;Directivade regresoSumaEndp
;Declaraciónde final del procedimientoEnladeclaraciónlaprimerapalabra,Suma,
corresponde al nombre de nuestroprocedimiento,Proclodeclaracomotal y lapalabra Near
4. le indicaal MASM que el procedimientoesintrasegmento.LadirectivaRetcarga ladirecciónIP
almacenadaenlapilapara regresaral programa original,porúltimo,ladirectivaSumaEndp
indicael final del procedimiento.Paradeclararunprocedimientointersegmentosustituimosla
palabraNear porla palabraFAR. El llamadode este procedimientose realizade lasiguiente
forma:Call Suma Las macros ofrecenunamayorflexibilidadenlaProgramacióncomparadas
con losprocedimientos,peronoporellose dejaránde utilizarestosúltimos.
Las principalesventajasenel usode procedimientosson:permitenunacodificaciónmáslimpia
y compacta,es decirel códigofuente esmáspequeño;tambiénpermitenel ahorrode
memoria,estoesporque unmismoprocedimientopuede serllamadovariasvecesenel
mismoprogramay sólorequiere memoriaunavez.
Los procedimientostienenladesventajade que reducenlavelocidadde ejecuciónde los
programas,estose debe a la formaen que losprocedimientosse ejecutan.A continuaciónse
presentanlospasosnecesariosparaejecutarunprocedimiento:
1.- Se encuentralallamadaCall 2.- El microprocesadoralmacenaenlaPilael contenidodelIP
3.- Se coloca enel IP el valordel desplazamientocorrespondienteal Procedimiento4.- El
microprocesadorejecutalasinstruccionesdelprocedimiento5.- El procedimientotermina
cuandose encuentralainstrucciónRet6.- Se saca de la pilael valororiginal del IPyse continua
el flujodel programaUn procedimientose declarade lasiguienteforma:PROCnombre
instruccióninstrucción….RET ENDP NOMBRE En donde PROCesuna palabrareservadaque
indicael iniciode unprocedimiento,RETesunainstrucciónque indicalaterminacióndel
conjuntode instruccionesde unprocedimientoyfinalmenteENDPeslapalabra reservada
para finde procedimiento.Pasode parámetrosLosprocedimientosenlenguajeensamblador
no cuentancon unmecanismoparael paso de parámetros;por locual, laúnica formade
lograr estoescolocandolosparámetrosque nosinteresanenlosregistrosde propósito
general antesde que el procedimientoseaejecutado.LlamadaaprocedimientosLos
procedimientossonllamadosporlosprogramaspor mediode lainstrucciónCALL,seguidadel
nombre del procedimiento.Ejemplo:Call GotoXYProcedimientos internosLosprocedimientos
internossonaquellosque se declaranyse llamandentrodel mismoprograma,tambiénson
llamadosprocedimientoslocales.El listadoanteriormuestralaformade utilizar
procedimientosinternos.ProcedimientosexternosLosprocedimientosexternos,adiferencia
de losinternos,se declaranenmódulosoprogramasseparadosal programa donde el
procedimientoesllamado,enotraspalabras,lallamadaal procedimientose encuentraenun
programa y el procedimientoenotro.Parapoder utilizarprocedimientosexternos,es
necesarioque seandeclaradoscomopúblicosenel programadonde se encuentranyque sean
llamadoscomoexternosenel programadonde seránusados.Se debe contarcontres
directivasde ensamble:.PUBLICparadeclarar losprocedimientoscomopúblicos,.EXTERN para
indicarque el procedimientoque se vaa usar estáfueradel programay .INCLUDE para enlazar
el programa que contiene losprocedimientosconel programaque losllama.Conestas
capacidades,esfácil crearbibliotecasde procedimientosymacrosque puedanserutilizados
constantemente porlosdemásprogramas,ahorrandoconellotiempode programaciónal
reutilizarcódigofuente.
5. El segmentode códigocontieneel códigoejecutable de unprograma.Tambiéntiene unoo
mas procedimientos,definidosconladirectivaPROC.Unsegmentoque tiene soloun
procedimientopuedeaparecercomosigue:
NOMBRE OPERACION OPERANDO COMENTARIO
nomsegmento SEGMENT PARA
nomproc PROC FAR ;Un
. ;procedimiento
. ;dentro
. ;del segmento
nomproc ENDP ;de código
nomsegmento ENDS
El nombre del procedimientodebe estarpresente,serúnicoyseguirlasreglaspara la
formaciónde nombresdel lenguaje.El operandofareneste casoestarelacionadoconla
ejecucióndel programa.Cuandoustedsolicitalaejecuciónde unprograma,el cargador de
programasdel DOS utilizaeste nombre de procedimientocomoel puntode entradapara la
primerainstrucciónaejecutar.La directivaENDPindicael finde unprocedimientoycontiene
el mismonombre que el enunciadoPROCparapermitirque el ensambladorrelacione alos
dos.Ya que losprocedimientosdebenestarporcompletodentrode unsegmento,ENDP
define el finalde unprocedimientoantesque ENDSdefinael final de unsegmento.La
organizaciónde unprograma enprocedimientosproporcionalosbeneficiossiguientes:1.
Reduce lacantidadde código,yaque un procedimientocomúnpuede serllamadodesde
cualquierlugarenel segmentode código.2.Fortalece lamejororganizacióndel programa.3.
Facilitaladepuracióndel programa,yaque loserrorespuedenseraisladosconmayorclaridad.
4. Ayudaen el mantenimientoprogresivode programas,yaque losprocedimientosson
identificadosde formarápidaparasu modificación.
OperacionesCALLyRET La instrucciónCALLtransfiere el control aun procedimientollamado,y
la instrucciónRETregresadel procedimientollamadoal procedimientooriginalque hizola
llamada.RET debe serlaultimainstrucciónenunprocedimiento llamado.Losformatos
generalesparaCALLy RET son:
El códigoobjetoparticularque CALLy RET generandepende de si laoperaciónimplicaun
procedimientoNEAR(cercano) ounprocedimientoFAR(lejano).
Llamaday regresocercanos.Una llamada(CALL) a un procedimientodentrodel mismo
segmentoescercanay realizalosiguiente:
• Disminuye el SPen2(unapalabra) • Mete el IP (que contiene el desplazamientode la
instrucciónque sigue al CALL) enla pila.• Insertaladireccióndel desplazamientodel
procedimientollamadoenel IP(estaoperaciónvacíael resultadode lainstrucción
6. previamenteprocesada),UnRET que regresadesde unprocedimientocercanorealizalo
siguiente:
• Saca el antiguovalorde IP de la pilay loenvíaal IP (locual tambiénvacía el resultadode la
instrucciónpreviamente procesada).•Incrementael SPen2. Ahorael CS:IPapunta a la
instrucciónque sigue al CALLoriginal enlallamadadel procedimiento,endonde se reasume la
ejecución.Llamadayregresolejanos.Unallamada (CALL) lejanallamaaunprocedimiento
etiquetadoconFAR,tal vezenun segmentode códigoseparado.UnCALL lejanomete alapila
al CS y al IP, yRET lossaca de la pila.