Sie sind auf Seite 1von 41

27/11/2014

CursodeAssembler

WikiCienciaInformticayComputacinProgramacinCursodeAssembler

CursodeAssembler

SistemadeCmputo.
Lellamamossistemadecmputoalaconfiguracincompletadeunacomputadora,incluyendolasunidadesperifricasyla
programacindesistemasquelahacenunaparatotilyfuncionalparaunfindeterminado.

ProcesadorCentral.
EstaparteesconocidatambincomounidadcentraldeprocesamientooUCP.formadaasuvezporlaunidaddecontrolyla
unidadaritmticaylgica.Susfuncionesconsistenenleeryescribircontenidosdelasceldasdememoria,llevarytraerdatos
entreceldasdememoriayregistrosespecialesydecodificaryejecutarlasinstruccionesdeunprograma.
Elprocesadorcuentaconunaseriedeceldasdememoriaqueseutilizanconmuchafrecuenciayque,porende,formanparte
delaUCP.Estasceldassonconocidasconelnombrederegistros.Unprocesadorpuedetenerunadocenaodosdeestos
registros.LaunidadaritmticaylgicadelaUCPrealizalasoperacionesrelacionadasconlosclculosnumricosy
simblicos.Tpicamenteestasunidadesslotienencapacidaddeefectuaroperacionesmuyelementalescomo:sumayresta
dedosnmerosdepuntofijo,multiplicacinydivisindepuntofijo,manipulacindebitsdelosregistrosycomparacindel
contenidodedosregistros.
Lascomputadoraspersonalespuedenclasificarseporloqueseconocecomotamaodepalabra,estoes,lacantidaddebits
queelprocesadorpuedemanejaralavez.

MemoriaCentral.
http://www.wikiciencia.org/informatica/programacion/asm/index.php

1/41

27/11/2014

CursodeAssembler

Esunconjuntodeceldas(actualmentefabricadasconsemiconductores)usadasparaprocesosgenerales,talescomola
ejecucindeprogramasyelalmacenamientodeinformacinparalasoperaciones.
Cadaunadelasceldaspuedecontenerunvalornumricoytienenlapropiedaddeserdireccionables,estoes,quesepueden
distinguirunadeotrapormediodeunnmeronicoodireccinparacadacelda.
ElnombregenricodeestasmemoriasesRandomAccessMemory(Memoriadeaccesoaleatorio)oRAMporsussiglasen
ingls.Laprincipaldesventajadeestetipodememoriaesqueloscircuitosintegradospierdenlainformacinquetienen
almacenadacuandoseinterrumpelaalimentacinelctrica.Estollevalacreacindememoriascuyainformacinnose
pierdacuandoseapagaelsistema.EstasmemoriasrecibenelnombredeReadOnlyMemory(Memoriadesololectura)o
ROM.

UnidadesdeEntradaySalida.
Paraqueunacomputadoranosseatilesnecesarioqueelprocesadorsecomuniquealexteriorpormediodeinterfacesque
permitenlaentradaylasalidadedatosdelprocesadorylamemoria.Haciendousodeestascomunicacionesesposible
introducirdatosparasuprocesamientoylaposteriorvisualizacindelosdatosyaprocesados.
Algunasdelasunidadesdeentradamascomunessonteclados,lectorasdetarjetas(yaendesuso),mouse,etc.Lasunidades
desalidamascomunessonlasterminalesdevideoylasimpresoras.

UnidadesdeMemoriaAuxiliar.
Comolamemoriacentraldeunacomputadoraescostosay,considerandolasaplicacionesactuales,muylimitada,surge
entonceslanecesidaddecrearsistemasdealmacenamientodeinformacinprcticosyeconmicos.Adems,lamemoria
centralpierdesucontenidoalapagarselamquina,porloquenoesconvenienteutilizarlaparaalmacenamientopermanentede
datos.
Estosyotrosincovenientesdanlugaralacreacindeunidadesperifricasdememoriaquerecibenelnombredememoria
auxiliarosecundaria.Deestasunidadesperifricaslasmscomunessonlascintasylosdiscosmagnticos.
Lainformacinalmacenadaenestosmediosmagnticosrecibeelnombredearchivo.Unarchivoestformadoporunnmero
variablederegistros,generalmentedetamaofijolosregistrospuedencontenerdatosoprogramas.

Unidadesdeinformacin
ParaquelaPCpuedaprocesarlainformacinesnecesarioquestaseencuentreenceldasespecialesllamadasregistros.
Losregistrossonconjuntosde8o16flipflops(basculadoresobiestables).
Unflipflopesundispositivocapazdealmacenardosnivelesdevoltaje,unobajo,regularmentede0.5voltsyotroalto
comunmentede5volts.Elnivelbajodeenergaenelflipflopseinterpretacomoapagadoo0,yelnivelaltocomoprendidoo
1.Aestosestadosselesconoceusualmentecomobits,quesonlaunidadmaspequeadeinformacinenunacomputadora.
Aungrupode16bitsseleconocecomopalabra,unapalabrapuedeserdivididaengruposde8bitsllamadosbytes,yalos
gruposde4bitslesllamamosnibbles.

Sistemasnumricos
Elsistemanumricoqueutilizamosadiarioeselsistemadecimal,peroestesistemanoesconvenienteparalasmquinas
debidoaquelainformacinsemanejacodificadaenformadebitsprendidosoapagadosestaformadecodificacinnoslleva
alanecesidaddeconocerelclculoposicionalquenospermitaexpresarunnmeroencualquierbasequelonecesitemos.
Esposiblerepresentarunnmerodeterminadoencualquierbasemediantelasiguienteformula:
Dondeneslaposicindeldgitoempezandodederechaaizquierdaynumerandoapartirdecero.Deseldgitosobreelcual
operamosyBeslabasenumricaempleada.
Convertirnmerosbinariosadecimales
Trabajandoenellenguajeensambladornosencontramosconlanecesidaddeconvertirnmerosdelsistemabinario,queesel
empleadoporlascomputadoras,alsistemadecimalutilizadoporlaspersonas.
Elsistemabinarioestbasadoenunicamentedoscondicionesoestados,yaseaencendido(1)oapagado(0),porlotantosu
baseesdos.
Paralaconversinpodemosutilizarlaformuladevalorposicional:
Porejemplo,sitenemoselnumerobinario10011,tomamosdederechaaizquierdacadadgitoylomultiplicamosporlabase
elevadaalanuevaposicinqueocupan:
Binario:11001
Decimal:1*2^0+1*2^1+0*2^2+0*2^3+1*2^4=1+2+0+0+16=19decimal.
Elcaracter^esutilizadoencomputacincomosmbolodepotenciacinyelcaracter*seusapararepresentarla
multiplicacin.
http://www.wikiciencia.org/informatica/programacion/asm/index.php

2/41

27/11/2014

CursodeAssembler

Convertirnmerosdecimalesabinarios
Existenvariosmtodosdeconversindenmerosdecimalesabinariosaqusoloseanalizaruno.Naturalmenteesmucho
masfcilunaconversinconunacalculadoracientfica,peronosiempresecuentaconella,asqueesconvenienteconocer
porlomenosunaformamanualparahacerlo.
Elmtodoqueseexplicarutilizaladivisinsucesivaentredos,guardandoelresiduocomodgitobinarioyelresultadocomo
lasiguientecantidadadividir.
Tomemoscomoejemploelnmero43decimal.
43/2=21ysuresiduoes1
21/2=10ysuresiduoes1
10/2=5ysuresiduoes0
5/2=2ysuresiduoes1
2/2=1ysuresiduoes0
1/2=0ysuresiduoes1
Armandoelnmerodeabajohaciaarribatenemosqueelresultadoenbinarioes101011

Sistemahexadecimal
Enlabasehexadecimaltenemos16dgitosquevandel0al9ydelaletraAhastalaF(estasletrasrepresentanlosnmeros
del10al15).Porlotanto,contamos0,1,2,3,4,5,6,7,8,9,A,B,C,D,EyF.
Laconversinentrenumeracinbinariayhexadecimalessencilla.Loprimeroquesehaceparaunaconversindeunnmero
binarioahexadecimalesdividirloengruposde4bits,empezandodederechaaizquierda.Encasodequeelltimogrupo(el
quequedemasalaizquierda)seamenorde4bitsserellenanlosfaltantesconceros.
Tomandocomoejemploelnmerobinario101011lodividimosengruposde4bitsynosqueda:
101011
Rellenandoconceroselltimogrupo(eldelaizquierda):
00101011
Despustomamoscadagrupocomounnmeroindependienteyconsideramossuvalorendecimal:
0010=21011=11
Perocomonopodemosrepresentarestenmerohexadecimalcomo211porqueseraunerror,tenemosquesustituirtodoslos
valoresmayoresa9porsurespectivarepresentacinenhexadecimal,conloqueobtenemos:
2BH(DondelaHrepresentalabasehexadecimal)
Paraconvertirunnmerodehexadecimalabinariosoloesnecesarioinvertirestospasos:setomaelprimerdgitohexadecimal
yseconvierteabinario,yluegoelsegundo,yassucesivamentehastacompletarelnmero.

CdigoASCII
ASCIIgeneralmentesepronuncia"aski",esunacrnimodeAmericanStandardCodeforInformationInterchange.
Estecdigoasignaalasletrasdelalfabeto,alosdgitosdecimalesdel0al9yavariossmbolosadicionalesunnmero
binariode7bits(ponindoseelbit8ensuestadodeapagadoo0).
Deestaformacadaletra,dgitoocaracterespecialocupaunbyteenlamemoriadelacomputadora.
Podemosobservarqueestemtododerepresentacindedatosesmuyineficienteenelaspectonumrico,yaqueenformato
binarionosbastaunsolobytepararepresentarnumerosde0a255,encambioconelcdigoASCIIunbytepuederepresentar
unicamenteundgito.
Debidoaestaineficiencia,elcdigoASCIIesprincipalmenteutilizadoenlamemoriapararepresentartexto.

MetodoBCD
BCDesunacrnimodeBinaryCodedDecimal.
Enestanotacinseutilizangruposde4bitspararepresentarcadadgitodecimaldel0al9.Conestemtodopodemos
representardosdgitosporbytedeinformacin.
AncuandoestemtodoesmuchomasprcticopararepresentacindenmerosenlamemoriaencomparacinalASCII,
http://www.wikiciencia.org/informatica/programacion/asm/index.php

3/41

27/11/2014

CursodeAssembler

todavasequedapordebajodelbinario,yaqueconunbyteenelmtodoBCDsolopodemosrepresentardgitosdel0al99,en
cambio,enformatobinariopodemosrepresentartodoslosdgitosdesde0hasta255.
Esteformatoesutilizadoprincipalmentepararepresentarnmerosmuygrandesenaplicacionesmercantilesyaquefacilitalas
operacionesconlosmismosevitandoerroresderedondeo.

Representacindepuntoflotante
Estarepresentacinestabasadaenlanotacincientfica,estoes,representarunnmeroendospartes:sumantisaysu
exponente.
Poniendocomoejemploelnmero1234000,podemosrepresentarlocomo1.123*10^6,enestaltimanotacinelexponente
nosindicaelnmerodeespaciosquehayquemoverelespaciohacialaderechaparaobtenerelresultadooriginal.
Encasodequeelexponentefueranegativonosestaraindicandoelnmerodeespaciosquehayquerecorrerelpuntodecimal
hacialaizquierdaparaobtenereloriginal.

Procesodecreacindeunprograma
Paralacreacindeunprogramaesnecesarioseguircincopasos:Diseodelalgoritmo,codificacindelmismo,sutraduccin
alenguajemquina,lapruebadelprogramayladepuracin.
Enlaetapadediseoseplanteaelproblemaaresolveryseproponelamejorsolucin,creandodiagramasesquemticos
utilizadosparaelmejorplanteamientodelasolucin.
Lacodificacindelprogramaconsisteenescribirelprogramaenalgnlenguajedeprogramacinenestecasoespecficoen
ensamblador,tomandocomobaselasolucinpropuestaenelpasoanterior.
Latraduccinallenguajemquinaeslacreacindelprogramaobjeto,estoes,elprogramaescritocomounasecuenciade
cerosyunosquepuedaserinterpretadoporelprocesador.
Lapruebadelprogramaconsisteenverificarqueelprogramafuncionesinerrores,osea,quehagaloquetienequehacer.
Laltimaetapaeslaeliminacindelasfallasdetectadasenelprogramadurantelafasedeprueba.Lacorreccindeunafalla
normalmenterequierelarepeticindelospasoscomenzandodesdeelprimerooelsegundo.
Paracrearunprogramaenensambladorexistendosopciones,laprimeraesutilizarelMASM(MacroAssembler,deMicrosoft),
ylasegundaesutilizareldebugger,enestaprimeraseccinutilizaremosesteltimoyaqueseencuentraencualquierPCcon
elsistemaoperativoMSDOS,locualloponealalcancedecualquierusuarioquetengaaccesoaunamquinaconestas
caracteristicas.
Debugsolopuedecreararchivosconextensin.COM,yporlascaractersticasdeestetipodeprogramasnopuedenser
mayoresde64kb,ademsdebencomenzareneldesplazamiento,offset,odireccindememoria0100Hdentrodelsegmento
especfico.

RegistrosdelaUCP
LaUCPtiene14registrosinternos,cadaunode16bits.Losprimeroscuatro,AX,BX,CX,yDXsonregistrosdeusogeneraly
tambienpuedenserutilizadoscomoregistrosde8bits,parautilizarloscomotalesesnecesarioreferirseaelloscomopor
ejemplo:AHyAL,quesonlosbytesalto(high)ybajo(low)delregistroAX.Estanomenclaturaesaplicabletambinalos
registrosBX,CXyDX.
Losregistrossonconocidosporsusnombresespecficos:
AXAcumulador
BXRegistrobase
CXRegistrocontador
DXRegistrodedatos
DSRegistrodelsegmentodedatos
ESRegistrodelsegmentoextra
SSRegistrodelsegmentodepila
CSRegistrodelsegmentodecdigo
BPRegistrodeapuntadoresbase
SIRegistrondicefuente
DIRegistrondicedestino
SPRegistrodelapuntadordelapila
http://www.wikiciencia.org/informatica/programacion/asm/index.php

4/41

27/11/2014

CursodeAssembler

IPRegistrodeapuntadordesiguienteinstruccin
FRegistrodebanderas
EsposiblevisualizarlosvaloresdelosregistrosinternosdelaUCPutilizandoelprogramaDebug.Paraempezaratrabajarcon
Debugdigiteenelpromptdelacomputadora:
C:\>Debug[Enter]
Enlasiguientelineaapareceraunguin,steeselindicadordelDebug,enestemomentosepuedenintroducirlas
instruccionesdelDebug.Utilizandoelcomando:
r[Enter]
SedesplegarantodosloscontenidosdelosregistrosinternosdelaUCPunaformaalternativademostrarlosesusarel
comando"r"utilizandocomoparametroelnombredelregistrocuyovalorsequieravisualizar.Porejemplo:
rbx
EstainstruccindesplegarunicamenteelcontenidodelregistroBXycambiaelindicadordelDebugde""a":"
Estandoaselpromptesposiblecambiarelvalordelregistroquesevisualiztecleandoelnuevovaloryacontinuacin
[Enter],osepuededejarelvaloranteriorpresionando[Enter]sintelclearningnvalor.
Esposiblecambiarelvalordelregistrodebanderas,ascomoutilizarlocomoestructuradecontrolennuestrosprogramas
comosevermasadelante.Cadabitdelregistrotieneunnombreysignificadoespecial,lalistadadaacontinuacindescribe
elvalordecadabit,tantoapagadocomoprendidoysurelacinconlasoperacionesdelprocesador:
Overflow
NV=nohaydesbordamiento
OV=slohay
Direction
UP=haciaadelante
DN=haciaatras
Interrupts
DI=desactivadas
EI=activadas
Sign
PL=positivo
NG=negativo
Zero
NZ=noescero
ZR=sloes
AuxiliaryCarry
NA=nohayacarreoauxiliar
AC=hayacarreoauxiliar
Parity
PO=paridadnon
PE=paridadpar
Carry
NC=nohayacarreo
CY=Slohay

Laestructuradelensamblador
http://www.wikiciencia.org/informatica/programacion/asm/index.php

5/41

27/11/2014

CursodeAssembler

Enellenguajeensambladorlaslineasdecdigoconstandedospartes,laprimeraeselnombredelainstruccinquesevaa
ejecutarylasegundasonlosparmetrosdelcomandouoperandos.Porejemplo:
addahbh
Aqu"add"eselcomandoaejecutar(enestecasounaadicin)ytanto"ah"como"bh"sonlosparmetros.
Elnombredelasinstruccionesenestelenguajeestaformadopordos,tresocuatroletras.aestasinstruccionestambiense
lesllamanombresmnemnicosocdigosdeoperacin,yaquerepresentanalgunafuncinquehabrderealizarelprocesador.
Existenalgunoscomandosquenorequierenparametrosparasuoperacin,ascomootrosquerequierensolounparmetro.
Algunasvecesseutilizarnlasinstruccionescomosigue:
addal,[170]
Loscorchetesenelsegundoparmetronosindicanquevamosatrabajarconelcontenidodelacasilladememorianmero
170ynoconelvalor170,astoseleconocecomodireccionamientodirecto.

Nuestroprimerprograma
Vamosacrearunprogramaquesirvaparailustrarloquehemosestadoviendo,loqueharemosserunasumadedosvalores
queintroduciremosdirectamenteenelprograma:
ElprimerpasoesiniciarelDebug,estepasoconsisteunicamenteentecleardebug[Enter]enelpromptdelsistemaoperativo.
ParaensamblarunprogramaenelDebugseutilizaelcomando"a"(assemble)cuandoseutilizaestecomandoselepuede
darcomoparametroladireccindondesedeseaqueseinicieelensamblado,siseomiteelparametroelensambladose
iniciarenlalocalidadespecificadaporCS:IP,usualmente0100H,queeslalocalidaddondedebeniniciarlosprogramascon
extensin.COM,yseralalocalidadqueutilizaremosdebidoaquedebugsolopuedecrearestetipoespecficodeprogramas.
Aunqueenestemomentonoesnecesariodarleunparametroalcomando"a"esrecomendablehacerloparaevitarproblemas
unavezquesehagausodelosregistrosCS:IP,porlotantotecleamos:
a0100[Enter]
Alhacerstoaparecerenlapantallaalgocomo:0C1B:0100yelcursorseposicionaaladerechadeestosnmeros,ntese
quelosprimeroscuatrodgitos(ensistemahexagesimal)puedenserdiferentes,perolosltimoscuatrodebenser0100,ya
queesladireccinqueindicamoscomoinicio.Ahorapodemosintroducirlasinstrucciones:
0C1B:0100movax,0002colocaelvalor0002enelregistroax
0C1B:0103movbx,0004colocaelvalor0004enelregistrobx
0C1B:0106addax,bxleadicionaalcontenidodeaxelcontenidodebx
0C1B:0108int20provocalaterminacindelprograma.
0C1B:010A
Noesnecesarioescribirloscomentariosquevandespuesdel"".Unavezdigitadoelltimocomando,int20,seleda[Enter]
sinescribirnadamas,paravolveralpromptdeldebuger.
Laltimalineaescritanoespropiamenteunainstruccindeensamblador,esunallamadaaunainterrupcindelsistema
operativo,estasinterrupcionesserntratadasmasafondoenuncaptuloposterior,porelmomentosoloesnecesariosaber
quenosahorranungrannmerodelineasysonmuytilesparaaccesarafuncionesdelsistemaoperativo.
Paraejecutarelprogramaqueescribimosseutlizaelcomando"g",alutilizarloveremosqueapareceunmensajequedice:
"Programterminatednormally".Naturalmenteconunmensajecomostenopodemosestarsegurosqueelprogramahaya
hecholasuma,peroexisteunaformasencilladeverificarlo,utilizandoelcomando"r"delDebugpodemosverloscontenidos
detodoslosregistrosdelprocesador,simplementeteclee:
r[Enter]
Apareceraenpantallacadaregistroconsurespectivovaloractual:
AX=0006BX=0004CX=0000DX=0000SP=FFEEBP=0000SI=0000DI=0000
DS=0C1BES=0C1BSS=0C1BCS=0C1BIP=010ANVUPEIPLNZNAPONC
0C1B:010A0FDBoF
Existelaposibilidaddequelosregistroscontenganvaloresdiferentes,peroAXyBXdebenserlosmismos,yaquesonlos
queacabamosdemodificar.
Otraformadeverlosvalores,mientrasseejecutaelprogramaesutilizandocomoparmetropara"g"ladireccindonde
http://www.wikiciencia.org/informatica/programacion/asm/index.php

6/41

27/11/2014

CursodeAssembler

queremosqueterminelaejecucinymuestrelosvaloresdelosregistros,enestecasosera:g108,estainstruccinejecutael
programa,sedetieneenladireccin108ymuestraloscontenidosdelosregistros.
Tambinsepuedellevarunseguimientodeloquepasaenlosregistrosutilizandoelcomando"t"(trace),lafuncindeeste
comandoesejecutarlineaporlinealoqueseensamblmostrandocadavezloscontenidosdelosregitros.
ParasalirdelDebugseutilizaelcomando"q"(quit).

Guardarycargarlosprogramas
Noseraprcticotenerquedigitartodounprogramacadavezquesenecesite,paraevitaresoesposibleguardarunprograma
eneldisco,conlaenormeventajadequeyaensambladonosernecesariocorrerdenuevodebugparaejecutarlo.
Lospasosaseguirparaguardarunprogramayaalmacenadoenlamemoriason:
Obtenerlalongituddelprogramarestandoladireccinfinaldeladireccininicial,naturalmenteensistemahexadecimal.
Darleunnombrealprogramayextensin
PonerlalongituddelprogramaenelregistroCX
OrdenaraDebugqueescribaelprogramaeneldisco.
Utilizandocomoejemploelprogramadelcaptuloanteriortendremosunaideamasclaradecomollevarestospasos:
Alterminardeensamblarelprogramaseveraas:
0C1B:0100movax,0002
0C1B:0103movbx,0004
0C1B:0106addax,bx
0C1B:0108int20
0C1B:010A
h10a100
020a000a
nprueba.com
rcx
CX0000
:000a
w
Writing000Abytes
Paraobtenerlalongituddeunprogramaseutilizaelcomando"h",elcualnosmuestralasumayrestadedosnmerosen
hexadecimal.Paraobtenerlalongituddelnuestroleproporcionamoscomoparmetroselvalordeladireccinfinaldenuestro
programa(10A)yelvalordeladireccininicial(100).Elprimerresultadoquenosmuestraelcomandoeslasumadelos
parmetrosyelsegundoeslaresta.
Elcomando"n"nospermiteponerunnombrealprograma.
Elcomando"rcx"nospermitecambiarelcontenidodelregistroCXalvalorqueobtuvimosdeltamaodelarchivocon"h",en
estecaso000a,yaquenosinteresaelresultadodelarestadeladireccininicialaladireccinfinal.
Porltimoelcomandowescribenuestroprogramaeneldisco,indicandonoscuantosbytesescribi.
Paracargarunarchivoyaguardadosonnecesariosdospasos:
Proporcionarelnombredelarchivoquesecargar.
Cargarloutilizandoelcomando"l"(load).
Paraobtenerelresultadocorrectodelossiguientespasosesnecesarioquepreviamentesehayacreadoelprogramaanterior.
DentrodelDebugescribimoslosiguiente:
nprueba.com
http://www.wikiciencia.org/informatica/programacion/asm/index.php

7/41

27/11/2014

CursodeAssembler

l
u100109
0C3D:0100B80200MOVAX,0002
0C3D:0103BB0400MOVBX,0004
0C3D:010601D8ADDAX,BX
0C3D:0108CD20INT20
Elltimocomando,"u",seutilizaparaverificarqueelprogramasecargenmemoria,loquehaceesdesensamblarelcdigoy
mostrarloyadesensamblado.LosparmetrosleindicanaDebugdesdedondeyhastadondedesensamblar.
Debugsiemprecargalosprogramasenmemoriaenladireccin100H,amenosqueseleindiquealgunaotra.

Condiciones,ciclosybifurcaciones
Estasestructuras,oformasdecontrolledanalamquinaunciertogradodedesicinbasadoenlainformacinquerecibe.
Laformamassencilladecomprenderestetemaespormediodeejemplos.
Vamosacreartresprogramasquehaganlomismo:desplegarunnmerodeterminadodevecesunacadenadecaracteresen
lapantalla.
a100
0C1B:0100jmp125brincaaladireccin125H
0C1B:0102[Enter]
e102'Cadenaavisualizar15veces'0d0a'$'
a125
0C1B:0125MOVCX,000Fvecesquesedesplegaralacadena
0C1B:0128MOVDX,0102copiacadenaalregistroDX
0C1B:012BMOVAH,09copiavalor09alregistroAH
0C1B:012DINT21despliegacadena
0C1B:012FLOOP012DsiCX>0brincaa012D
0C1B:0131INT20terminaelprograma.
Pormediodelcomando"e"esposibleintroducirunacadenadecaracteresenunadeterminadalocalidaddememoria,dada
comoparmetro,lacadenaseintroduceentrecomillas,lesigueunespacio,luegoelvalorhexadecimaldelretornodecarro,un
espacio,elvalordelineanuevayporltimoelsmbolo'$'queelensambladorinterpretacomofinaldelacadena.La
interrupcin21utilizaelvaloralmacenadoenelregistroAHparaejecutarunadeterminadafuncin,enestecasomostrarla
cadenaenpantalla,lacadenaquemuestraeslaqueestalmacenadaenelregistroDX.LainstruccinLOOPdecrementa
automaticamenteelregistroCXenunoysinohallegadoelvalordeesteregistroacerobrincaalacasillaindicadacomo
parmetro,locualcreauncicloqueserepiteelnmerodevecesespecificadoporelvalordeCX.Lainterrupcin20terminala
ejecucindelprograma.
OtraformaderealizarlamismafuncinperosinutilizarelcomandoLOOPeslasiguiente:
a100
0C1B:0100jmp125brincaaladireccin125H
0C1B:0102[Enter]
e102'Cadenaavisualizar15veces'0d0a'$'
a125
0C1B:0125MOVBX,000Fvecesquesedesplegaralacadena
0C1B:0128MOVDX,0102copiacadenaalregistroDX
0C1B:012BMOVAH,09copiavalor09alregistroAH
0C1B:012DINT21despliegacadena
http://www.wikiciencia.org/informatica/programacion/asm/index.php

8/41

27/11/2014

CursodeAssembler

0C1B:012FDECBXdecrementaen1aBX
0C1B:0130JNZ012DsiBXesdiferentea0brincaa012D
0C1B:0132INT20terminaelprograma.
EnestecasoseutilizaelregistroBXcomocontadorparaelprograma,ypormediodelainstruccin"DEC"sedisminuyesu
valoren1.Lainstruccin"JNZ"verificasielvalordeBesdiferentea0,estoconbaseenlabanderaNZ,encasoafirmativo
brincahacialadireccin012D.Encasocontrariocontinalaejecucinnormaldelprogramayporlotantosetermina.
UnatimavariantedelprogramaesutilizandodenuevoaCXcomocontador,peroenlugardeutilizarLOOPutilizaremos
decrementosaCXycomparacindeCXa0.
a100
0C1B:0100jmp125brincaaladireccin125H
0C1B:0102[Enter]
e102'Cadenaavisualizar15veces'0d0a'$'
a125
0C1B:0125MOVDX,0102copiacadenaalregistroDX
0C1B:0128MOVCX,000Fvecesquesedesplegaralacadena
0C1B:012BMOVAH,09copiavalor09alregistroAH
0C1B:012DINT21despliegacadena
0C1B:012FDECCXdecrementaen1aCX
0C1B:0130JCXZ0134siCXesiguala0brincaa0134
0C1B:0132JMP012Dbrincaaladirecci&oauten012D
0C1B:0134INT20terminaelprograma
EnesteejemploseuslainstruccinJCXZparacontrolarlacondicindesalto,elsignificadodetalfuncines:brincasiCX=0
Eltipodecontrolautilizardependerdelasnecesidadesdeprogramacinendeterminadomomento.

Interrupciones
Definicindeinterrupcin:
UnainterrupcinesunainstruccinquedetienelaejecucindeunprogramaparapermitirelusodelaUCPaunproceso
prioritario.Unavezconcluidoesteltimoprocesosedevuelveelcontrolalaaplicacinanterior.
Porejemplo,cuandoestamostrabajandoconunprocesadordepalabrasyenesemomentollegaunavisodeunodelos
puertosdecomunicaciones,sedetienetemporalmentelaaplicacinqueestabamosutilizandoparapermitirelusodel
procesadoralmanejodelainformacinqueestllegandoenesemomento.Unavezterminadalatransferenciadeinformacin
sereanudanlasfuncionesnormalesdelprocesadordepalabras.
Lasinterrupcionesocurrenmuyseguido,sencillamentelainterrupcinqueactualizalahoradeldaocurreaproximadamente18
vecesporsegundo.Paralograradministrartodasestasinterrupciones,lacomputadoracuentaconunespaciodememoria,
llamadomemoriabaja,dondesealmacenanlasdireccionesdeciertalocalidaddememoriadondeseencuentranunjuegode
instruccionesquelaUCPejecutarparadespuesregresaralaaplicacinenproceso.
Enlosprogramasanterioreshicimosusodelainterrupcionnmero20Hparaterminarlaejecucindenuestrosprogramas,
ahorautilizaremosotrainterrupcinparamostrarinformacinenpantalla:
UtilizandoDebugtecleamos:
a100
2C1B:0100JMP011D
2C1B:0102[ENTER]
E102'Hola,comoestas.'0D0A'$'
A011D
2C1B:011DMOVDX,0102
http://www.wikiciencia.org/informatica/programacion/asm/index.php

9/41

27/11/2014

CursodeAssembler

2C1B:0120MOVAH,09
2C1B:0122INT21
2C1B:0123INT20
Enesteprogramalainterrupcin21HmandaalmonitorlacadenalocalizadaenladireccinalaqueapuntaelregistroDX.
ElvalorqueseledaaAHdeterminacualdelasopcionesdelainterrupcin21Hserautilizada,yaqueestainterrupcincuenta
convariasopciones.
Elmanejodirectodeinterrupcionesesunadelaspartesmasfuertesdellenguajeensamblador,yaqueconellasesposible
controlareficientementetodoslosdispositivosinternosyexternosdeunacomputadoragraciasalcompletocontrolquese
tienesobreoperacionesdeentradaysalida.

Softwarenecesario
Parapodercrearunprogramaserequierenvariasherramientas:
Primerouneditorparacrearelprogramafuente.
Segundouncompiladorquenoesmasqueunprogramaque"traduce"elprogramafuenteaunprogramaobjeto.
Ytercerounenlazadorolinker,quegenereelprogramaejecutableapartirdelprogramaobjeto.
Eleditorpuedesercualquiereditordetextosquesetengaalamano,comocompiladorutilizaremoselMASM(macro
ensambladordeMicrosoft)yaqueeselmascomn,ycomoenlazadorutilizaremoselprogramalink.
LaextensinusadaparaqueMASMreconozcalosprogramasfuenteenensambladores.ASMunaveztraducidoelprograma
fuente,elMASMcreaunarchivoconlaextensin.OBJ,estearchivocontieneun"formatointermedio"delprograma,llamado
asporqueannoesejecutableperotampocoesyaunprogramaenlenguajefuente.Elenlazadorgenera,apartirdeun
archivo.OBJolacombinacindevariosdeestosarchivos,unprogramaexecutable,cuyaextensinesusualmente.EXE
aunquetambinpuedeser.COM,dependiendodelaformaenqueseensambl.
Estetutorialdescribelaformadetrabajarconlaversin5.0oposteriordelMASM,ladiferenciaprincipaldeestaversincon
otrasanterioreseslaformaenquesedeclaranlossegmentosdecdigo,datosylapila,perolaestructuradeprogramacines
lamisma.

UtilizacindelMASM
UnavezquesecreelprogramaobjetosedebepasaralMASMparacrearelcdigointermedio,elcualquedaguardadoenun
archivoconextensin.OBJ.Elcomandopararealizarestoes:
MASMnombre_archivo[Enter]
DondeNombre_Archivoeselnombredelprogramafuenteconextensin.ASMquesevaatraducir.Elpuntoycomautilizados
despuesdelnombredelarchivoleindicanalmacroensambladorquegeneredirectamenteelcdigointermedio,deomitirse
estecaracterelMASMpedirelnombredelarchivoatraducir,elnombredelarchivoquesegenerarascomoopcionesde
listadodeinformacinquepuedeproporcionareltraductor.
EsposibleejecutarelMASMutilizandoparmetrosparaobtenerunfindeterminado,todalalistadelosmismosseencuentra
enelmanualdelprograma.SolorecordarenestetutoriallaformadepasardichosparmetrosalMASM:
Todoparmetrovadespuesdelsimbolo"/".Esposibleutilizarvariosparmetrosalavez.Unaveztecleadostodoslos
parmetrosseescribeelnombredelarchivoaensamblar.Porejemplo,siqueremosqueelMASMensambleunprograma
llamadoprueba,yademasdeseamosquedespliegeelnmerodelineasfuenteysmbolosprocesados(esolorealizaconel
parametro/v),ysiocurreunerrorquenosdigaenquelineaocurri(conelparametro/z),entoncestecleamos:
MASM/v/zprueba

Usodelenlazador(linker)
ElMASMunicamentepuedecrearprogramasenformato.OBJ,loscualesnosonejecutablesporsisolos,esnecesarioun
enlazadorquegenereelcdigoejecutable.
LautilizacindelenlazadoresmuyparecidaaladelMASM,unicamentesetecleaenelindicadordelDOS:
LINKNombre_Archivo
DondeNombre_Archivoeselnombredelprogramaintermedio(OBJ).Estogeneraradirectamenteunarchivoconelnombredel
programaintermedioylaextensin.EXE

Formatointernodeunprograma
Parapodercomunicarnosencualquierlenguaje,incluyendoloslenguajesdeprogramacin,esnecesarioseguirunconjuntode
reglas,delocontrarionopodramosexpresarloquedeseamos.
http://www.wikiciencia.org/informatica/programacion/asm/index.php

10/41

27/11/2014

CursodeAssembler

Enesteapartadoveremosalgunasdelasreglasquedebemosseguirparaescribirunprogramaenlenguajeensamblador,
enfocandonosalaformadeescribirlasinstruccionesparaqueelensambladorseacapazdeinterpretarlas.
Basicamenteelformatodeunalineadecdigoenlenguajeensambladorconstadecuatropartes:
Etiqueta,variableoconstante:Nosiempreesdefinida,sisedefineesnecesarioutilizarseparadoresparadiferenciarladelas
otraspartes,usualmenteespacios,oalgnsmboloespecial.
Directivaoinstruccin:eselnombreconelqueseconocealainstruccinquequeremosqueseejecute.
Operando(s):lamayoradelasinstruccionesenensambladortrabajancondosoperandos,aunquehayinstruccionesque
funcionansoloconuno.Elprimeronormalmenteeseloperandodestino,queeseldepsitodelresultadodealgunaoperacin
yelsegundoeseloperandofuente,quellevaeldatoqueserprocesado.Losoperandosseseparanunodelotropormediode
unacoma",".
Comentario:comosunombreloindicaestansolounescritoinformativo,usadoprincipalmenteparaexplicarqueesthaciendo
elprogramaendeterminadalineaseseparadelasotraspartespormediodeunpuntoycoma"".Estapartenoesnecesaria
enelprograma,peronosayudaadepurarelprogramaencasodeerroresomodificaciones.
Comoejemplopodemosverunalineadeunprogramaescritoenensamblador:
Etiq1:MOVAX,001AHInicializaAXconelvalor001A
Aqutenemoslaetiqueta"Etiq1"(Identificablecomoetiquetaporelsmbolofinal":"),lainstruccin"MOV",ylosoperandos
"AX"comodestinoy"001A"comofuente,ademasdelcomentarioquesiguedespuesdel"".
Unejemplodeunadeclaracindeunaconstanteestadadopor:
UNOEQU0001H
Donde"UNO"eselnombredelaconstantequedefinimos,"EQU"esladirectivautilizadaparausara"UNO"comoconstante,
y"0001H"eseloperando,queenestecasoseraelvalorqueguardeUNO.

FormatoExternodeunprograma
Ademasdedefinirciertasreglasparaqueelensambladorpuedaentenderunainstruccinesnecesariodarleciertainformacin
delosrecursosquesevanautilizar,comoporejemplolossegmentosdememoriaquesevanautilizar,datosinicialesdel
programaytambindondeiniciaydondeterminanuestrocdigo.
Unprogramasencillopuedeserelsiguiente:
.MODELSMALL
.CODE
Programa:
MOVAX,4C00H
INT21H
.STACK
ENDPrograma
Elprogramarealmentenohacenada,unicamentecolocaelvalor4C00HenelregistroAX,paraquelainterrupcin21Htermine
elprograma,peronosdaunaideadelformatoexternoenunprogramadeensamblador.
Ladirectiva.MODELdefineeltipodememoriaqueseutilizarladirectiva.CODEnosindicaqueloqueestaacontinuacin
esnuestroprogramalaetiquetaProgramaindicaalensambladoreliniciodelprogramaladirectiva.STACKlepideal
ensambladorquereserveunespaciodememoriaparalasoperacionesdelapilalainstruccinENDProgramamarcaelfinal
delprograma.

Ejemploprcticodeunprograma
Aquseejemplificarunprogramaqueescribaunacadenaenpantalla:
.MODELSMALL
.CODE
Programa:
MOVAX,@DATA
MOVDS,AX
http://www.wikiciencia.org/informatica/programacion/asm/index.php

11/41

27/11/2014

CursodeAssembler

MOVDX,OffsetTexto
MOVAH,9
INT21H
MOVAX,4C00H
INT21H
.DATA
TextoDB'Mensajeenpantalla.$'
.STACK
ENDPrograma
Losprimerospasossonigualesalosdelprogramaanterior:sedefineelmodelodememoria,seindicadondeiniciaelcdigo
delprogramayendondecomienzanlasinstrucciones.
Acontinuacinsecoloca@DATAenelregistroAXparadespuespasarloalregistroDSyaquenosepuedecopiar
directamenteunaconstanteaunregistrodesegmento.Elcontenidode@DATAeselnmerodelsegmentoqueserutilizado
paralosdatos.LuegoseguardaenelregistroDXunvalordadopor"OffsetTexto"quenosdaladireccindondeseencuentra
lacadenadecaracteresenelsegmentodedatos.Luegoutilizalaopcin9(DadaporelvalordeAH)delainterrupcin21H
paradesplegarlacadenaposicionadaenladireccinquecontieneDX.Porltimoutilizalaopcin4CHdelainterrupcin21H
paraterminarlaejecucindelprograma(aunquecargamosalregistroAXelvalor4C00Hlainterrupcin21Hsolotomacomo
opcinelcontenidodelregistroAH).
Ladirectiva.DATAleindicaalensambladorqueloqueestescritoacontinuacindebealmacenarloenelsegmentode
memoriadestinadoalosdatos.LadirectivaDBesutilizadaparaDefinirBytes,stoes,asignaraciertoidentificador(eneste
caso"Texto")unvalor,yaseaunaconstanteounacadenadecaracteres,enesteltimocasodeberestarentrecomillas
sencillas'yterminarconelsimbolo"$".

Segmentos
Laarquitecturadelosprocesadoresx86obligaalusodesegmentosdememoriaparamanejarlainformacin,eltamaode
estossegmentosesde64kb.
Larazndeserdeestossegmentosesque,considerandoqueeltamaomximodeunnmeroquepuedemanejarel
procesadorestadadoporunapalabrade16bitsoregistro,noseraposibleaccesaramsde65536localidadesdememoria
utilizandounosolodeestosregistros,ahora,sisedividelamemoriadelapcengrupososegmentos,cadaunode65536
localidades,yutilizamosunadireccinenunregistroexclusivoparalocalizarcadasegmento,yentoncescadadireccinde
unacasillaespecficalaformamoscondosregistros,nosesposibleaccesaraunacantidadde4294967296bytesde
memoria,locuales,enlaactualidad,msmemoriadelaqueveremosinstaladaenunaPC.
Paraqueelensambladorpuedamanejarlosdatosesnecesarioquecadadatooinstruccinseencuentrenlocalizadosenel
reaquecorrespondeasusrespectivossegmentos.Elensambladoraccesaaestainformacintomandoencuentala
localizacindelsegmento,dadaporlosregistrosDS,ES,SSyCS,ydentrodedichoregistroladireccindeldatoespecfico.
EsporelloquecuandocreamosunprogramaempleandoelDebugencadalineaquevamosensamblandoaparcealgoparecido
alosiguiente:
1CB0:0102MOVAX,BX
Endondeelprimernmero,1CB0,correspondealsegmentodememoriaqueseestutilizando,elsegundoserefierelala
direccindentrodedichosegmento,yacontinuacinaparecenlasinstruccionesquesealmacenaranapartirdeesadireccin.
Laformadeindicarlealensambladorconcualesdelossegmentossevaatrabajarespormediodelasdirectivas.CODE,
.DATAy.STACK.
Elensambladorseencargadeajustareltamaodelossegmentostomandocomobaseelnmerodebytesquenecesitacada
instruccinquevaensamblando,yaqueseraundesperdiciodememoriautilizarlossegmentoscompletos.Porejemplo,siun
programaunicamentenecesita10kbparaalmacenarlosdatos,elsegmentodedatosunicamenteserade10kbynodelos
64kbquepuedemanejar.

Tabladesmbolos
Acadaunadelaspartesdeunalineadecdigoenensambladorseleconocecomotoken,porejemploenlalineadecdigo
MOVAX,Var
tenemostrestokens,lainstruccinMOV,eloperandoAX,yeloperandoVAR.Elensambladorloquehaceparagenerarel
cdigoOBJesleercadaunodelostokensybuscarloenunatablainternade"equivalencias"conocidacomotabladepalabras
reservadas,queesdondeseencuentrantodoslossignificadosdelosmnemnicosqueutilizamoscomoinstrucciones.

http://www.wikiciencia.org/informatica/programacion/asm/index.php

12/41

27/11/2014

CursodeAssembler

Siguiendoesteproceso,elensambladorleeMOV,lobuscaensutablayalencontrarloloidentificacomounainstruccindel
procesador,asmismoleeAXyloreconocecomounregistrodelprocesador,peroalmomentodebuscareltokenVarenla
tabladepalabrasreservadasnoloencuentrayentonceslobuscaenlatabladesmbolosqueesunatabladondese
encuentranlosnombresdelasvariables,constantesyetiquetasutilizadasenelprogramadondeseincluyesudireccinen
memoriayeltipodedatosquecontiene.
Algunasveceselensambladorseencuentraconalgntokennodefinidoenelprograma,loquehaceenestoscasosesdar
unasegundapasadaporelprogramafuenteparaverificartodaslasreferenciasaesesmboloycolocarloenlatablade
smbolos.Existensmbolosquenolosvaaencontraryaquenopertenecenaesesegmentoyelprogramanosabeenque
partedelamemoriaseencontraradichosegmento,enestemomentoentraenaccinelenlazador,elcualcrealaestructura
quenecesitaelcargadorparaqueelsegmentoyeltokenseandefinidoscuandosecargueelprogramayantesdequeel
mismoseaejecutado.

Movimientodedatos
EntodoprogramaesnecesariomoverdatosenlamemoriayenlosregistrosdelaUCPexistendiversasformasdehacer
esto:puedecopiardatosdelamemoriaaalgnregistro,deregistroaregistro,deunregistroaunapila,delapilaaunregistro,
transmitirdatoshaciadispositivosexternosascomorecibirdatosdedichosdispositivos.
Estemovimientodedatosestsujetoareglasyrestricciones.Algunasdeellassonlasquesecitanacontinuacin.
Noesposiblemoverdatosdeunalocalidaddememoriaaotradirectamente,esnecesarioprimeromoverlosdatosdela
localidadorigenhaciaunregistroyluegodelregistroalalocalidaddestino.
Nosepuedemoverunaconstantedirectamenteaunregistrodesegmentos,primerosedebemoveraunregistrodelaUCP.
Esposiblemoverbloquesdedatospormediodelasinstruccionesmovs,quecopiaunacadenadebytesopalabrasmovsb
quecopianbytesdeunalocalidadaotraymovswcopianpalabrasdeunalocalidadaotra.Lasdosltimasinstrucciones
tomanlosvaloresdelasdireccionesdefinidasporDS:SIcomogrupodedatosamoveryES:DIcomonuevalocalizacinde
losdatos.
Paramoverlosdatostambinexistenlasestructurasllamadaspilas,enestetipodeestructuraslosdatosseintroducenconla
instruccinpushyseextraenconlainstruccinpop
Enunapilaelprimerdatointroducidoeselltimoquepodemossacar,estoes,siennuestroprogramautilizamoslas
instrucciones:
PUSHAX
PUSHBX
PUSHCX
Paradevolverlosvalorescorrectosacadaregistroalmomentodesacarlosdelapilaesnecesariohacerloenelsiguiente
orden:
POPCX
POPBX
POPAX
Paralacomunicacincondispositivosexternosseutilizanelcomandooutparamandarinformacinaunpuertoyelcomando
inparaleerinformacinrecibidadesdealgunpuerto.
Lasintaxisdelcomandooutes:
OUTDX,AX
DondeDXcontieneelvalordelpuertoqueseutilizarparalacomunicacinyAXcontienelainformacinquesemandar.
Lasintaxisdelcomandoines:
INAX,DX
DondeAXeselregistrodondeseguardarlainformacinquellegueyDXcontieneladireccindelpuertopordondellegarla
informacin

Operacioneslgicasyaritmticas
Lasinstruccionesdelasoperacioneslgicasson:and,not,oryxor,stastrabajansobrelosbitsdesusoperandos.
Paraverificarelresultadodeoperacionesrecurrimosalasinstruccionescmpytest.
Lasinstruccionesutilizadasparalasoperacionesalgebraicasson:parasumaradd,pararestarsub,paramultiplicarmulypara
dividirdiv.
http://www.wikiciencia.org/informatica/programacion/asm/index.php

13/41

27/11/2014

CursodeAssembler

Casitodaslasinstruccionesdecomparacinestnbasadasenlainformacincontenidaenelregistrodebanderas.
Normalmentelasbanderasdeesteregistroquepuedenserdirectamentemanipuladasporelprogramadorsonlabanderade
direccindedatosDF,usadaparadefinirlasoperacionessobrecadenas.Otraquetambinpuedesermanipuladaesla
banderaIFpormediodelasinstruccionesstiycli,paraactivarydesactivarrespectivamentelasinterrupciones.

Saltos,ciclosyprocedimientos
Lossaltosincondicionalesenunprogramaescritoenlenguajeensambladorestndadosporlainstruccinjmp,unsaltoes
alterarelflujodelaejecucindeunprogramaenviandoelcontrolaladireccinindicada.
Unciclo,conocidotambincomoiteracin,eslarepeticindeunprocesounciertonmerodeveceshastaquealguna
condicinsecumpla.Enestosciclosseutilizanlosbrincos"condicionales"basadosenelestadodelasbanderas.Por
ejemplolainstruccinjnzquesaltasolamentesielresultadodeunaoperacinesdiferentedeceroylainstruccinjzquesalta
sielresultadodelaoperacinescero.
Porltimotenemoslosprocedimientosorutinas,quesonunaseriedepasosqueseusarnrepetidamenteenelprogramayen
lugardeescribirtodoelconjuntodepasosunicamenteselesllamapormediodelainstruccincall.
UnprocedimientoenensambladoresaquelqueinicieconlapalabraProcytermineconlapalabraret.
RealmenteloquesucedeconelusodelainstruccincallesqueseguardaenlapilaelregistroIPysecargaladireccindel
procedimientoenelmismoregistro,conociendoqueIPcontienelalocalizacindelasiguienteinstruccinqueejecutarala
UCP,entoncespodemosdarnoscuentaquesedesvaelflujodelprogramahacialadireccinespecificadaenesteregistro.Al
momentoenquesellegaalapalabraretsesacadelapilaelvalordeIPconloquesedevuelveelcontrolalpuntodel
programadondeseinvocalprocedimiento.
Esposiblellamaraunprocedimientoqueseencuentreubicadoenotrosegmento,parastoelcontenidodeCS(quenosindica
quesegmentoseestutilizando)esempujadotambinenlapila.

InstruccinMOV
Propsito:Transferenciadedatosentreceldasdememoria,registrosyacumulador.
Sintaxis:
MOVDestino,Fuente
DondeDestinoesellugaradondesemovernlosdatosyfuenteesellugardondeseencuentrandichosdatos.
Losdiferentesmovimientosdedatospermitidosparaestainstruccinson:
Destino:memoria.Fuente:acumulador
Destino:acumulador.Fuente:memoria
Destino:registrodesegmento.Fuente:memoria/registro
Destino:memoria/registro.Fuente:registrodesegmento
Destino:registro.Fuente:registro
Destino:registro.Fuente:memoria
Destino:memoria.Fuente:registro
Destino:registro.Fuente:datoinmediato
Destino:memoria.Fuente:datoinmediato
Ejemplo:
MOVAX,0006h
MOVBX,AX
MOVAX,4C00h
INT21H
Estepequeoprogramamueveelvalor0006HalregistroAX,luegomueveelcontenidodeAX(0006h)alregistroBX,por
ltimomueveelvalor4C00halregistroAXparaterminarlaejecucinconlaopcin4Cdelainterrupcin21h.

InstruccinMOVS(MOVSB)(MOVSW)
Propsito:Movercadenasdebytesopalabrasdesdelafuente,direccionadaporSI,hastaeldestinodireccionadoporDI.

http://www.wikiciencia.org/informatica/programacion/asm/index.php

14/41

27/11/2014

CursodeAssembler

Sintaxis:
MOVS
EstecomandononecesitaparametrosyaquetomacomodireccinfuenteelcontenidodelregistroSIycomodestinoel
contenidodeDI.Lasecuenciadeinstruccionessiguienteilustranesto:
MOVSI,OFFSETVAR1
MOVDI,OFFSETVAR2
MOVS
PrimeroinicializamoslosvaloresdeSIyDIconlasdireccionesdelasvariablesVAR1yVAR2respectivamente,despuesal
ejecutarMOVSsecopiaelcontenidodeVAR1aVAR2.
LoscomandosMOVSByMOVSWseutilizandelamismaformaqueMOVS,elprimeromueveunbyteyelsegundouna
palabra.

InstruccinLODS(LODSB)(LODSW)
Propsito:Cargarcadenasdeunbyteopalabraalacumulador.
Sintaxis:
LODS
EstainstruccintomalacadenaqueseencuentreenladireccinespecificadaporSI,lacargaalregistroAL(oAX)ysumao
resta1(segunelestadodeDF)aSIsilatransferenciaesdebyteso2silatransferenciaesdepalabras.
MOVSI,OFFSETVAR1
LODS
LaprimerlineacargaladireccindeVAR1enSIylasegundalineallevaelcontenidodeesalocalidadalregistroAL.
LoscomandosLODSByLODSWseutilizandelamismaforma,elprimerocargaunbyteyelsegundounapalabra(utilizael
registrocompletoAX).

InstruccinLAHF
Propsito:TransfierealregistroAHelcontenidodelasbanderas
Sintaxis:
LAHF
Estainstruccinestilparaverificarelestadodelasbanderasdurantelaejecucindenuestroprograma.
Lasbanderasquedanenelsiguienteordendentrodelregistro:
SFZF?AF?PF?CF
Elsimbolo"?"significaqueenesosbitshabr.unvalorindefinido.

InstruccinLDS
Propsito:Cargarelregistrodelsegmentodedatos
Sintaxis:
LDSdestino,fuente
Eloperandofuentedebeserunapalabradobleenmemoria.Lapalabraasociadaconladireccinmasgrandeestransferidaa
DS,oseaquesetomacomoladireccindelsegmento.Lapalabraasociadaconladireccinmenoresladireccindel
desplazamientoysedepositaenelregistrosealadocomodestino.

InstruccinLEA
Propsito:Cargaladireccindeloperandofuente.
Sintaxis:
LEAdestino,fuente
Eloperandofuentedebeestarubicadoenmemoria,ysecolocasudesplazamientoenelregistrondiceoapuntador
http://www.wikiciencia.org/informatica/programacion/asm/index.php

15/41

27/11/2014

CursodeAssembler

especificadoendestino.
Parailustrarunadelasfacilidadesquetenemosconestecomandopongamosunaequivalencia:
MOVSI,OFFSETVAR1
Equivalea:
LEASI,VAR1
Esmuyprobablequeparaelprogramadorseamassencillocrearprogramasextensosutilizandoesteltimoformato.

InstruccinLES
Propsito:Cargaelregistrodelsegmentoextra
Sintaxis:
LESdestino,fuente
Eloperandofuentedebeserunoperandoenmemoriadepalabradoble.Elcontenidodelapalabraconladireccinmayorse
interpretacomoladireccindelsegmentoysecolocaenES.Lapalabraconladireccinmenoresladireccindel
desplazamientoysecolocaenelregistroespecificadoenelparmetrodestino.

InstruccinPOP
Propsito:Recuperaundatodelapila
Sintaxis:
POPdestino
Estainstruccintransfiereelltimovaloralmacenadoenlapilaaloperandodestino,despusincrementaendoselregistroSP.
Esteincrementosedebeaquelapilavacreciendodesdeladireccinmasaltadememoriadelsegmentohacialamasbaja,y
lapilasolotrabajaconpalabras(2bytes),entoncesalincrementarendoselregistroSPrealmenteseleestarestandodosal
tamaorealdelapila.

InstruccinPOPF
Propsito:Extraelasbanderasalmacenadasenlapila.
Sintaxis:
POPF
Estecomandotransfierebitsdelapalabraalmacenadaenlapartesuperiordelapilahaciaelregistrodebanderas.
Laformadetransferenciaeslasiguiente:
BITBANDERA
0CF
2PF
4AF
6ZF
7SF
8TF
9IF
10DF
11OF
EstaslocalizacionessonlasmismasparaelcomandoPUSHF
Unavezhechalatransferenciaseincrementaen2elregistroSPdisminuyendoaseltamaodelapila.

InstruccinPUSH
http://www.wikiciencia.org/informatica/programacion/asm/index.php

16/41

27/11/2014

CursodeAssembler

Propsito:Colocaunapalabraenlapila.
Sintaxis:
PUSHfuente
LainstruccinPUSHdecrementaendoselvalordeSPyluegotransfiereelcontenidodeloperandofuentealanuevadireccin
resultanteenelregistrorecinmodificado.
Eldecrementoenladireccinsedebeaquealagregarvaloresalapilastacrecedeladireccinmayoraladireccinmenor
delsegmento,porlotantoalrestarle2alvalordelregistroSPloquehacemosesaumentareltamaodelapilaendosbytes,
queeslanicacantidaddeinformacinquepuedemanejarlapilaencadaentradaysalidadedatos.

InstruccinPUSHF
Propsito:Colocaelvalordelasbanderasenlapila
Sintaxis:
PUSHF
Estecomandodecrementaen2elvalordelregistroSPyluegosetransfiereelcontenidodelregistrodebanderasalapila,en
ladireccinindicadaporSP.
LasbanderasquedanalmacenadasenmemoriaenlosmismosbitsindicadosenelcomandoPOPF

Instruccioneslgicas.
Sonutilizadaspararealizaroperacioneslgicassobrelosoperandos.
AND
NEG
NOT
OR
TEST
XOR

Instruccionesaritmticas.
Seusanpararealizaroperacionesaritmticassobrelosoperandos.
ADC
ADD
DIV
IDIV
MUL
IMUL
SBB
SUB

InstruccinAND
Propsito:Realizalaconjuncindelosoperandosbitporbit.
Sintaxis:
ANDdestino,fuente
Conestainstruccinsellevaacabolaoperacin"y"lgicadelosdosoperandos:
FuenteDestino|Destino

11|1
http://www.wikiciencia.org/informatica/programacion/asm/index.php

17/41

27/11/2014

CursodeAssembler

10|0
01|0
00|0
Elresultadodelaoperacinsealmacenaeneloperandodestino.

InstruccinNEG
Propsito:Generaelcomplementoa2
Sintaxis:

NEGdestino
Estainstruccingeneraelcomplementoa2deloperandodestinoyloalmacenaenestemismooperando.Porejemplo,siAX
guardaelvalorde1234H,entonces:
NEGAX
NosdejaraalmacenadoenelregistroAXelvalorEDCCH.

InstruccinNOT
Propsito:Llevaacabolanegacinbitporbitdeloperandodestino.
Sintaxis:
NOTdestino
Elresultadoseguardaenelmismooperandodestino.

InstruccinOR
Propsito:ORinclusivolgico
Sintaxis:
ORdestino,fuente
LainstruccinORllevaacabo,bitporbit,ladisyuncininclusivalgicadelosdosoperandos:
FuenteDestino|Destino

11|1
10|1
01|1
00|0

InstruccinTEST
Propsito:Compararlogicamentelosoperandos
Sintaxis:
TESTdestino,fuente
Realizaunaconjuncin,bitporbit,delosoperandos,peroadiferenciadeANDestainstruccinnocolocaelresultadoenel
operandodestino,solotieneefectosobreelestadodelasbanderas.

InstruccinXOR
Propsito:ORexclusivo
Sintaxis:

XORdestino,fuente
Sufuncinesefectuarbitporbitladisyuncinexclusivalgicadelosdosoperandos.
http://www.wikiciencia.org/informatica/programacion/asm/index.php

18/41

27/11/2014

CursodeAssembler

FuenteDestino|Destino

11|0
00|1
01|1
00|0

InstruccinADC
Propsito:Adicinconacarreo.
Sintaxis:
ADCdestino,fuente
LlevaacabolasumadedosoperandosysumaunoalresultadoencasodequelabanderaCFestactivada,estoes,encaso
dequeexistaacarreo.
Elresultadoseguardaeneloperandodestino.

InstruccinADD
Propsito:Adicindelosoperandos.
Sintaxis:
ADDdestino,fuente
Sumalosdosoperandosyguardaelresultadoeneloperandodestino.

InstruccinDIV
Propsito:Divisinsinsigno
Sintaxis:
DIVfuente
Eldivisorpuedeserunbyteopalabrayeseloperandoqueseledaalainstruccin.
Sieldivisoresde8bitssetomacomodividendoelregistrode16bitsAXysieldivisoresde16bitssetomaracomo
dividendoelregistroparDX:AX,tomandocomopalabraaltaDXycomobajaAX.
SieldivisorfuunbyteelcocientesealmacenaenelregistroALyelresiduoenAH,sifuunapalabraelcocienteseguarda
enAXyelresiduoenDX.

InstruccinIDIV
Propsito:Divisinconsigno
Sintaxis:
IDIVfuente
ConsistebasicamenteenlomismoquelainstruccinDIV,soloqueestaltimarealizalaoperacinconsigno.
ParasusresultadosutilizalosmismosregistrosquelainstruccinDIV.

InstruccinMUL
Propsito:Multiplicacinsinsigno
Sintaxis:
MULfuente
Elensambladorasumequeelmultiplicandoseradelmismotamaoqueeldelmultiplicador,porlotantomultiplicaelvalor
almacenadoenelregistroqueseledacomooperandoporelqueseencuentrecontenidoenAHsielmultiplicadoresde8bits
oporAXsielmultiplicadoresde16bits.
Cuandoserealizaunamultiplicacinconvaloresde8bitselresultadosealmacenaenelregistroAXycuandola
http://www.wikiciencia.org/informatica/programacion/asm/index.php

19/41

27/11/2014

CursodeAssembler

multiplicacinesconvaloresde16bitselresultadosealmacenaenelregistroparDX:AX.

InstruccinIMUL
Propsito:Multiplicacindedosenterosconsigno.
Sintaxis:
IMULfuente
Estecomandohacelomismoqueelanterior,soloquesitomaencuentalossignosdelascantidadesquesemultiplican.
LosresultadosseguardanenlosmismosregistrosqueenlainstruccinMUL.

InstruccinSBB
Propsito:Substraccinconacarreo
Sintaxis:
SBBdestino,fuente
EstainstruccinrestalosoperandosyrestaunoalresultadosiCFestactivada.Eloperandofuentesiempreserestadel
destino.
Estetipodesubstraccinseutilizacuandosetrabajaconcantidadesde32bits.

InstruccinSUB
Propsito:Substraccin
Sintaxis:
SUBdestino,fuente
Restaeloperandofuentedeldestino.

Instruccionesdesalto
Sonutilizadasparatransferirelflujodelprocesoaloperandoindicado.
JMP
JA(JNBE)
JAE(JNBE)
JB(JNAE)
JBE(JNA)
JE(JZ)
JNE(JNZ)
JG(JNLE)
JGE(JNL)
JL(JNGE)
JLE(JNG)
JC
JNC
JNO
JNP(JPO)
JNS
JO
JP(JPE)

http://www.wikiciencia.org/informatica/programacion/asm/index.php

20/41

27/11/2014

CursodeAssembler

JS

Instruccionesparaciclos:
LOOPTransfierenelflujodelproceso,condicionaloincondicionalmente,aundestinorepitiendoseestaaccinhastaqueel
contadorseacero.
LOOP
LOOPE
LOOPNE

Instruccionesdeconteo
Seutilizanparadecrementaroincrementarelcontenidodeloscontadores.
DEC
INC

Instruccionesdecomparacin
Sonusadasparacompararoperandos,afectanalcontenidodelasbanderas.
CMP
CMPS(CMPSB)(CMPSW)

Instruccionesdebanderas
Afectandirectamentealcontenidodelasbanderas.
CLC
CLD
CLI
CMC
STC
STD
STI

InstruccinJMP
Propsito:Saltoincondicional
Sintaxis:
JMPdestino
Estainstruccinseutilizaparadesviarelflujodeunprogramasintomarencuentalascondicionesactualesdelasbanderasni
delosdatos.

InstruccinJA(JNBE)
Propsito:Brincocondicional
Sintaxis:
JAEtiqueta
Despusdeunacomparacinestecomandosaltasiestarribaosaltasinoestabajoosinoesigual.
EstosignificaqueelsaltoserealizasolosilabanderaCFestadesactivadaosilabanderaZFestadesactivada(quealguna
delasdosseaigualacero).

InstruccinJAE(JNB)
Propsito:saltocondicional
Sintaxis:
http://www.wikiciencia.org/informatica/programacion/asm/index.php

21/41

27/11/2014

CursodeAssembler

JAEetiqueta
Saltasiestarribaosiesigualosaltasinoestabajo.
ElsaltoseefectuasiCFestadesactivada.

InstruccinJB(JNAE)
Propsito:saltocondicional
Sintaxis:
JBetiqueta
Saltasiestabajoosaltasinoestarribaosinoesigual.
SeefectaelsaltosiCFestaactivada.

InstruccinJBE(JNA)
Propsito:saltocondicional
Sintaxis:
JBEetiqueta
Saltasiestabajoosiesigualosaltasinoestarriba.
ElsaltoseefectasiCFestactivadoosiZFestactivado(quecualquieraseaiguala1).

InstruccinJE(JZ)
Propsito:saltocondicional
Sintaxis:
JEetiqueta
Saltasiesigualosaltasiescero.
ElsaltoserealizasiZFestactivada.

InstruccinJNE(JNZ)
Propsito:saltocondicional
Sintaxis:
JNEetiqueta
Saltasinoesigualosaltasinoescero.
ElsaltoseefectuasiZFestdesactivada.

InstruccinJG(JNLE)
Propsito:saltocondicional,setomaencuentaelsigno.
Sintaxis:
JGetiqueta
Saltasiesmsgrandeosaltasinoesmenoroigual.
ElsaltoocurresiZF=0uOF=SF.

InstruccinJGE(JNL)
Propsito:saltocondicional,setomaencuentaelsigno.
Sintaxis:
JGEetiqueta
Saltasiesmsgrandeoigualosaltasinoesmenorque.
ElsaltoserealizasiSF=OF
http://www.wikiciencia.org/informatica/programacion/asm/index.php

22/41

27/11/2014

CursodeAssembler

InstruccinJL(JNGE)
Propsito:saltocondicional,setomaencuentaelsigno.
Sintaxis:
JLetiqueta
Saltasiesmenorqueosaltasinoesmayoroigual.
ElsaltoseefectasiSFesdiferenteaOF.

InstruccinJLE(JNG)
Propsito:saltocondicional,setomaencuentaelsigno.
Sintaxis:
JLEetiqueta
Saltasiesmenoroigualosaltasinoesmsgrande.
ElsaltoserealizasiZF=1osiSFesdiferenteaOF

InstruccinJC
Propsito:saltocondicional,setomanencuentalasbanderas.
Sintaxis:
JCetiqueta
Saltasihayacarreo.
ElsaltoserealizasiCF=1

InstruccinJNC
Propsito:saltocondicional,setomaencuentaelestadodelasbanderas.
Sintaxis:
JNCetiqueta
Saltasinohayacarreo.
ElsaltoseefectasiCF=0.

InstruccinJNO
Propsito:saltocondicional,setomaencuentaelestadodelasbanderas.
Sintaxis:
JNOetiqueta
Saltasinohaydesbordamiento.
ElsaltoseefectuasiOF=0.

InstruccinJNP(JPO)
Propsito:saltocondicional,tomaencuentaelestadodelasbanderas.
Sintaxis:
JNPetiqueta
Saltasinohayparidadosaltasilaparidadesnon.
ElsaltoocurresiPF=0.

InstruccinJNS
Propsito:saltocondicional,tomaencuentaelestadodelasbanderas.
Sintaxis:
http://www.wikiciencia.org/informatica/programacion/asm/index.php

23/41

27/11/2014

CursodeAssembler

JNPetiqueta
Saltasielsignoestadesactivado.
ElsaltoseefectasiSF=0.

InstruccinJO
Propsito:saltocondicional,tomaencuentaelestadodelasbanderas.
Sintaxis:
JOetiqueta
Saltasihaydesbordamiento(overflow).
ElsaltoserealizasiOF=1.

InstruccinJP(JPE)
Propsito:saltocondicional,tomaencuentaelestadodelasbanderas.
Sintaxis:
JPetiqueta
Saltasihayparidadosaltasilaparidadespar.
ElsaltoseefectasiPF=1.

InstruccinJS
Propsito:saltocondicional,tomaencuentaelestadodelasbanderas.
Sintaxis:
JSetiqueta
Saltasielsignoestprendido.
ElsaltoseefectasiSF=1.

InstruccinLOOP
Propsito:Generaruncicloenelprograma.
Sintaxis:
LOOPetiqueta
LainstruccinloopdecrementaCXen1,ytransfiereelflujodelprogramaalaetiquetadadacomooperandosiCXesdiferente
a1.

InstruccinLOOPE
Propsito:GeneraruncicloenelprogramaconsiderandoelestadodeZF
Sintaxis:
LOOPEetiqueta
EstainstruccindecrementaCXen1.SiCXesdiferenteaceroyZFesiguala1,entonceselflujodelprogramasetransfiere
alaetiquetaindicadacomooperando.

InstruccinLOOPNE
Propsito:Generaruncicloenelprograma,considerandoelestadodeZF
Sintaxis:
LOOPNEetiqueta
EstainstruccindecrementaenunoaCXytransfiereelflujodelprogramasolosiZFesdiferentea0.

InstruccinDEC
http://www.wikiciencia.org/informatica/programacion/asm/index.php

24/41

27/11/2014

CursodeAssembler

Propsito:Decrementareloperando
Sintaxis:
DECdestino
Estaoperacinresta1aloperandodestinoyalmacenaelnuevovalorenelmismooeprando.

InstruccinINC
Propsito:Incrementareloperando.
Sintaxis:
INCdestino
Lainstruccinsuma1aloperandodestinoyguardaelresultadoenelmismooperandodestino.

InstruccinCMP
Propsito:Compararlosoperandos.
Sintaxis:
CMPdestino,fuente
Estainstruccinrestaeloperandofuentealoperandodestinoperosinquestealmaceneelresultadodelaoperacin,solose
afectaelestadodelasbanderas.

InstruccinCMPS(CMPSB)(CMPSW)
Propsito:Compararcadenasdeunbyteopalabra.
Sintaxis:
CMPdestino,fuente
Conestainstruccinlacadenadecaracteresfuenteserestadelacadenadestino.
SeutilizanDIcomoindiceparaelsegmentoextradelacadenafuenteySIcomoindicedelacadenadestino.
SoloseafectaelcontenidodelasbanderasytantoDIcomoSIseincrementan.

InstruccinCLC
Propsito:Limpiarbanderadeacarreo.
Sintaxis:
CLC
Estainstruccinapagaelbitcorrespondientealabanderadeacarreo,osea,loponeencero.

InstruccinCLD
Propsito:Limpiarbanderadedireccin
Sintaxis:
CLD
LainstruccinCLDponeenceroelbitcorrespondientealabanderadedireccin.

InstruccinCLI
Propsito:Limpiarbanderadeinterrupcin
Sintaxis:
CLI
CLIponeencerolabanderadeinterrupciones,desabilitandoasaquellasinterrupcionesenmascarables.
UnainterrupcinenmascarableesaquellacuyasfuncionessondesactivadascuandoIF=0.

InstruccinCMC
http://www.wikiciencia.org/informatica/programacion/asm/index.php

25/41

27/11/2014

CursodeAssembler

Propsito:Complementarlabanderadeacarreo.
Sintaxis:
CMC
EstainstruccincomplementaelestadodelabanderaCF,siCF=0lainstruccinlaigualaa1,ysies1lainstruccinla
igualaa0.
Podemosdecirquenicamente"invierte"elvalordelabandera.

InstruccinSTC
Propsito:Activarlabanderadeacarreo.
Sintaxis:
STC
EstainstruccinponelabanderaCFen1.

InstruccinSTD
Propsito:Activarlabanderadedireccin.
Sintaxis:
STD
LainstruccinSTDponelabanderaDFen1.

InstruccinSTI
Propsito:Acticarlabanderadeinterrupcin.
Sintaxis:
STI
LainstruccinactivalabanderaIF,estohabilitalasinterrupcionesexternasenmascarables(lasquefuncionanunicamente
cuandoIF=1).

Interrupcionesinternasdehardware
Lasinterrupcionesinternassongeneradasporciertoseventosquesurgendurantelaejecucindeunprograma.
Estetipodeinterrupcionessonmanejadasensutotalidadporelhardwareynoesposiblemodificarlas.
Unejemploclarodeestetipodeinterrupcioneseslaqueactualizaelcontadordelrelojinternodelacomputadora,elhardware
haceelllamadoaestainterrupcinvariasvecesduranteunsegundoparamantenerlahoraactualizada.
Aunquenopodemosmanejardirectamenteestainterrupcin(nopodemoscontrolarporsoftwarelasactualizacionesdelreloj),
esposibleutilizarsusefectosenlacomputadoraparanuestrobeneficio,porejemploparacrearun"relojvirtual"actualizado
continuamentegraciasalcontadordelrelojinterno.nicamentedebemosescribirunprogramaqueleaelvaloractualdel
contadorylotraduzcaaunformatoentendibleparaelusuario.

Interrupcionesexternasdehardware
Lasinterrupcionesexternaslasgeneranlosdispositivosperifricos,comopuedenser:teclado,impresoras,tarjetasde
comunicaciones,etc.Tambinsongeneradasporloscoprocesadores.
Noesposibledesactivaralasinterrupcionesexternas.
EstasinterrupcionesnosonenviadasdirectamentealaUCP,sinoquesemandanauncircuitointegradocuyafuncines
exclusivamentemanejarestetipodeinterrupciones.Elcircuito,llamadoPIC8259A,siescontroladoporlaUCPutilizandopara
talcontrolunaseriedeviasdecomunicacinllamadaspuertos.

Interrupcionesdesoftware
Lasinterrupcionesdesoftwarepuedenseractivadasdirectamenteporelensambladorinvocandoalnmerodeinterrupcin
deseadaconlainstruccinINT.
Elusodelasinterrupcionesnosayudaenlacreacindeprogramas,utilizandolasnuestrosprogramassonmscortos,esms
fcilentenderlosyusualmentetienenunmejordesempeodebidoengranparteasumenortamao.
Estetipodeinterrupcionespodemossepararlasendoscategorias:lasinterrupcionesdelsistemaoperativoDOSylas
http://www.wikiciencia.org/informatica/programacion/asm/index.php

26/41

27/11/2014

CursodeAssembler

interrupcionesdelBIOS.
Ladiferenciaentreambasesquelasinterrupcionesdelsistemaoperativosonmsfcilesdeusarperotambinsonms
lentasyaqueestasinterrupcioneshacenusodelBIOSparalograrsucometido,encambiolasinterrupcionesdelBIOSson
muchomsrpidasperotienenladesventajaque,comosonpartedelhardwaresonmuyespecficasypuedenvariar
dependiendoinclusodelamarcadelfabricantedelcircuito.
Laeleccindeltipodeinterrupcinautilizardependerunicamentedelascaracteristicasquelequieradarasuprograma:
velocidad(utilizandolasdelBIOS)oportabilidad(utilizandolasdelDOS).

Interrupcin21H
Propsito:LlamaradiversasfuncionesdelDOS.
Sintaxis:
Int21H
Nota:CuandotrabajamosenMASMesnecesarioespecificarqueelvalorqueestamosutilizandoeshexadecimal.
Estainterrupcintienevariasfunciones,paraaccesaracadaunadeellasesnecesarioqueelelregistroAHseencuentreel
nmerodefuncinqueserequieraalmomentodellamaralainterrupcin.

Funcionesparadesplegarinformacinalvideo.
02HExhibesalida
09HImpresindecadena(video)
40HEscrituraendispositivo/Archivo

Funcionesparaleerinformacindelteclado.
01HEntradadesdeteclado
0AHEntradadesdetecladousandobuffer
3FHLecturadesdedispositivo/archivo

Funcionesparatrabajarconarchivos.
Enestaseccinunicamenteseexponelatareaespecficadecadafuncin,paraunareferenciaacercadelosconceptos
empleadosrefierasealaunidad7,titulada:"Introduccinalmanejodearchivos".

MtodoFCB
0FHAbrirarchivo
14HLecturasecuencial
15HEscriturasecuencial
16HCreararchivo
21HLecturaaleatoria
22HEscrituraaleatoria
Handles
3CHCreararchivo
3DHAbrirarchivo
3EHCierramanejadordearchivo
3FHLecturadesdearchivo/dispositivo
40HEscrituraenarchivo/dispositivo
42HMoverapuntadordelectura/escrituraenarchivo

Funcin02H
Uso:
Despliegauncaracteralapantalla.
http://www.wikiciencia.org/informatica/programacion/asm/index.php

27/41

27/11/2014

CursodeAssembler

Registrosdellamada:
AH=02H
DL=Valordelcaracteradesplegar.
Registrosderetorno:
Ninguno
EstafuncinnosdespliegaelcaractercuyocodigohexagesimalcorrespondealvaloralmacenadoenelregistroDL,nose
modificaningnregistroalutilizarestecomando.
Esrecomendadoelusodelafuncin40Hdelamismainterrupcinenlugardeestafuncin.

Funcin09H
Uso:
Despliegaunacadenadecarateresenlapantalla.
Registrosdellamada:
AH=09H
DS:DX=Direccindeiniciodeunacadenadecaracteres
Registrosderetorno:
Ninguno.
Estafuncindespliegaloscaracteres,unoauno,desdeladireccinindicadaenelregistroDS:DXhastaencontraruncaracter
$,queesinterpretadocomoelfinaldelacadena.
Serecomiendautilizarlafuncin40Henlugardeestafuncin.

Funcin40H
Uso:
Escribiraundispositivooaunarchivo.
Registrosdellamada:
AH=40H
BX=Vadecomunicacin
CX=Cantidaddebytesaescribir
DS:DX=Direccindeliniciodelosdatosaescribir
Registrosderetorno:
CF=0sinohuboerror
AX=Nmerodebytesescritos
CF=1sihuboerror
AX=Cdigodeerror
ElusodeestafuncinparadesplegarinformacinenpantallaserealizadandolealregistroBXelvalorde1queeselvalor
preasignadoalvideoporelsistemaoperativoMSDOS.

Funcin01H
Uso:
Leeruncaracterdeltecladoydesplegarlo.
Registrosdellamada:
AH=01H
Registrosderetorno:
AL=Caracterledo
http://www.wikiciencia.org/informatica/programacion/asm/index.php

28/41

27/11/2014

CursodeAssembler

Conestafuncinesmuysencilloleeruncaracterdelteclado,elcdigohexadecimaldelcaracterledoseguardaenelregistro
AL.EncasodequeseauncaracterextendidoelregistroALcontendraelvalorde0ysernecesariollamardenuevoala
funcinparaobtenerelcdigodeestecaracter.

Funcin0AH
Uso:
Leercaracteresdeltecladoyalmacenarlosenunbuffer.
Registrosdellamada:
AH=0AH
DS:DX=Direccindelreadealmacenamiento
BYTE0=Cantidaddebytesenelrea
BYTE1=Cantidaddebytesledos
desdeBYTE2hastaBYTE0+2=caracteresledos
Registrosderetorno:
Ninguno
Loscaracteressonledosyalmacenadosenunespaciopredefinidodememoria.Laestructuradeesteespacioleindicaque
enelprimerbytedelmismoseindicancuantoscaracteressernledos.Enelsegundobytesealmacenaelnmerode
caracteresqueyaseleyeron,ydeltercerbyteenadelanteseescribenloscaracteresledos.
Cuandosehanalmacenadotodosloscaracteresindicadosmenosunolabocinasuenaycualquiercaracteradicionales
ignorado.Paraterminarlacapturadelacadenaesnecesariodarle[ENTER].

Funcin3FH
Uso:
Leerinformacindeundispositivooarchivo.
Registrosdellamada:
AH=3FH
BX=Nmeroasignadoaldispositivo
CX=Nmerodebytesaprocesar
DS:DX=Direccindelreadealmacenamiento
Registrosderetorno:
CF=0sinohayerroryAX=nmerodebytesleidos.
CF=1sihayerroryAXcontendraelcdigodelerror.

Funcin0FH
Uso:
AbrirarchivoFCB
Registrosdellamada:
AH=0FH
DS:DX=ApuntadoraunFCB
Registrosderetorno:
AL=00Hsinohuboproblema,delocontrarioregresa0FFH

Funcin14H
Uso:
LeersecuencialmenteunarchivoFCB.
http://www.wikiciencia.org/informatica/programacion/asm/index.php

29/41

27/11/2014

CursodeAssembler

Registrosdellamada:
AH=14H
DS:DX=ApuntadoraunFCByaabierto.
Registrosderetorno:
AL=0sinohuboerrores,delocontrarioseregresaraelcdigocorrespondientedeerror:1erroralfinaldelarchivo,2erroren
laestructuradelFCBy3errordelecturaparcial.
EstafuncinloquehaceesqueleeelsiguientebloquedeinformacinapartirdeladireccindadaporDS:DX,yactualizaeste
registro.

Funcin15H
Uso:
EscribirsecuencialmenteaunarchivoFCB
Registrosdellamada:
AH=15H
DS:DX=ApuntadoraunFCByaabierto
Registrosderetorno:
AL=00Hsinohuboerrores,delocontrariocontendraelcdigodelerror:1discollenooarchivodesololectura,2errorenla
formacinoespecificacindelFCB.
Lafuncin15HdespusdeescribirelregistroalbloqueactualactualizaelFCB.

Funcin16H
Uso:
CrearunarchivoFCB.
Registrosdellamada:
AH=16H
DS:DX=ApuntadoraunFCByaabierto.
Registrosderetorno:
AL=00Hsinohuboerrores,delocontrariocontendraelvalor0FFH
SebasaenlainformacinproveidaenunFCBparacrearunarchivoeneldisco.

Funcin21H
Uso:
LeerenformaaleatoriaunarchivoFCB.
Registrosdellamada:
AH=21H
DS:DX=ApuntadoraunFCByaabierto.
Registrosderetorno:
A=00Hsinohuboerror,delocontrarioAHcontendraelcdigodelerror:1siesfindearchivo,2siexisteerrorde
especificacindeFCBy3siseleyunregistroparcialoelapuntadordelarchivoseencuentraalfinaldelmismo.
EstafuncinleeelregistroespecificadoporloscamposdelbloqueactualyregistroactualdeunFCBabiertoycolocala
informacinenelDTA(readetransferenciadediscooDiskTransferArea).

Funcin22H
Uso:
EscribirenformaaleatoriaenunarchivoFCB.
http://www.wikiciencia.org/informatica/programacion/asm/index.php

30/41

27/11/2014

CursodeAssembler

Registrosdellamada:
AH=22H
DS:DX=ApuntadoraunFCBabierto.
Registrosderetorno:
AL=00Hsinohuboerror,delocontrariocontendrelcdigodelerror:1sieldiscoestllenooesarchivodesololecturay2
sihayerrorenlaespecificacindeFCB.
EscribeelregistroespecificadoporloscamposdelbloqueactualyregistroactualdeunFCBabierto.Escribedicha
informacinapartirdelcontenidodelDTA(readetransferenciadedisco).

Funcin3CH
Uso:
Crearunarchivosinoexisteodejarloenlongitud0siexiste.(Handle)
Registrosdellamada:
AH=3CH
CH=Atributodearchivo
DS:DX=ApuntadoraunaespecificainASCIIZ
Registrosderetorno:
CF=0yAXelnmeroasignadoalhandlesinohayerror,encasodehaberloCFser1yAXcontendraelcdigodeerror:3
rutanoencontrada,4nohayhandlesdisponiblesparaasignary5accesonegado.
Estafuncinsustituyeala16H.ElnombredelarchivoesespecificadoenunacadenaASCIIZ,lacualtienecomo
caractersticaladeserunacadenadebytesconvencionalterminadaconuncaracter0.
ElarchivocreadocontendralosatributosdefinidosenelregistroCXenlasiguienteforma:
ValorAtributos
00HNormal
02HEscondido
04HSistema
06HEscondidoydesistema
Elarchivosecreaconlospermisosdelecturayescritura.Noesposiblecreardirectoriosutilizandoestafuncin.

Funcin3DH
Uso:
Abreunarchivoyregreseunhandle
Registrosdellamada:
AH=3DH
AL=mododeacceso
DS:DX=ApuntadoraunaespecificacinASCIIZ
Registrosderetorno:
CF=0yAX=nmerodehandlesinohayerrores,delocontrarioCF=1yAX=cdigodeerror:01Hsinoesvlidala
funcin,02Hsinoseencontrelarchivo,03Hsinoseencontrolaruta,04Hsinohayhandlesdisponibles,05Hencasode
accesonegado,y0CHsielcdigodeaccesonoesvlido.
Elhandleregresadoesde16bits.
Elcdigodeaccesoseespecificaenlasiguienteforma:
BITS
7654321
http://www.wikiciencia.org/informatica/programacion/asm/index.php

31/41

27/11/2014

CursodeAssembler

....000Sololectura
....001Soloescritura
....010Lectura/Escritura
...X...RESERVADO

Funcin3EH
Uso:
Cerrararchivo(Handle).
Registrosdellamada:
AH=3EH
BX=Handleasignado
Registrosderetorno:
CF=0sinohuboerrores,encasocontrarioCFser1yAXcontendrelcdigodeerror:06Hsielhandleesinvlido.
Estafuncinactualizaelarchivoyliberaodejadisponibleelhandlequeestabautilizando.

Funcin3FH
Uso:
Leerdeunarchivoabiertounacantdaddefinidadebytesylosalmacenaenunbufferespecfico.
Registrosdellamada:
AH=3FH
BX=Handleasignado
CX=Cantidaddebytesaleer
DS:DX=Apuntadoraunreadetrabajo.
Registrosderetorno:
CF=0yAX=nmerodebytesleidossinohuboerror,encasocontrarioCF=1yAX=cdigodeerror:05Hsiacceso
negadoy06Hsinoesvlidoelhandle.

Funcin40H
Uso:
Escribeaunarchivoyaabiertounaciertacantidaddebytesapartirdelbufferdesignado.
Registrosdellamada:
AH=40H
BX=Handleasignado
CX=Cantidaddebytesaescribir.
DS:DX=Apuntadoralbufferdedatos.
Registrosderetorno:
CF=0yAX=nmerodebytesescritossinohayerrores,encasodeexistirCF=1yAX=cdigodelerror:05Hsielacceso
esnegadoy06Hsielhandleesinvlido.

Funcin42H
Uso:
Moverapuntadoralarchivo(Handle)
Registrosdellamada:
AH=42H
http://www.wikiciencia.org/informatica/programacion/asm/index.php

32/41

27/11/2014

CursodeAssembler

AL=mtodoutilizado
BX=Handleasignado
CX=Lapartemssignificativadeloffset
DX=Lapartemenossignificativadeloffset
Registrosderetorno:
CF=0yDX:AX=lanuevaposicindelapuntador.EncasodeerrorCFser1yAX=cdigodeerror:01Hsilafuncinnoes
vliday06Hsielhandlenoesvlido.
Elmtodoutilizadoseconfiguracomosigue:
ValordeALMtodo
00HApartirdelprincipiodelarchivo
01HApartirdelaposicinactual
02HApartirdelfinaldelarchivo

Interrupcin10H
Propsito:LlamaradiversasfuncionesdevideodelBIOS.
Sintaxis:
Int10H
Estainterrupcintienediversasfunciones,todasellasnossirvenparacontrolarlaentradaysalidadevideo,laformade
accesoacadaunadelasopcionesespormediodelregistroAH.
Enestetutorialunicamenteveremosalgunasdelasfuncionesdeestainterrupcin.
Funcionescomunesdelainterrupcin10H.
02HSeleccindeposicindelcursor
09HEscribeatributoycaracterenelcursor
0AHEscribecaracterenlaposicindelcursor
0EHEscrituradecaracteresenmodoalfanumrico

Funcin02H
Uso:
Posicionaelcursorenlapantalladentrodelascoordenadasvlidasdetexto.
Registrosdellamada:
AH=02H
BH=Pginadevideoenlaqueseposicionarelcursor.
DH=Fila
DL=Columna
Registrosderetorno:
Ninguno.
Lasposicionesdelocalizacindelcursorsondefinidasporcoordenadasiniciandoen0,0,quecorrespondealaesquina
superiorizquierdahasta79,24correspondientesalaesquinainferiorderecha.Tenemosentoncesquelosvaloresquepueden
tomarlosregistrosDHyDLenmododetextode80x25sonde0hasta24yde0hasta79respectivamente.

Funcin09H
Uso:
Desplegaruncaracterundeterminadonmerodevecesconunatributodefinidoempezandoenlaposicinactualdelcursor.
http://www.wikiciencia.org/informatica/programacion/asm/index.php

33/41

27/11/2014

CursodeAssembler

Registrosdellamada:
AH=09H
AL=Caracteradesplegar
BH=Pginadevideoendondesedesplegar
BL=Atributoausar
Nmeroderepeticiones.
Registrosderetorno:
Ninguno
EstafuncindespliegauncaracterelnmerodevecesespecificadoenCXperosincambiarlaposicindelcursorenla
pantalla.

Funcin0AH
Uso:
Desplegaruncaracterenlaposicinactualdelcursor.
Registrosdellamada:
AH=0AH
AL=Caracteradesplegar
BH=Pginaendondedesplegar
BL=Colorausar(sloengrficos).
CX=Nmeroderepeticiones
Registrosderetorno:
Ninguno.
Lanicadiferenciaentreestafuncinylaanterioresquestanopermitemodificarlosatributos,simplementeusalosatributos
actuales.
Tampocosealteralaposicindelcursorconestafuncin.

Funcin0EH
Uso:
Deplegaruncaracterenlapantallaactualizandolaposicindelcursor.
Registrosdellamada:
AH=0EH
AL=Caracteradesplegar
BH=Pginadondesedesplegaraelcaracter
BL=Colorausar(soloengrficos)
Registrosderetorno:
Ninguno

Interrupcin16H
Propsito:Manejarlaentrada/salidadelteclado.
Sintaxis:
Int16H
Veremosdosopcionesdelainterrupcin16H,estasopciones,aligualquelasdeotrasinterrupciones,sonllamadasutilizando
elregistroAH.

http://www.wikiciencia.org/informatica/programacion/asm/index.php

34/41

27/11/2014

CursodeAssembler

Funcionesdelainterrupcin16H
00HLeeuncaracterdeteclado
01HLeeestadodelteclado

Funcin00H
Uso:
Leeruncaracterdelteclado.
Registrosdellamada:
AH=00H
Registrosderetorno:
AH=cdigodebarrido(scancode)delteclado
AL=ValorASCIIdelcaracter.
Cuandoseutilizaestainterrupcinsedetienelaejecucindelprogramahastaqueseintroduzcauncaracterdesdeelteclado,
silateclapresionadaesuncaracterASCIIsuvalorserguardadoenelregistroAH,delocontrarioelcdigodebarridoser
guardadoenALyAHcontendrelvalor00H.
ElcdigodebarridofucreadoparamanejarlasteclasquenotienenunarepresentacinASCIIcomo[ALT],[CONTROL],las
teclasdefuncin,etc.

Funcin01H
Uso:
Leerestadodelteclado.
Registrosdellamada:
AH=01H
Registrosderetorno:
Silabanderadecero,ZF,estapagadasignificaquehayinformacinenelbuffer,siseencuentraprendidaesquenohay
teclaspendientes.
EncasodeexistirinformacinelregistroAHcontendrelcdigodelateclaguardadaenelbuffer.

Interrupcin17H
Propsito:Manejarlaentrada/salidadelaimpresora.
Sintaxis:
Int17H
Estainterrupcinesutilizadaparaescribircaracteresalaimpresora,inicializarlayleersuestado.
Funcionesdelainterrupcin16H
00HImprimeuncaracterASCII
01HInicializalaimpresora
02HProporcionaelestadodelaimpresora

Funcin00H
Uso:
Escribiruncaracteralaimpresora.
Registrosdellamada:
AH=00H
AL=Caracteraimprimir
http://www.wikiciencia.org/informatica/programacion/asm/index.php

35/41

27/11/2014

CursodeAssembler

DX=Puertoautilizar
Registrosderetorno:
AH=Estadodelaimpresora.
Elpuertoautilizar,definidoenDX,seespecificaas:LPT1=0,LPT2=1,LPT3=2...
Elestadodelaimpresorasecodificabitporbitcomosigue:
BIT1/0SIGNIFICADO

01Seagoteltiempodeespera
1
2
31Errordeentrada/salida
41Impresoraseleccionada
51Papelagotado
61Reconocimientodecomunicacin
71Laimpresoraseencuentralibre
Losbits1y2nosonrelevantes.
LamayoriadelosBIOSunicamentesoportan3puertosparalelosaunqueexistenalgunosquesoportan4.

Funcin01H
Uso:
Inicializarunpuertodeimpresin.
Registrosdellamada:
AH=01H
DX=Puertoautilizar
Registrosderetorno:
AH=Statusdelaimpresora
Elpuertoautilizar,definidoenDX,seespecificaas:LPT1=0,LPT2=1,etc.
Elestadodelaimpresorasecodificabitporbitcomosigue:
BIT1/0SIGNIFICADO

01Seagoteltiempodeespera
1
2
31Errordeentrada/salida
41Impresoraseleccionada
51Papelagotado
61Reconocimientodecomunicacin
71Laimpresoraseencuentralibre
Losbits1y2nosonrelevantes.
LamayoriadelosBIOSunicamentesoportan3puertosparalelosaunqueexistenalgunosquesoportan4.
http://www.wikiciencia.org/informatica/programacion/asm/index.php

36/41

27/11/2014

CursodeAssembler

Funcin02H
Uso:
Obtenerelestadodelaimpresora.
Registrosdellamada:
AH=01H
DX=Puertoautilizar
Registrosderetorno:
AH=Statusdelaimpresora.
Elpuertoautilizar,definidoenDX,seespecificaas:LPT1=0,LPT2=1,etc.
Elestadodelaimpresorasecodificabitporbitcomosigue:
BIT1/0SIGNIFICADO

01Seagoteltiempodeespera
1
2
31Errordeentrada/salida
41Impresoraseleccionada
51Papelagotado
61Reconocimientodecomunicacin
71Laimpresoraseencuentralibre
Losbits1y2nosonrelevantes.
LamayoriadelosBIOSunicamentesoportan3puertosparalelosaunqueexistenalgunosquesoportan4.

Mtodosdetrabajoconarchivos
Existendosformasdetrabajarconarchivos,laprimeraespormediodebloquesdecontroldearchivoso"FCB"ylasegunda
espormediodecanalesdecomunicacin,tambienconocidoscomo"handles".
LaprimeraformademanejodearchivossevieneutilizandodesdeelsistemaoperativoCPM,antecesordelDOS,porlomismo
aseguraciertacompatibilidadconarchivosmuyantiguostantodelCMPcomodelaversin1.0delDOS,ademsestemtodo
nospermitetenerunnmeroilimitadodearchivosabiertosalmismotiempo.Sisequierecrearunvolumenparaeldiscola
nicaformadelograrloesutilizandoestemtodo.
AnconsiderandolasventajasdelFCBelusodeloscanalesdecomunicacinesmuchomssencilloynospermiteunmejor
manejodeerrores,adems,porsermsnovedosoesmuyprobablequelosarchivosascreadossemantengancompatiblesa
travsdeversionesposterioresdelsistemaoperativo.
Paraunamayorfacilidadenlasexplicacionesposterioresmereferiraelmtododebloquesdecontroldearchivoscomo
FCBsyalmtododecanalesdecomunicacincomohandles.
Introduccin
ExistendostiposdeFCB,elnormal,cuyalongitudesde37bytesyelextendidode44bytes.Enestetutorialunicamentese
tratarelprimertipo,asquedeahoraenadelantecuandomerefieraaunFCBrealmenteestoyhablandodeunFCBde37
bytes.
ElFCBsecomponedeinformacindadaporelprogramadoryporinformacinquetomadirectamentedelsistemaoperativo.
CuandoseutilizanestetipodearchivosunicamenteesposibletrabajareneldirectorioactualyaquelosFCBnoproveen
apoyoparaelusodelaorganizacinpordirectoriosdelDOS.
ElFCBestformadoporlossiguientescampos:
POSICIONLONGITUDSIGNIFICADO
00H1ByteDrive
http://www.wikiciencia.org/informatica/programacion/asm/index.php

37/41

27/11/2014

CursodeAssembler

01H8BytesNombredelarchivo
09H3BytesExtensin
0CH2BytesNmerodebloque
0EH2BytesTamaodelregistro
10H4BytesTamaodelarchivo
14H2BytesFechadecreacin
16H2BytesHoradecreacin
18H8BytesReservados
20H1ByteRegistroactual
21H4BytesRegsitroaleatorio
Paraseleccionareldrivedetrabajosesigueelsiguienteformato:driveA=1driveB=2etc.Siseutiliza0setomarcomo
opcineldrivequeseestutilizandoenesemomento.
Elnombredelarchivodebeestarjustificadoalaizquierdayencasodesernecesariosedebernrellenarlosbytessobrantes
conespacios,laextensindelarchivosecolocadelamismaforma.
Elbloqueactualyelregistroactualledicenalacomputadoraqueregistroseraccesadoenoperacionesdelecturaoescritura.
Unbloqueesungrupode128registros.Elprimerbloquedelarchivoeselbloque0.Elprimerregistroeselregistro0,porlo
tantoelltimoregistrodelprimerbloquesera127,yaquelanumeracininicicon0yelbloquepuedecontener128registros
entotal.
Abrirarchivos
ParaabrirunarchivoFCBseutilizalainterrupcin21H,funcin0FH.Launidad,elnombreyextensindelarchivodebenser
inicializadosantesdeabrirlo.
ElregistroDXdebeapuntaralbloque.SialllamaralainterrupcinstaregresavalordeFFHenelregistroAHesqueel
archivonoseencontr,sitodosalibiensedevolveraunvalorde0.
SiseabreelarchivoDOSinicializaelbloqueactuala0,eltamaodelregistroa128bytesyeltamaodelmismoysufecha
sellenanconlosdatosencontradoseneldirectorio.
Crearunarchivonuevo
Paralacreacindearchivosseutilizalainterrupcin21Hfuncin16H.
DXdebeapuntaraunaestructuradecontrolcuyosrequisitossonquealmenosseencuentredefinidalaunidadlgica,el
nombreylaextensindelarchivo.
EncasodeexistiralgunproblemasedevolverelvalorFFHenAL,delocontrarioesteregistrocontendrelvalorde0.
Escriturasecuencial
Antesdequepodamosrealizarescriturasaldiscoesnecesariodefinirelreadetransferenciadedatosutilizandoparatalfinla
funcin1AHdelainterrupcin21H.
Lafuncin1AHnoregresaningnestadodeldisconidelaoperacin,perolafuncin15H,queeslaqueusaremospara
escribiraldisco,silohaceenelregistroAL,sisteesigualaceronohuboerroryseactualizanloscamposdelregistroactual
ybloque.
Lecturasecuencial
AntesquenadadebemosdefinirelreadetransferenciadearchivosoDTA.
Paraleersecuencialmenteutilizamoslafuncin14Hdelaint21H.
Elregistroaserleidoeselqueseencuentradefinidoporelbloqueyelregistroactual.ElregistroALregresaelestadodela
operacin,siALcontieneelvalorde1o3esquehemosllegadoalfinaldelarchivo.Unresultadode2significaqueelFCB
estmalestructurado.
EncasodenoexistirerrorALcontendrelvalorde0yloscamposbloqueactualyregistroactualsonactualizados.
Lecturayescrituraaleatoria
Lafuncin21Hylafuncin22Hdelainterrupcin21Hsonlasencargadasderealizarlaslecturasyescriturasaleatorias
respectivamente.

http://www.wikiciencia.org/informatica/programacion/asm/index.php

38/41

27/11/2014

CursodeAssembler

Elnmeroderegistroaleatorioyelbloqueactualsonusadosparacalcularlaposicinrelativadelregistroaleeroescribir.
ElregistroALregresalamismainformacinqueparalecturaoescriturasecuencial.Lainformacinqueserledaseregresar
enelreadetransferenciadedisco,asmismolainformacinqueserescritaresideenelDTA.
Cerrarunarchivo
Paracerrarunarchivoutilizamoslafuncin10Hdelainterrupcin21H.
SidespusdeinvocarseestafuncinelregistroALcontieneelvalordeFFHsignificaqueelarchivohacambiadodeposicin,
secambieldiscoohayunerrordeaccesoaldisco.

Trabajandoconhandles
Elusodehandlesparamanejarlosarchivosfacilitaengranmedidalacreacindearchivosyelprogramadorpuede
concentrarseenotrosaspectosdelaprogramacinsinpreocuparseendetallesquepuedensermanejadosporelsistema
operativo.
Lafacilidadenelusodeloshandlesconsisteenqueparaoperarsobreunarchivounicamenteesnecesariodefinirelnombre
delmismoyelnmerodelhandleautilizar,todalademsinformacinesmanejadainternamenteporelDOS.
Cuandoutilizamosestemtodoparatrabajarconarchivosnoexisteunadistincinentreaccesossecuencialesoaleatorios,el
archivoestomadosimplementecomounacadenadebytes.
Funcionesparautilizarhandles
Lasfuncionesutilizadasparaelmanejodearchivospormediodehandlessondescritasenlaunidad6:Interrupciones,enla
seccindedicadaalainterrupcin21H.

Definicindeprocedimiento
Unprocedimientoesunconjuntodeinstruccionesalosquepodemosdirigirelflujodenuestroprograma,yunavezterminada
laejecucindedichasinstruccionessedevuelveelcontrolalasiguientelineaaprocesardelcdigoquemandollamaral
procedimiento.
Losprocedimientosnosayudanacrearprogramaslegiblesyfcilesdemodificar.
Almomentodeinvocaraunprocedimientoseguardaenlapilaladireccindelasiguienteinstruccindelprogramaparaque,
unaveztransferidoelflujodelprogramayterminadoelprocedimiento,sepuedaregresaralalineasiguientedelprograma
original(elquellamalprocedimiento).

Sintaxisdeunprocedimiento
Existendostiposdeprocedimientos,losintrasegmentos,queseencuentranenelmismosegmentodeinstruccionesylos
intersegmentosquepuedenseralmacenadosendiferentessegmentosdememoria.
CuandoseutilizanlosprocedimientosintrasegmentossealmacenaenlapilaelvalordeIPycuandoseutilizanlos
intersegmentossealmacenaelvalorCS:IP
Paradesviarelflujoaunprocedimiento(llamarlo)seutilizaladirectiva:
CALLNombreDelProcedimiento
Laspartesquecomponenaunprocedimientoson:
Declaracindelprocedimiento
Cdigodelprocedimiento
Directivaderegreso
Terminacindelprocedimiento
Porejemplo,siqueremosunarutinaquenossumedosbytes,almacenadosenAHyALcadaunoyguardarlasumaenel
registroBX:
SumaProcNear Declaracindelprocedimiento
MovBx,0

Contenidodelprocedimiento

MovBl,Ah

AddBx,Ax

MovAh,00

http://www.wikiciencia.org/informatica/programacion/asm/index.php

39/41

27/11/2014

CursodeAssembler

Ret

Directivaderegreso

SumaEndp

Declaracindefinaldelprocedimiento

Enladeclaracinlaprimerapalabra,Suma,correspondealnombredenuestroprocedimiento,Proclodeclaracomotalyla
palabraNearleindicaalMASMqueelprocedimientoesintrasegmento.LadirectivaRetcargaladireccinIPalmacenadaenla
pilapararegresaralprogramaoriginal,porltimo,ladirectivaSumaEndpindicaelfinaldelprocedimiento.
ParadeclararunprocedimientointersegmentosustituimoslapalabraNearporlapalabraFAR.
Elllamadodeesteprocedimientoserealizadelasiguienteforma:
CallSuma
Lasmacrosofrecenunamayorflexibilidadenlaprogramacincomparadasconlosprocedimientos,peronoporellosedejarn
deutilizarestosltimos.

Definicindeunamacro
Unamacroesungrupodeinstruccionesrepetitivasenunprogramaquesecodificansolounavezypuedenutilizarsecuantas
vecesseanecesario.
Laprincipaldiferenciaentreunamacroyunprocedimientoesqueenlamacrosehaceposibleelpasodeparmetrosyenel
procedimientono(estoesaplicablesoloparaelMASM,hayotroslenguajesdeprogramacinquesilopermiten).Almomento
deejecutarselamacrocadaparmetroessustituidoporelnombreovalorespecificadoalmomentodellamarla.
Podemosdecirentoncesqueunprocedimientoesunaextensindeundeterminadoprograma,mientrasquelamacroesun
mduloconfuncionesespecficasquepuedeserutilizadopordiferentesprogramas.
Otradiferenciaentreunamacroyunprocedimientoeslaformadellamaracadauno,parallamaraunprocedimientose
requiereelusodeunadirectiva,encambiolallamadaalasmacrosserealizacomosisetrataradeunainstruccindel
ensamblador.

Sintaxisdeunamacro
Laspartesquecomponenaunamacroson:
Declaracindelamacro
Cdigodelamacro
Directivadeterminacindelamacro
Ladeclaracindelamacrosellevaacabodelasiguienteforma:
NombreMacroMACRO[parametro1,parametro2...]
Aunquesetienelafuncionalidaddelosparametrosesposiblecrearunamacroquenolosnecesite.
Ladirectivadeterminacindelamacroes:ENDM
Unejemplodemacro,paracolocarelcursorenalgunaposicindeterminadadelapantallaes:
PosicionMACROFila,Columna
PUSHAX
PUSHBX
PUSHDX
MOVAH,02H
MOVDH,Fila
MOVDL,Columna
MOVBH,0
INT10H
POPDX
POPBX

http://www.wikiciencia.org/informatica/programacion/asm/index.php

40/41

27/11/2014

CursodeAssembler

POPAX
ENDM
Parautilizarunamacrosoloesnecesariollamarlaporsunombre,comosifueraunainstruccinmasdelensamblador,yano
sonnecesariaslasdirectivascomoenelcasodelosprocedimientos.Ejemplo:
Posicion8,6

Bibliotecasdemacros
Unadelasfacilidadesqueofreceelusodelasmacroseslacreacindebibliotecas,lascualessongruposdemacrosque
puedenserincluidasenunprogramadesdeunarchivodiferente.
Lacreacindeestasbibliotecasesmuysencilla,nicamentetenemosqueescribirunarchivocontodaslasmacrosquese
necesitarnyguardarlocomoarchivodetexto.
ParallamaraestasmacrossoloesnecesarioutilizarlainstruccinIncludeNombreDelArchivo,enlapartedenuestroprograma
dondeescribiriamosnormalmentelasmacros,estoes,alprincipiodenuestroprograma(antesdeladeclaracindelmodelode
memoria).
SuponiendoqueseguardelarchivodelasmacrosconelnombredeMACROS.TXTlainstruccinIncludeseutilizaradela
siguienteforma:
Iniciodelprograma
IncludeMACROS.TXT
.MODELSMALL
.DATA
Aquivanlosdatos
.CODE
Inicio:
Aquiseinsertaelcdigodelprograma
.STACK
Sedefinelapila
EndInicio
Terminanuestroprograma

Recibirlasnovedadespormail

Guardar:

WikiCienciaCC20002008AlgunosderechosreservadosTrminosyCondiciones

http://www.wikiciencia.org/informatica/programacion/asm/index.php

41/41

Das könnte Ihnen auch gefallen