un procedlmlenLo es un con[unLo de lnsLrucclones a los que
podemos dlrlglr el flu[o de nuesLro programa y una vez
Lermlnada la e[ecucln de dlchas lnsLrucclones se devuelve el conLrol a la slgulenLe llnea a procesar del cdlgo que mando llamar al procedlmlenLo Los procedlmlenLos nos ayudan a crear programas leglbles y fclles de modlflcar @odos los programas que han sldo escrlLos hasLa esLe punLo han usado solo un procedlmlenLo Sln embargo los programas pueden conLener muchos procedlmlenLos Los procedlmlenLos pueden ser conslderados como nLA8 (lnLrasegmenLos) o lA8 (lnLersegmenLos) Los lnLrasegmenLos se encuenLran en el mlsmo segmenLo de lnsLrucclones y los lnLersegmenLos pueden ser almacenados en dlferenLes segmenLos de memorla Cuando se uLlllzan los procedlmlenLos lnLrasegmenLos se almacena en la plla el valor de l y cuando se uLlllzan los lnLersegmenLos se almacena el valor CSl Cuando las ruLlnas como las uLlllzadas en la blblloLeca de macros se colocan en procedlmlenLos el procedlmlenLo se comporLa ms como una subruLlna LsLos procedlmlenLos (sub) pueden ser llamados (CALL) desde el procedlmlenLo (prlnclpal) y uLlllzados como las subruLlnas de vlsual 8aslc ascal SlnLaxls 8CCLnu permlLe dar nombre a una subruLlna marcando con clarldad su lnlclo y su fln Aunque es redundanLe es muy recomendable para esLrucLurar los programas cls 8CC lA8 codlgo del procedlmlenLo cls Lnu L| atr|buto IAk que aparece en ocas|ones [unto a kCC |nd|ca que es un proced|m|ento |e[ano y |as |nstrucc|ones kL1 en su |nter|or se ensamb|an como kL1I (|os CALL hac|a | sern adems de 32 b|ts) Cbservar que |a et|queta nunca term|na con dos puntos 8CC8AMA CuL SuMA 3 nuML8C plla segmenL para sLack sLack dw 32 dup (0) plla ends daLos segmenL para daLos num1 dw 20 num2 dw 30 num3 dw ? daLos ends codlgo segmenL para codlgo empleza proc far assume cscodlgo dsdaLos ssplla mov ax daLos mov ds ax mov ax num1 mov axnum2 mov num3 ax mov dxnum3 mov ah 02h lnL 21h mov ah 10h lnL 16h mov ax 4C00h lnL 21h empleza endp codlgo ends end empleza Cuando un con[unLo de lnsLrucclones en ensamblador aparecen frecuenLemenLe repeLldas a lo largo de un llsLado es convenlenLe agruparlas ba[o un nombre slmbllco que las susLlLulr en aquellos punLos donde aparezcan LsLa es la mlsln de las macros por el hecho de soporLarlas el ensamblador eleva su caLegorla a la de macroensamblador al ser las macros una herramlenLa muy coLlzada por los programadores Ll ensamblador Llene facllldades que el programador puede usar para deflnlr macros usLed deflne un nombre especlflco para la macro [unLo con el con[unLo de lnsLrucclones en lengua[e ensamblador que la macro va a generar uespues slempre que neceslLe codlflcar el con[unLo de lnsLrucclones o solo codlflque el nombre de la macro y el ensamblador genera de manera auLomLlca las lnsLrucclones que usLed deflnl Las macros son uLlles para los slgulenLes propslLos W Slmpllflcar y reduclr la canLldad de codlflcacln repeLlLlva W 8educlr errores causados por la codlflcacln repeLlLlva W Llneallzar un programa en lengua[e ensamblador para hacerlo mas leglble ueflnlcln de una macro La macro se deflne por medlo de la dlrecLlva MAC8C Ls necesarlo deflnlr la macro anLes de uLlllzarla una macro puede llamar a oLra SlnLaxls nombre_slmbllco MAC8C parmeLros lnsLrucclones de la macro LnuM Ll nombre slmbllco es el que permlLlr en adelanLe hacer referencla a la macro y se consLruye casl con las mlsmas reglas que los nombres de las varlables y dems slmbolos La macro puede conLener parmeLros de manera opclonal A conLlnuacln vlenen las lnsLrucclones que engloba y flnalmenLe la dlrecLlva LnuM senala el flnal de la macro no se debe repeLlr el nombre slmbllco [unLo a la dlrecLlva LnuM ello provocarla un error un LanLo curloso y exLrano por parLe del ensamblador (algo asl como lln del flchero fuenLe lnesperado falLa dlrecLlva Lnu) al menos con MASM 30 y @ASM 20 ILN1AIAS 1 Las macros son rpldas porque se e[ecuLan en llnea en un programa 2 Las macros pueden pasar y reclblr parmeLros que afecLan solo la operacln de las Mlsmas 3 Las macros pueden ser guardadas en una blblloLeca en cdlgo fuenLe que puede ser fcllmenLe edlLable 4 La cabecera de programacln para uLlllzar macros es slmple para una blblloLeca de macros uLlllzar ll1Lnull DLSILN1AIAS 1 Las macros hacen ms grande el cdlgo fuenLe ya que los procedlmlenLos no son en el cdlgo del programa lmprlmeysale macro mov dlal add dl30h mov ah 02 lnL 21h mov ah10h lnL 16h mov ax4C00h lnL 21h endm espaclo macro mov ah09h lea dxvar2 lnL 21h LndM model small sLack daLa var1 db ? var2 db + $ code sLarLup mov ah 01h lnL 21h sub al 30h mov var1 al espaclo mov ah 01h lnL 21h sub al 30h add al var1 lmprlmeysale exlL end PC!A 1 PC!A 1 PC!A 2 PC!A 2 AulCS MAC8C MCv AP10P ln@ 16P MCv AP 4CP ln@ 21P LnuM
lLA SLCMLn@ A8A S@ACk S@ACk
u8 200 uu (0) lLA LnuS
uA@CS SLCMLn@ A8A uA@A
vA u8 uLSuLS uL MLulC ulA (?/n) $ vu u8 1310 8uLnCS ulAS$ v@ u8 1310 8uLnAS @A8uLS$ uA@CS LnuS
CCulCCSLCMLn@ A8A CCuL
LMlLZA 8CC lA8 ASSuML CS CCulCC uS uA@CS SS lLA MCv Ax uA@CS MCv uS Ax MCv uxCllSL@ vA MCv AP9 ln@ 21P CALL 8LCun@A LMlLZA Lnu 8LCun@A 8CC nLA8 MCv AP 01P ln@ 21P CM AL ? !Z @A8uLS CM AL n !Z ulAS CM AL y !Z @A8uLS CM AL n !Z ulAS @A8uLS MCv ux CllSL@ v@ MCv AP 09 ln@ 21P AulCS ulAS MCv ux CllSL@ vu MCv AP 09 ln@ 21P AulCS Se llama la macro AulCS 8L@ 8LCun@A Lnu CCulCCLnuS Lnu LMlLZA PC!A 1 PC!A 1 PC!A 2 PC!A 2