Documentos de Académico
Documentos de Profesional
Documentos de Cultura
ensambladorplana1.70
Manualdelprogramador
TomaszGrysztar
Page2
Page3
Contenido
1Introduccin
1.1Informacingeneraldelcompilador..............................
1.1.1Requisitosdelsistema.........................
1.1.2Usodelcompilador............................
1.1.3Comandosdetecladoeneleditor....................
1.1.4OpcionesdelEditor.............................11
1.1.5Ejecucindecompiladordelneadecomandos...............11
1.1.6Comandomensajesdelcompiladordelnea..................12
1.1.7Losformatosdesalida............................13
1.2sintaxisAsamblea...............................13
1.2.1sintaxisdeinstrucciones..........................13
1.2.2Lasdefinicionesdedatos............................15
1.2.3Constantesyetiquetas.........................16
1.2.4expresionesnumricas........................17
1.2.5Lossaltosyllamadas............................19
1.2.6valoresdetamao..............................19
7
7
7
8
9
Conjunto2Instruccin
2.1Lasinstruccionesdearquitecturax86......................21
2.1.1instruccionesdemovimientodedatos.....................21
2.1.2Tipoinstruccionesdeconversin.....................23
2.1.3instruccionesaritmticasbinarias....................23
2.1.4instruccionesaritmticasdecimales...................25
2.1.5Instruccioneslgicas..........................26
2.1.6instruccionesdetransferenciadecontrol.....................28
2.1.7E/Sinstrucciones............................31
2.1.8operacionesdeCuerdas...........................32
2.1.9instruccionesdecontroldelabandera.......................33
01/02/10operacionescondicionales........................34
2.1.11instruccionesMiscelneos......................35
2.1.12Lasinstruccionesdelsistema..........................36
01/02/13FPUinstrucciones...........................38
21
Pgina4
CONTENIDOS
2.1.14instruccionesMMX..........................42
2.1.15instruccionesSSE...........................44
02/01/16instruccionesSSE2...........................48
02/01/17instruccionesSSE3...........................51
2.1.18AMD3DNow!instrucciones......................53
2.1.19Lasinstruccionesdelmododelargosx8664.................54
02/01/20instruccionesSSE4...........................57
02/01/21instruccionesAVX...........................61
01/02/22instruccionesAVX2..........................65
01/02/23conjuntosauxiliaresdeinstruccionescomputacionales............68
02.01.24Otrasextensionesdeconjuntodeinstrucciones.................74
Directivas2.2Control...............................77
2.2.1constantesnumricas.........................77
2.2.2ensamblajecondicional.........................78
2.2.3bloquesderepeticindeinstrucciones...................80
2.2.4espaciosdedireccionamiento...........................81
2.2.5Otrasdirectivas............................83
2.2.6pasesmltiples............................84
Directivas2.3preprocesador............................86
2.3.1Lainclusindearchivosdeorigen.........................86
2.3.2Lasconstantessimblicas..........................87
2.3.3macroinstrucciones...........................88
2.3.4Estructuras...............................96
2.3.5macroinstruccionesRepeticin.....................97
2.3.6preprocesamientocondicional......................99
2.3.7Ordendeprocesamiento..........................100
2.4directivasFormatter.............................103
2.4.1MZejecutable............................103
2.4.2PortableExecutable.........................104
2.4.3CommonObjectFileFormat....................105
2.4.4Formatoejecutableyenlazable..................106
3deprogramacindeWindows
3.1encabezadosbsicos.................................110
3.1.1Estructuras...............................110
3.1.2Importaciones................................113
3.1.3Procedimientos(32bit)..........................114
3.1.4Procedimientos(64bit)..........................116
3.1.5Personalizacindelosprocedimientos.......................117
3.1.6Exportaciones................................119
3.1.7Modelodeobjetoscomponentes......................119
3.1.8Recursos...............................120
109
Page5
CONTENIDOS
3.1.9Codificacindetexto.............................124
3.2encabezadosextendidos...............................124
3.2.1Parmetrosdelprocedimiento........................125
3.2.2Estructuracindelafuente........................126
Page6
CONTENIDOS
Pgina7
Captulo1
Introduccin
Estecaptulocontienetodalainformacinmsimportantequenecesitaparacomenzarautilizarel
ensambladorplana.Sitieneexperienciaprogramadordelenguajeensamblador,debeleer
almenosestecaptuloantesdeutilizarestecompilador.
1.1InformacingeneraldelCompilador
EnsambladorFlatesuncompiladordelenguajeensambladorrpidoparalosprocesadoresdearquitecturax86,
quehacemltiplespasesparaoptimizareltamaodecdigodemquinagenerado.Esauto
compilableyseproporcionanversionesparadiferentessistemasoperativos.Estndiseados
paraserutilizadodesdelalneadecomandosdelsistemaynodebendiferirenelcomportamiento.
EstedocumentodescribetambinlaversinIDEdiseadoparaelsistemadeWindows,
queutilizalainterfazgrficaenlugardelaconsolaytieneeleditorintegrado.Pero
desdeelpuntodevistadecompilacintieneexactamentelamismafuncionalidadquetodalaconsola
versiones,ymstardelaspartes(apartirfrom1.2)deestedocumentosoncomunesconotros
liberaciones.ElejecutabledelaversinIDEsellamafasmw.exe,mientrasfasm.exeesla
versindelneadecomandos.
1.1.1Requisitosdelsistema
Todaslasversionesrequierenqueelprocesadorde32bitslaarquitecturax86(almenos80.386),apesardeque
puedeproducirprogramasparalosprocesadoresdearquitecturax86de16bits,tambin.ConsoladeWindows
versinrequierecualquiersistemaoperativoWin32,mientrasquelaversindeWindowsGUIrequierela
Win32GUIsistemadelaversin4.0osuperior,porloquedeberafuncionarentodoslossistemascompatibles
conWindows95.
Lafuenteejemploproporcionadoconestaversinrequerirtienesvariabledeentorno
Comprendenlamodalidadalarutadeldirectoriodeincluir,queeslapartedelensambladorplana
paquete.Sidichavariableyaexisteenelsistemaycontienelasrutasutilizadasporalgunos
otroprograma,essuficienteparaaadirlanuevarutaalamisma(losdiferentescaminosdebenser
separadosconpuntoycoma).Sinodeseadefinircomovariableenelsistema,
7
Pgina8
CAPTULO1.INTRODUCCIN
onosabencmohacerlo,puedesconfigurarloparaelIDEensambladorplanasloeditando
elarchivofasmw.iniensudirectorio(estearchivoescreadoporfasmw.execuandoesejecutado,
perotambinsepuedecrearportimismo).Enestecaso,debeagregarelvalorIncluya
enlaseccindeMedioAmbiente.Porejemplo,cuandohayadesembaladolaAsambleadelaplana
archivosBLEReneldirectorioc:\fasmw,debeponerlasdoslneassiguientesensu
c:\fasmw\fasmw.iniarchivo:
[MedioAmbiente]
Incluir=c:\fasmw\include
SinosedefinelavariabledeentornoINCLUDEcorrectamente,ustedtendrquemanualmente
proporcionarlarutacompletaparaelWin32incluyeencadaprogramaquedeseacompilar.
1.1.2Usodelcompilador
Paraempezaratrabajarconensambladorplana,simplementehagadoblecliceneliconodearchivofasmw.exe,
oarrastreeliconodelarchivofuenteenlamisma.Tambinpuededespusabrirnuevosarchivosdeorigen
conelcomandoAbrirenelmenArchivo,oarrastrandolosarchivoseneleditor
ventana.Puedetenervariosarchivosdeorigenseabrieronalavez,cadaunoestrepresentado
porunbotnpestaaenlaparteinferiordelaventanadeleditor.Paraseleccionarelarchivoparalaedicin,hagaclicen
enlafichacorrespondienteconelbotnizquierdodelratn.Compiladorpordefectofuncionasobrela
archivoqueseesteditandoactualmente,peroustedpuedeforzarloaoperarsiempreenalgunaenparticular
archivohaciendoclicenlafichacorrespondienteconelbotnderechodelratnyseleccionandolaAsignacin
comandos.Slounnicoarchivopuedeserasignadoacompiladoralmismotiempo.
Cuandoelarchivodeorigeneslisto,puedeejecutarelcompiladorconelcomandoCompilar
enelmenEjecutar.Cuandolacompilacinserealizacorrectamente,elcompiladormostrarel
Resumendelprocesodecompilacindelocontrario,semostrarlainformacinsobreelerror
queocurrieron.ResumenCompilacinincluyelainformacindelacantidaddepasesfue
hecho,lacantidaddetiempoquetom,ycuntosbytesseescribieronenelarchivodedestino.
TambincontieneuncampodetextollamadoDisplay,enlaqueaparecerningnmensajedela
visualizacindirectivasenfuente(ver2.2.5).Resumendeerrorconsistealmenosenelerror
mensajeyuncampodetextodevisualizacin,quetieneelmismopropsitoqueelanterior.Sielerrorestrelacionado
enciertalneaespecficadecdigofuente,elresumencontienetambinuncampodetextodeinstrucciones,
quecontieneelformulariodepreprocesadodelainstruccinqueprovocunerrorsielerror
ocurridodespusdelaetapadepreprocesador(delocontrarioesvaca)ylalistadefuentes,que
muestralaubicacindetodaslaslneasdelasfuentesrelacionadasconesteerror,cuandoseseleccionaunalneade
estalista,queseralmismotiemposeleccionadoenlaventanadeleditor(sielarchivoquecontiene
esalneanoestcargado,seaadirautomticamente).
ElcomandoRuntambinejecutaelcompilador,yencasodeunacompilacinexitosa
seejecutaelprogramacompiladosisloesunodelosformatosquesepuedeejecutarenWindows
medioambiente,delocontrarioobtendrunmensajedequeestetipodearchivonosepuedeejecutar.
Siseproduceunerror,elcompiladormuestrainformacinsobrelenlamismaformaquesiel
Comandodecompilacinseutiliz.
Page9
1.1.PANORAMACOMPILADOR
Sielcompiladorsequedasinmemoria,puedeaumentarlaasignacindememoriaenel
Dilogodeconfiguracindelcompilador,quepuedecomenzardesdeelmenOpciones.Puedeespecificar
nolacantidaddekilobytesqueelcompiladordebeusar,ytambinlaprioridaddela
hilodecompilador.
Sideseaslounainstanciadeprogramaestfuncionando,agregueelOneInstanceOnly=1
elestablecimientodelaseccinOpcionesdelarchivofasmw.ini.
1.1.3Comandosdetecladoeneleditor
Enestaseccinseenumeranlostodosloscomandosdetecladodisponiblescuandosetrabajaconeleditor.Excepto
paralasclavesquefigurancomolosespecficos,quesoncomunesconelIDEdeDOSparaensambladorplana.
Movimiento:
Flechaizquierda
Flechaderecha
Flechaarriba
Flechahaciaabajo
Ctrl+Flechaizquierda
Ctrl+Flechaderecha
Casa
Fin
moveruncarcteralaizquierda
moveruncarcteraladerecha
moverunalneahaciaarriba
moverunalneahaciaabajo
moverunapalabraalaizquierda
moverunapalabracorrecta
desplazarsealprincipiodelalneade
desplazarsealfinaldelalnea
RePg
AvPg
Ctrl+Inicio
Ctrl+Fin
Ctrl+RePg
Ctrl+AvPg
moverunapginahaciaarriba
moveralapginasiguiente
iralaprimeralneadelapgina
moveralaltimalneadelapgina
iralaprimeralneadetexto
pasaralaltimalneadetexto
CadaunadelasteclasdemovimientoprensadasconShiftseleccionatexto.
Edicin:
Insertar
Alt+Insert
Borrar
Retroceso
Ctrl+Retroceso
Alt+Retroceso
Ctrl+Y
F6
insertinterruptordemodo/sobreescritura
cambiarbloqueshorizontales/verticales
borrarelcarcteractual
borrarelcarcteranterior
eliminarpalabraanterior
deshacerlaoperacinanterior(tambinCtrl+Z)
eliminarlneaactual
duplicarlalneaactual
Pgina10
10
CAPTULO1.INTRODUCCIN
Operacionesdebloque:
Ctrl+Insert
Shift+Insert
Ctrl+Supr
Shift+Supr
Ctrl+A
bloquedecopiaenelportapapeles(tambinCtrl+C)
pastadebloquedesdeelportapapeles(tambinCtrl+V)
Eliminarbloque
bloquedecorteenelportapapeles(tambinCtrl+X)
seleccionartodoeltexto
Bsqueda:
F5
F7
Shift+F7
Ctrl+F7
iralaposicinespecificada(tambinCtrl+G)
encontrar(tambinCtrl+F)
encontrarsiguiente(tambinF3)
reemplazar(tambinCtrl+H)
Recopilar:
F9
Ctrl+F9
Shift+F9
Ctrl+F8
compilaryejecutar
compilarslo
asignararchivoactualcomoarchivoprincipalparacompilar
compilarygenerarinformacindesmbolos
Otrasclaves:
F2
Shift+F2
F4
guardararchivoactual
guardarelarchivoconunnuevonombre
archivodecarga
Ctrl+N
Ctrl+Tab
Ctrl+Shift+Tab
Alt+[19]
Esc
Alt+X
Ctrl+F6
Alt+flechaizquierda
Alt+flechaderecha
Alt+Flechaarriba
Alt+Flechaabajo
Alt+Supr
crearnuevoarchivo
cambiaralasiguientefoto
cambiaralarchivoanterior
cambiaraarchivodenmerodado
archivoactualcerca
cerrartodoslosarchivosysalir
calculadora
desplazamientoalaizquierda
derechodedesplazamiento
desplazarsehaciaarriba
desplcesehaciaabajo
descartardeshacerinformacin
Teclasespecficas:
Pgina11
1.1.PANORAMACOMPILADOR
F1
Alt+F1
11
buscarlapalabraclaveenelarchivodeayudaseleccionado
contenidodelarchivodeayudaseleccionado
1.1.4OpcionesdelEditor
EnelmenOpcionesresidetambinunalistadeopcionesdeleditor,quepuedeseractivadoodesactivado
yafectarelcomportamientodeeditor.Estaseccindescribeestasopciones.
Seleccinsegurocuandoustedactivaestaopcin,elbloqueseleccionadonuncaseelimina
alempezaraescribir.Alhacercualquieroperacindecambiodetexto,laseleccines
cancelado,noafectaenmodoalgunoeltextoquesehaseleccionado,yluegoelcomando
sellevaacabo.Cuandoestaopcinestdesactivadayustedcomienceaescribir,laseleccinactuales
descartado,tambinteclaSuprsimplementeborraelbloqueseleccionado(cuandolaseleccinseguraesten
ustedtienequeutilizarlasteclasCtrl+Supr).
Soportesautomticoscuandoescribecualquieradelossoportesdeapertura,elcierrees
ponerautomticamentejustodespusdeintercalacin.
GuionesautomticoscuandosepulsaIntroparainiciarunanuevalnea,elcursorsemueveen
lanuevalneaenlamismaposicin,dondeenlalneaanteriorelprimercaracternoblanco
secoloca.Siustedestrompiendolalnea,yhabaalgunoscaracteresnoenblancodespus
elcursorcuandosepulsaENTER,setrasladanalanuevalneaenlaposicinde
guin,loscaracteresenblancoqueestabanentreelcursoryellossonignorados.
TabulacinSmartalpulsarTab,quetemuevealaposicinjustopordebajo
lasiguientesecuenciadecaracteresnoenblancoenlalneaanteriorapartirdelaposicin
justoporencimadedondeestaba.Sitalsecuencianoseencuentraenlalneadearriba,lanorma
seutilizaeltamaodetabulacinde8caracteres.
Llenadoptimodeahorroconestaopcinactivada,cuandoseguardaelarchivo,todoenblanco
reassellenanconlacombinacinptimadelaspestaasylosespaciosparaobtenerelarchivomspequeo
tamao.Siestaopcinestdesactivada,lasreasenblancoseguardancomollenodeespacios(perolosespacios
enlosextremosdelaslneasnoseguardan).
Revivelasteclasmuertascuandoestaopcinestactivada,sedesactivadentrodeleditordel
llamadateclasmuertas(teclasquenogeneraninmediatamenteelcarcter,sinoqueesperasen
unaprximaclaveparadecidirqupersonajeparaponerporlogeneralseintroduceelcarcterdeunmuerto
clavepulsandounatecladeespaciodespusdel).Puedesertilsilaclaveparalaintroduccindealgunasdelas
caracteresqueustednecesitaparaentraramenudoenlafuentedeensamblajeesunaclavemuertosyquenolohacen
Necesitarestafuncionalidadparaescribirprogramas.
1.1.5Ejecucindecompiladordelneadecomandos
Parallevaracabolacompilacindelalneadecomandosquenecesitaparaejecutarelfasm.exe
ejecutable,proporcionandodosparmetrosprimerodebeserelnombredelarchivodeorigen,elsegundodebe
serelnombredelarchivodedestino.Sinosedaelsegundoparmetro,elnombredearchivodesalida
seradivinadoautomticamente.Despusdemostrarinformacinsobreelprograma
nombreyversin,compiladorleernlosdatosdelarchivofuenteycompilarlo.Cuandoel
Pgina12
12
CAPTULO1.INTRODUCCIN
compilacintienexito,compiladorescribirelcdigogeneradoparaelarchivodedestino
ymostrarelresumendeprocesodecompilacindelocontrario,semostrarlainformacin
sobreelerrorquesehaproducido.
Elarchivodeorigendebeserunarchivodetextoysepuedecrearencualquiereditordetexto.Lnea
descansossonaceptadasenDOSyestndaresdeUnix,tabuladoressontratadoscomoespacios.
Enlalneadecomandostambinsepuedeincluirlaopcinmseguidodeunnmero,que
especificacuntoskilobytesdememoriaensambladorplanadebenutilizaralmximo.Encaso
delaversinDOSestasopcioneslimitasloelusodelamemoriaextendida.Laopcinp
seguidodeunnmerosepuedeutilizarparaespecificarellmiteparaelnmerodepasadaselensamblador
realiza.Sielcdigonosepuedegenerardentrodedeterminadacantidaddepases,laasamblea
sedarporterminadoconunmensajedeerror.Elvalormximodeesteajustees65536,
mientrasqueellmitepredeterminado,seusacuandonohaytalopcinseincluyeenlalneadecomandos,es100.
Tambinesposiblelimitarelnmerodepasadaselensambladorrealiza,conelp
opcinseguidoporunnmeroqueespecificaelnmeromximodepases.
Nohayopcionesdelneadecomandosqueafectaranalasalidadelcompilador,plana
ensambladorrequieresloelcdigofuenteparaincluirlainformacinquerealmentenecesita.Para
ejemplo,paraespecificarelformatodesalidaseespecificamedianteelusodeladirectivaenelformato
apartirdelafuente.
1.1.6Comandomensajesdelcompiladordelnea
Comosehaindicadoanteriormente,despusdelacompilacinexitosa,elcompiladormuestralacompila
Resumenmento.Incluyelainformacindelacantidaddepasesquesehizo,cunto
tiempoquetom,ycuntosbytesseescribenenelarchivodedestino.Lasiguiente
esunejemplodelresumencompilacin:
ensambladorplanaversin1.70(16384kilobytesdememoria)
38pases,5,3segundos,77.824bytes.
Encasodeerrorduranteelprocesodecompilacin,elprogramamostrarunerrorsaje
salvia.Porejemplo,alcompiladornopuedeencontrarelarchivodeentrada,semostrarlasiguiente
mensaje:
ensambladorplanaversin1.70(16384kilobytesdememoria)
error:archivodeorigennoseencuentra.
Sielerrorestconectadoconunaparteespecficadelcdigofuente,lalneadefuentequecaus
Tambinsemuestraelerror.Tambinlacolocacindeestalneaenlafuentesedaparaayudar
ustedencontraresteerror,porejemplo:
ensambladorplanaversin1.70(16384kilobytesdememoria)
example.asm[3]:
turba
hacha,1
error:instruccinilegal.
Pgina13
1.2.ASAMBLEASINTAXIS
13
Estosignificaqueenlaterceralneadelcompiladorarchivoexample.asmhaencontradoun
instruccinnoreconocida.Cuandolalneaquecauselerrorcontieneunamacroinstruccin,
tambinlalneadedefinicinmacroinstructionquegenerlainstruccinerrneaes
mostrada:
ensambladorplanaversin1.70(16384kilobytesdememoria)
example.asm[6]:
stoschar7
example.asm[3]stoschar[1]:
turba
al,char
error:instruccinilegal.
Significaqueelmacroinstructionenlasextalneadelarchivoexample.asmgenera
unainstruccinnoreconocidaconlaprimeralneadesudefinicin.
1.1.7Losformatosdesalida
Pordefecto,cuandonohayningunadirectivaformatoenelarchivodeorigen,ensambladorplanasimplementepone
cdigosdeinstruccingeneradosenlaproduccin,creandodeestamaneraarchivobinarioplana.Pordefecto
generacdigode16bits,perosiempresepuedeconvertirenelmodode16bitso32bitspor
utilizandoUSE16oUSE32Directiva.Algunosdelosformatosdesalidacambiaalmodode32bits,
cuandoseseleccionamsinformacinsobrelosformatosdelosquepuedeelegirsepuedeencontraren
2.4.
Laextensindearchivodedestinoseeligeautomticamenteporelcompilador,enfuncinde
elformatodesalidaseleccionado.
Todoelcdigodesalidasiempreestenelordenenqueseinscribienelarchivodeorigen.
1.2sintaxisAsamblea
Lainformacinproporcionadaacontinuacinestdestinadoprincipalmenteparalosprogramadoresdeensambladorque
hanestadoutilizandoalgunosotroscompiladoresdemontajeantes.Sieresprincipiante,usteddebe
buscarlostutorialesdeprogramacindeensamblaje.
EnsambladorplanapordefectousalasintaxisdeIntelparalasinstruccionesdemontaje,al
aunquesepuedepersonalizarusandolascapacidadesdepreprocesador(macroinstruccionesy
constantessimblicas).Tambintienesupropioconjuntodelasdirectivaslasinstruccionespara
compilador.
Todoslossmbolosdefinidosdentrodelasfuentesdemaysculasyminsculas.
Sintaxis1.2.1Instruccin
Lasinstruccionesenlenguajeensambladorestnseparadosporsaltosdelnea,yunainstruccin
seesperaparallenarlalneadetexto.Siunalneacontieneunpuntoycoma,aexcepcindela
Pgina14
14
CAPTULO1.INTRODUCCIN
BitsoperadorBytes
byte
palabra
dword
fword
pword
QWORD
Tbyte
tword
dqword
xword
qqword
yword
8
16
32
48
48
64
80
80
128
128
256
256
1
2
4
6
6
8
10
10
16
16
32
32
Tabla1.8:Tamaooperadores.
puntoycomadentrodelascadenasentrecomillas,elrestodeestalneaeselcomentarioycompilador
ignora.Siunalneaterminaconcarcter\(eventualmenteelpuntoycomaycomentariopuede
lasiguen),lasiguientelneaseadjuntaenestepunto.
Cadalneaenlafuenteeslasecuenciadeelementos,quepuedenserunodelostrestipos.Uno
tiposonloscaracteresdesmbolos,quesonloscaracteresespecialesquesonelementosindividuales
inclusocuandonoestnseparadosdelosotros.Cualquieradelosde+*/=<>()[]{}:,|&#'esel
carcterdesmbolo.Lasecuenciadelosotrospersonajes,separadodeotrosartculoscon
obienespaciosocaracteresdesmbolosenblanco,esunsmbolo.Sielprimercarcterdesmboloes
yaseasimpleodoblecita,queseintegraconcualquiersecuenciadecaracteresquelesiguen,incluso
lasespeciales,enunacadenaentrecomillas,quedebeterminarconelmismocarcter,con
quecomenz(lacomillasimpleodoble)sinembargo,sihaydospersonajestan
enunafila(sinningnotrocarcterentreellos),queseintegranencitado
cadenacomoslounodeellosylacadenaentrecomillassigueacontinuacin.Lossmbolosdeotros
decaracteresdesmbolosycadenasentrecomillassepuedenutilizarcomonombres,porloquetambinsellamala
nombrarsmbolos.
Cadainstruccinconstadelatecladeaccesoylosdiferentesnmerodeoperandos,
separadosporcomas.Eloperandosepuederegistrar,valorinmediatoounaadministracindedatos
vestidaenlamemoria,tambinpuedeestarprecedidaporeloperadorparadefinireltamaooanularsutamao
(Cuadro1.8).Losnombresdelosregistrosdisponiblessepuedenencontrarenelcuadro1.9,sustamaosnopuedenser
anulado.Valorinmediatosepuedeespecificarcualquierexpresinnumrica.
Cuandooperandoesundatoenlamemoria,ladireccindelosdatos(tambincualquierexnumrica
compresin,peropuedecontenerregistros)debeirentrecorchetesoprecedida
poreloperadorPTR.Porejemplomoveaxinstruccin,3pondrelvalorinmediatoen3
elregistroeaxeax,movinstruccin,[7]pondrelvalorde32bitsdeladireccin
7eneaxyelbytedelainstruccinmov[7],3pondrelvalorinmediatoen3
Pgina15
1.2.ASAMBLEASINTAXIS
Tipo
General
Segmento
Control
Depurar
FPU
MMX
SSE
AVX
15
Bits
8
16
32
16
32
32
80
64
128
256
al
cl
dl
bl
ah
ch
dh
bh
hacha cx
dx
bx
sp
pb
si
di
eax
ecx
edx
ebx
esp
ebp
esi
edi
es
cs
ss
ds
fs
gs
cr0
CR2
cr3
cr4
DR0
DR1
dr2
dr3
DR6 dr7
st0
st1
st2
st3
st4
st5
st6
st7
mm0 mm1 mm2 mm3 mm4 mm5 mm6 mm7
xmm0XMM1XMM2XMM3XMM4xmm5xmm6xmm7
ymm0ymm1ymm2ymm3ymm4ymm5ymm6ymm7
Tabla1.9:Registros.
elbyteenladireccin7,tambinsepuedeescribircomo7,3ptrbytemov.Paraespecificarqu
registrodesegmentosedebeutilizarparaeldireccionamiento,nombrederegistrodesegmentosiguiconun
colondebeserpuestojustoantesdelvalordedireccin(dentrodeloscorchetesodespus
eloperadorptr).
1.2.2Lasdefinicionesdedatos
Paradefinirlosdatosoreservarunespacioparaello,utiliceunadelasDirectivasquefiguranenlatabla1.10.
Ladirectivadedefinicindedatosdebeserseguidoporunaomsdeexpresinnumrica
siones,separadosporcomas.Estasexpresionesdefinenlosvaloresparalasclulasdedatosdetamao
dependiendodequeseutilizaladirectiva.Porejemplodb1,2,3definirlostresbytes
delosvalores1,2y3respectivamente.
Lasdirectivasdbydutambinaceptanlosvaloresdecadenacotizadosdecualquierlongitud,que
seconvertirenlacadenadebytescuandoseutilizadbyenlacadenadepalabrasconpuestaacero
bytealtocuandoseutilizadu.Porejemplodb'abc'definirlostresbytesdevalores
61,62y63.
Ladirectivadpysusinnimodfaceptanlosvaloresqueconsisteendosnumrica
expresionesseparadospordospuntos,elprimervalorseconvertirnenlapalabraaltayla
segundovalorseconvertirenladoblepalabrabajadelvalordelpunterolejos.Tambinaceptadd
talesindicadoresqueconsistenendosvaloresdelaspalabrasseparadaspordospuntos,ydtaceptala
palabraylapalabradecuatrovaloresseparadoscondospuntos,lapalabraquadsealmacenaprimero.La
Directivadtconlaexpresinindividualcomoparmetrosloaceptavaloresdepuntoflotantey
creadatosenformatoFPUdobleprecisinextendida.
Cualquieradeladirectivaanteriorpermiteelusodeloperadordupespecialparahacermltiples
copiasdelosvaloresdados.Elrecuentodelosduplicadosdebeprecederaesteoperadoryelvalor
duplicardebeseguirinclusopuedeserlacadenadevaloresseparadosporcomas,
perocomoconjuntodevalorestienequesercerradoconparntesis,comodb5dup(1,2),que
Pgina16
16
CAPTULO1.INTRODUCCIN
definecincocopiasdelasecuenciadadadedosbytes.
Elarchivoesunadirectivaespecialysusintaxisesdiferente.Estadirectivaincluyeuna
cadenadebytesdearchivoydebeserseguidoporelnombredelarchivocitado,acontinuacin,opcionalmente
expresinnumricaespecificandocompensadoenelarchivoprecedidoporelcolon,acontinuacin,opcionalmentetambin
Comayexpresinnumricaespecificandocantidaddebytesparaincluir(sinohayrecuentoes
seespecifica,todoslosdatoshastaelfinaldelarchivoseincluye).Porejemploelarchivo'data.bin"voluntad
incluirelarchivodeconjuntocomodatosbinariosyarchivos'data.bin':10h,4incluirslocuatro
bytesquecomienzanen10hoffset.
Tamao DefinirlaReserva
(Bytes)
datos
datos
1
2
4
6
8
10
db
expediente
dw
du
dd
dp
df
dq
dt
rb
rw
rd
rp
rf
rq
rt
Tabla1.10:directivasdeDatos.
Ladirectivadereservasdatosdebeserseguidoporunasolaexpresinnumrica,
yestevalordefinecmodebenreservarsemuchasclulasdeltamaoespecificado.Todoslosdatos
directivasDefinicintambinaceptanel?valor,loquesignificaqueestaclulanodebeser
inicializadaacualquiervaloryelefectoeselmismoquemedianteelusodelareservadedatos
Directiva.Losdatosnoinicializadosnosepuedenincluirenelarchivodesalida,porloquesusvalores
debesersiempreconsideradodesconocido.
1.2.3Constantesyetiquetas
Enlasexpresionesnumricastambinsepuedeutilizarconstantesoetiquetasenlugardenmeros.
Paradefinirlaconstanteolaetiquetaquedebeutilizarlasdirectivasespecficas.Cadaetiquetapuedeser
defineunasolavezyesaccesibledesdeelcualquierlugardeorigen(inclusoantesdequefuera
definido).Constantsepuederedefinirmuchasveces,peroenestecasosloesaccesible
despusdequesedefini,yessiempreigualalvalordelaltimadefinicinantesdellugar
dondeseutiliza.Cuandounaconstantesedefineunasolavezenlafuente,escomolaetiqueta
accesibledesdecualquierlugar.
Ladefinicindeconstanteconsisteenelnombredelaconstanteseguidoporelcarcter=
ylaexpresinnumrica,quedespusdelclculoseconvertirenelvalordelaconstante.
Estevalorsecalculasiempreenelmomentodelaconstantesedefine.Porejemplo,usted
Pgina17
1.2.ASAMBLEASINTAXIS
17
puededefinirconteoconstantemedianteelusodelacuentadedirectiva=17,yluegousarloenel
instruccionesdemontaje,comocxmov,cuentanqueseconvertirencxmov,17duranteel
procesodecompilacin.
Haydiferentesmanerasdedefiniretiquetas.Elmssimpleesseguirelnombredelaetiqueta
porelcolon,estadirectivaansepuedeseguirporlaotrainstruccinenelmismo
lnea.Sedefinelaetiquetacuyovaloresigualaldesplazamientodelpuntodondeestdefinido.
Estemtodoseutilizageneralmenteparaetiquetarloslugaresencdigo.Laotramaneraesseguirel
nombredeetiqueta(sindospuntos)poralgunosDirectivadedatos.Definelaetiquetaconelvalor
igualadesplazamientodecomienzodedatosdefinidos,yrecordadocomounaetiquetaparalosdatoscon
tamaodelaceldaespecificadaparadichaDirectivadedatosenlatabla1.10.
Laetiquetapuedesertratadacomoconstantedevalorigualaldesplazamientodecdigoodatosetiquetados.
Porejemplocuandosedefinenlosdatosusandoladirectivaetiquetadacarbndb224,paraponerel
desplazamientodeestosdatosenregistroBXusteddebeutilizarbxmov,instruccinchar,yponer
elvalordebytedirigidaporelsellocharadlregistro,debeutilizardlmov,[Char]
(Omovdl,ptrchar).Perocuandointentamontarmovax,[Char],causar
unerror,porquefasmcomparalostamaosdeoperandos,quedeberanseriguales.Usted
puedeforzarelmontajequelainstruccinutilizandoeltamaodeanulacin:movax,palabra[Char],pero
recordarqueestainstruccinleerlosdosbytescomenzandoenladireccinchar,mientras
sedefinecomoununbyte.
Laltimaylaformamsflexibleparadefiniretiquetasesusardirectivaetiqueta.Este
Directivadebeserseguidoporelnombredelaetiqueta,entoncesoperadortamaoopcionalmenteydespus
Tambinopcionalmentealoperadorylaexpresinnumricaquedefineladireccinenlaque
estaetiquetadebedefinirse.PorejemploetiquetawcharpalabraenCARcterdefinirunnuevo
etiquetaparalosdatosde16bitsenladireccindecarbn.Ahoralainstruccinmovax,[wchar]
serdespusdelacompilacindelmismocomomovax,palabra[Char].Sinoseespecificaningunadireccin,
Directivaetiquetadefinelaetiquetaalcorrientedeoffset.Asmov[wchar],57.568copiar
dosbytesmientrasmov[Char],224copiarunbytealamismadireccin.
Laetiquetacuyonombrecomienzaconunpuntoestratadocomosellolocal,ysunombrees
vinculadoalnombredelaltimaetiquetaglobal(connombrecomienzaconnadaperopunto)
paraqueelnombrecompletodeestaetiqueta.Asqueustedpuedeutilizarelnombrecorto(empezandoporpunto)
deestaetiquetaencualquierlugarantesdedefinirlasiguienteetiquetaglobal,yenlosotroslugares
ustedtienequeutilizarelnombrecompleto.Etiquetaempezandocondospuntossonlaexcepcinque
soncomoglobal,peronoseconviertanenelnuevoprefijoparalasetiquetaslocales.
Elnombresignifica@@etiquetaannima,puedehaberdefinidomuchosdeellosenel
fuente.Smbolob(orequivalente)hacereferenciaalaetiquetaannimaprecedentemscercano,
smbolofreferenciasdelselloannimacercanasiguiente.Estossonsmboloespecial
entremaysculasyminsculas.
1.2.4expresionesnumricas
Enlosejemplosanteriorestodaslasexpresionesnumricasfueronlosnmerossimples,constantes
oetiquetas.Peropuedensermscomplejos,medianteelusodelosoperadoresaritmticosolgicos
Pgina18
18
CAPTULO1.INTRODUCCIN
paraclculosentiempodecompilacin.Todosestosoperadoresconsusvaloresdeprioridadseenumeran
enlatabla1.11.Lasoperacionesconvalordeprioridadmsaltasecalcularnenprimerlugar,
porsupuestopuedecambiarestecomportamientoponiendoalgunaspartesdelaexpresinenparntesis.
El+,,*y/sonoperacionesaritmticasestndar,modcalculaelresto
deladivisin.LaAND,OR,XOR,shl,shrynorealizanlasmismasoperacioneslgicas
comolasinstruccionesdemontajedeesosnombres.Elrvaypltsonoperadoresunariosespeciales
querealizanconversionesentrediferentestiposdedirecciones,quepuedenserutilizadosslo
conalgunosdelosformatosdesalidaysusignificadopuedevariar(vase2.4).
Losclculosaritmticosylgicosseprocesancomosifueranoperados
precisininfinitanmerosde2adic,yensambladorsealizaunerrordedesbordamientosiporque
desuslimitacionesnoesmesapararealizarelclculorequerido,osielresultado
esnmerodemasiadograndeparacaberenrango,yaseaconosinsignodelaunidaddedestino
tamao.Sinembargonoesas,EXCLUSIVOySHRsonexcepcionesaestareglasielvalor
especificadoporlaexpresinnumricatienequeencajarenunaunidaddetamaoespecificado,ylosargumentos
paraunajusteoperacinenqueeltamao,laoperacinserealizaconprecisinlimitada
aesetamao.
OperadoresdePrioridad
0
1
2
3
4
5
6
*
/
mod
y
o
xor
shl
shr
no
rva
plt
Tabla1.11:Aritmticayoperadoreslgicosporprioridad.
Losnmerosdelaexpresinsonpordefectotratadocomoundecimal,losnmerosbinarios
debetenerlaletrabadjuntaalfinal,elnmerooctaldebeterminarconocarta,
nmeroshexadecimalesdebencomenzarconcaracteres0x(comoenlenguajeC)oconel$
carcter(comoenlenguajePascal)oquedebenterminarconletrah.Tambincitlacadena,
cuandoseencuentranenlaexpresin,seconvertirennmeroElprimercarcter
convertidoenelbytemenossignificativodelnmero.
Laexpresinnumricautilizadacomounvalordedireccintambinpuedecontenerningunodegenerales
registrosutilizadosparaabordar,sepuedensumarymultiplicarporlosvaloresapropiados,
Pgina19
1.2.ASAMBLEASINTAXIS
19
yaquesepermiteparalasinstruccionesdearquitecturax86.
Tambinhayalgunossmbolosespecialesquesepuedenutilizardentrodelaexpresinnumrica.
Enprimerlugaresde$,queessiempreigualalvalordelacorrientededesplazamiento,mientras$$esigualalabase
direccindelespaciodedireccionamientoactual.Elotroes%,queeselnmerodelacorriente
repetirenpartesdecdigoqueserepiteusandoalgunasdirectivasespeciales(vase2.2).Hay
Tambin%tsmbolo,queessiempreigualalamarcadetiempoactual.
Cualquierexpresinnumricapuedeconsistirtambinenelvalordepuntoflotante(Asambleaplana
BLERnopermiteningunaoperacindepuntoflotanteentiempodecompilacin)enelmbitocientfico
notacin,quepuedeterminarconlaletrafparaserreconocido,delocontrario,debencontener
almenosunodelos.ocaracteresE.As1,0,1E0y1fdefinirelmismopuntoflotante
valor,aunquesimples1defineunvalorentero.
1.2.5Lossaltosyllamadas
Eloperandodecualquierinstruccindesaltoollamadapuedeserprecedidanosloporeltamao
operador,sinotambinporunodelosoperadoresdetipoespecificacindeelsalto:corto,cercade
lejos.Porejemplo,cuandoensambladorestenelmodode16bits,DWORDJMPinstruccin[0]se
convertidoenelsaltolargoycuandoensambladorestenmodode32bits,seconvertirenelprximo
saltar.Paraforzarestainstruccinparasertratadodemaneradiferente,utiliceeljmpcercadword[0]
ojmplejosdword[0]forma.
Cuandooperandodecercadesaltoeselvalorinmediato,ensambladorgenerarla
mscortovariantedeestainstruccindesaltosiesposible(peronocrearinstruccinde32bits
enelmodode16bitsniinstruccinde16bitsenelmodode32bits,amenosquehayaunoperadordetamao
declarandol).Alespecificareltipodesaltopuedesobligarloagenerarsiemprevariantelarga
(Porejemplojmpcercade0)oparagenerarsiemprevariantecortayterminarconuna
errorcuandoesimposible(porejemploJMPcorta0).
1.2.6valoresdetamao
Cuandoinstruccinusaalgndireccionamientodememoria,pordefectolaformamspequeadeinstruccin
cinsegeneramedianteeldesplazamientocortosislovalordedireccinseajustaenelrango.
Estosepuedeanularconlapalabraodeloperadordwordantesdeladireccindentrodela
corchetes(odespusdequeeloperadorPTR),quefuerzaellargodesplazamientodeAP
tamaoadequesehizo.Encasodequeladireccinnoesrelativoacualquierregistro,los
operadorespermitentambinparaelegirelmodoadecuadodedireccionamientoabsoluto.
Instruccionesadc,agregary,cmp,o,SBB,subyxorconprimeroperandosiendode16bits
ode32bitssonporomisingeneradoenformaabreviadade8bitscuandoelsegundooperandoes
valorinmediatoajusteenelrangodevaloresconsignode8bits.Tambinsepuedeanular
poniendolapalabraodeloperadordwordantesdelvalorinmediato.Lasreglassimilares
seaplicaalainstruccinimulconelltimooperandoserunvalorinmediato.
Valorinmediatocomounoperandoparalainstruccinempujesinunoperadordetamaoespor
defaulttratadocomounvalordepalabrasiensambladorestenelmodode16bitsycomounvalordepalabradoble
Pgina20
20
CAPTULO1.INTRODUCCIN
siensambladorestenmodode32bits,mscortoformulario8bitdeestainstruccinseutilizasiesposible,
palabrauoperadortamaodwordobligaalainstruccindeempujequesegenereenformamslarga
paraeltamaoespecificado.pushwymnemnicospushdobliganensambladorparagenerar16bitso
Cdigode32bitssinforzarloautilizarlaformamslargadelainstruccin.
Pgina21
Captulo2
Juegodeoperaciones
Estecaptuloproporcionalainformacindetalladasobrelasinstruccionesydirectrices
apoyadaporelensambladorplana.Directivasparalasetiquetasquedefinenyasediscutieronen
1.2.3,todaslasdemsdirectivassedescribirmsadelanteenestecaptulo.
2.1Lasinstruccionesdearquitecturax86
Enestaseccinsepuedeencontrartantolainformacinacercadelasintaxisyelpropsitodela
instruccionesenlenguajeensamblador.Sinecesitamsinformacintcnica,busqueel
IntelSoftwareArchitectureManualdeldesarrollador.
Instruccionesdemontajeconsistenenlatecladeacceso(nombredelainstruccin)ydecero
atresoperandos.Sihaydosomsoperandos,porlogeneralprimeroeseldestino
operandoysegundoeseloperandofuente.Cadaoperandopuedeserregistro,memoriao
valorinmediato(vase1.2paramsdetallessobrelasintaxisdelosoperandos).Despusdeladescripcin
decadainstruccinhayejemplosdediferentescombinacionesdeoperandos,siel
instruccintieneninguna.
Algunasinstruccionesactancomoprefijosypuedenserseguidosporotrainstruccindelamisma
lnea,ynopuedehabermsdeunprefijoenunalnea.Cadanombredelregistrodesegmento
estambinunareglamnemotcnicadeinstruccinprefijoinfluenciacuandoserecomiendaelusodesegmento
anuladentrodeloscorchetesenlugardeestosprefijos.
2.1.1instruccionesdemovimientodedatos
movtransfiereunbyte,palabraopalabradobledeloperandofuentealdestino
operando.Puedetransferirdatosentrelosregistrosgenerales,desdeelregistrogeneralde
memoriaodelamemoriaalregistradorgeneral,peronopuedemoversedesdelamemoriaa
lamemoria.Tambinpuedetransferirunvalorinmediatoaregistrogeneralolamemoria,segmento
registrarsepararegistrogeneralolamemoria,registrogeneraloenlamemoriaderegistrodesegmento,
controloregistrodedepuracinalregistrogeneralyregistrogeneraldecontrolarodedepuracin
registrarse.Elmovsepuedemontarslosieltamaodeloperandoyeltamaodelafuente
21
Pgina22
22
CAPTULO2.delconjuntodeinstrucciones
operandodedestinosonlosmismos.Acontinuacinsepresentanlosejemplosparacadaunodelospermitidos
combinaciones:
bxmov,hacha
mov[Char],al
blmov,[Char]
dlmov,32
mov[Char],32
movax,ds
mov[bx],ds
movds,hacha
dsmov,[bx]
moveax,cr0
cr3mov,ebx
registrogeneralderegistrogeneral
registrogeneraldelamemoria
memoriaparaelregistrogeneral
valorinmediatoaregistrogeneral
valorinmediatoalamemoria
registrodesegmentoalregistrogeneral
registrodesegmentodememoria
registrogeneralderegistrodesegmento
memoriapararegistrodesegmento
controlderegistroaregistrogeneral
registrogeneralparaelcontrolderegistro
xchgintercambiaelcontenidodedosoperandos.Sepuedeintercambiardosoperandosdebyte,dos
operandosdepalabraodospalabrasoperandosdobles.Ordendeoperandosnoesimportante.La
operandospuedenserdosregistrosgenerales,oregistrarseengeneralconlamemoria.Porejemplo:
hachaxchg,bx
intercambiardosregistrosgenerales
xchgal,[Char]registrodeintercambioconlamemoria
empujedisminuyeelpunterodelmarcodepila(espregistro),acontinuacin,transfiereeloperandoa
lapartesuperiordelapilaindicadaporesp.Eloperandopuedesermemoria,registrogeneral,elsegmento
Registrarseovalorinmediatodelapalabraodobletamaodelapalabra.Sieloperandoesunainmediata
valorynoseespecificaningntamao,espordefectotratadocomounvalordepalabrasiensambladores
enelmodode16bitsycomounvalordepalabradoblesiensambladorestenmodode32bits.pushwy
mnemotcnicospushdsonvariantesdeestainstruccinquealmacenanlosvaloresdelapalabraodoble
tamaodelapalabra,respectivamente.Simsoperandossiguenenlamismalnea(separadosslocon
espacios,nocomas),compiladorsereunirnencadenadelasinstruccionesdeempujeconestos
operandos.Losejemplossonconoperandosindividuales:
empujehacha
empujares
pushw[bx]
empuje1000h
almacenarregistrogeneral
registrodesegmentotienda
memoriadealmacenamiento
tiendadevalorinmediato
Pushaguardaelcontenidodelregistrogeneraldeochoenlapila.Estainstruccin
notieneoperandos.Haydosversionesdeestainstruccin,unode16bitsyunode32bits,
ensambladorgeneraautomticamentelaversincorrectaparaelmodoactual,peropuedeser
anuladoporelusoPushawomnemotcnicoPUSHADparaobtenersiemprelade16bitso32bits
versin.Laversinde16bitsdeestainstruccinempujaregistrosgeneralesenlapilaen
elsiguienteorden:hacha,cx,dx,bx,elvalorinicialdespanterioraapretarhacha,pb,si
ydi.Laversinde32bitsempujaregistrosgeneralesde32bitsequivalentesenelmismoorden.
Pgina23
2.1.LASINSTRUCCIONESarquitecturax86
23
poptransfierelapalabraopalabradobleenlapartesuperiordelapilaactualhastaeldestino
operandoy,acontinuacin,seincrementaespecialmenteparaqueapuntealnuevosuperiordelapila.Eloperandopuedeser
memoria,registrogeneraloregistrodesegmento.popw
ypopdmnemotcnicossonvariantesde
estainstruccinparalarestauracindelosvaloresdelapalabraodoblepalabratamaorespectivamente.Sims
operandosseparadosporespaciossiguenenlamismalnea,compiladormontarlacadenade
lasinstruccionesdepopconestosoperandos.
bxpop
dspop
popw
[si]
restaurarregistrogeneral
restaurarregistrodesegmento
restaurarlamemoria
poparestauralosregistrosguardadosenlapilamediantelainstruccinPusha,aexcepcindela
valorguardadodelsp(oESP),queseignora.Estainstruccinnotieneoperandos.Paraforzar
montajedelaversinde16bitso32bitsdeesteusodeinstruccionespopawomnemotcnicoPOPAD.
2.1.2Instruccionesdeconversindetipo
Lasinstruccionesdeconversindetipoconvertirbytesenpalabras,palabrasenpalabrasdobles,y
palabrasdoblesenpalabrascudruples.Estasconversionessepuedenhacerusandolaextensindesigno
olaextensincero.Laextensindesignollenalosbitsextradelelementomsgrandeconla
valordelbitdesignodelelementomspequeo,laextensincerosimplementelosllenaconceros.
cwdyCDQduplicaneltamaodehachavalororegistroeax,respectivamente,yalmacenanel
bitsadicionaleseneldxoedxregistro.Laconversinserealizamediantelaextensindesigno.
Estasinstruccionesnotienenoperandos.
cbwextiendeelsignodelbyteenallargodehacha,ycwdeextiendeelsignode
lapalabradehachaentodoeax.Estasinstruccionestambintienenningnoperando.
MOVSXconvierteunbytedepalabraopalabradobleyunapalabraapalabradobleuso
laextensindesigno.MOVZXhacelomismo,peroutilizalaextensincero.Lafuente
operandopuedeserregistrogeneralolamemoria,mientrasqueeloperandodedestinodebeseruna
registrogeneral.Porejemplo:
hachaMOVSX,al
registrobytepararegistrodepalabra
MOVSXedx,dl
registrobyteadoblepalabraderegistro
eaxMOVSX,hacha
palabraderegistrodepalabradobleregistro
MOVSXhacha,byte[bx]memoriabytepararegistrodepalabra
MOVSXedx,byte[bx]memoriadebytesenunapalabradobleregistro
MOVSXeax,palabra[bx]memoriadelapalabraapalabradobleregistro
2.1.3instruccionesaritmticasbinarias
aadirsustituyeeloperandodedestinoconlasumadelosoperandosdefuenteydedestino
yconjuntosCFsisehaproducidodesbordamiento.Losoperandospuedenserbytes,palabrasopalabrasdobles.
Eloperandodestinopuedeserregistrogeneralolamemoria,eloperandofuentepuedeser
Pgina24
24
CAPTULO2.delconjuntodeinstrucciones
RegistroGeneralounvalorinmediato,sinoquetambinpuedesermemoriasieloperandodedestinoes
registrarse.
aadirhacha,bx
aadirhacha,[si]
aadir[di],al
aadiral,48
aadir[Char],48
addregistrarsepararegistrarse
agregarmemoriapararegistrar
aadirregistroalamemoria
agregarvalorinmediatopararegistrarse
agregarvalorinmediatoalamemoria
adcresumelosoperandos,agregaunosiCFestestablecido,ysustituyeeloperandodestino
conelresultado.Reglasparalosoperandossonlosmismosqueparalainstruccinadd.Uncomplemento
seguidodemltiplesinstruccionesADCpuedeserutilizadoparaaadirnmerosdemsde32bits.
incaadeunoaloperando,noafectaCF.Eloperandopuedeserungeneral
registroomemoria,yeltamaodeloperandopuedeserbyte,palabraopalabradoble.
inchacha
incbyte[bx]
registrodelasubastaporuno
memoriadelasubastaporuno
subrestaeloperandofuentedeloperandodestinoysustituyeala
operandodedestinoconelresultado.Sisenecesitaunprstamo,elCFseestablece.Reglaspara
losoperandossonlosmismosqueparalainstruccinADD.
SBBrestaeloperandofuentedeloperandodestino,restaunosiCF
esestableceryalmacenaelresultadoeneloperandodestino.Reglasparalosoperandosson
mismoqueparalainstruccinADD.UnsubseguidopormltiplesinstruccionesSBBpuedeser
utilizadopararestarnmerosdemsde32bits.
diciembrerestaunodeloperando,noafectaCF.Reglasparaeloperandoson
elmismoqueparalainstruccininc.
cmprestaeloperandofuentedeloperandodestino.Actualizalasbanderas
comolainstruccinsub,peronoalteralosoperandosdeorigenydestino.Reglas
paralosoperandossonlosmismosqueparalainstruccinsub.
negrestaunoperandoenteroconsignodecero.Elefectodeestoesinstructon
invertirelsignodeloperandodepositivoanegativoodenegativoapositivo.
Reglasparaeloperandosonlosmismosqueparalainstruccininc.
intercambiosxaddeloperandodestinoconeloperandodeorigen,acontinuacin,cargalasuma
delosdosvaloreseneloperandodedestino.Reglasparalosoperandossonlosmismosque
paralainstruccinadd.
TodoelbinarioactualizacininstruccionesaritmticasanteriorSF,ZF,PFyOFbanderas.SF
siempreseestableceenelmismovalorqueelbitdesignodelresultado,ZFseestablececuandotodoslosbitsde
resultadosoncero,PFseestablececuandobajopedidoochobitsderesultadocontienenunnmeroparde
activacindebits,DEseestablecesielresultadoesdemasiadograndeparaunnmeropositivoodemasiadopequeoparaunnegativo
nmero(excluidoelbitdesigno)paraencajareneloperandodestino.
mulrealizaunamultiplicacinsinsignodeloperandoyelacumulador.Siel
operandoesunbyte,elprocesadorlomultiplicaporelcontenidodeAlydevuelveel16bit
comoresultadodeahyal.Sieloperandoesunapalabra,elprocesadorlomultiplicaporelcontenido
Pgina25
2.1.LASINSTRUCCIONESarquitecturax86
25
dehachaydevuelveelresultadode32bitsadxyelhacha.Sieloperandoesunapalabradoble,el
procesadormultiplicaporelcontenidodeeaxydevuelveelresultadode64bitsenEDXy
eax.mulestableceCFycuandolamitadsuperiordelresultadoesdistintodecero,delocontrario,
seborran.Reglasparaeloperandosonlosmismosqueparalainstruccininc.
imulrealizaunaoperacindemultiplicacinfirmado.Estainstruccintienetresvariable
ciones.Enprimerlugartieneunoperandoysecomportadelamismamaneraquelainstruccinmul.
Segundotienedosoperandos,enestecasoeloperandodedestinosemultiplicaporlafuente
operandoyelresultadosustituyeeloperandodedestino.Operandodedestinodebe
serunregistrogeneral,puedeserpalabraopalabradoble,operandodeorigenpuedesergeneral
registro,lamemoriaovalorinmediato.Terceraformatienetresoperandos,eldestino
operandodebeserunregistro,palabrageneralopalabradobleentamao,operandodeorigenpuedeser
registrogeneralolamemoria,yelterceroperandodebeserunvalorinmediato.Lafuente
operandosemultiplicaporelvalorinmediatoyelresultadosealmacenaeneldestino
registrarse.Todaslastresformascalcularelproductodedosveceseltamaodelosoperandosyconjunto
CFycuandolamitadsuperiordelresultadoesdistintodecero,perosegundayterceraforma
truncarelproductoconeltamaodeoperandos.Asformassegundoyterceropuedensertambin
utilizadoparaoperandossinsigno,yaque,sisefirmanlosoperandososinfirma,el
lamitadinferiordelproductoeselmismo.Acontinuacinsepresentanlosejemplosdelastresformas:
imulbl
porelregistroacumulador
palabraimul[si]acumuladorporlamemoria
bximul,cx
registrarseporregistro
bximul,[si]
registrarseporlamemoria
bximul,10
registrarseporvalorinmediato
imulax,bx,10
registrarseporvalorinmediatopararegistrarse
hachaimul,[si],10memoriaporvalorinmediatopararegistrarse
divrealizaunadivisinsinsignodelacumuladorporeloperando.Eldividendo
(Elacumulador)esdosveceseltamaodeldivisor(eloperando),elcocienteyre
maindertienenelmismotamaoqueeldivisor.Sidivisoreselbyte,eldividendosetomade
registroAX,elcocientesealmacenaenAlyelrestosealmacenaenah.Siesdivisor
palabra,lamitadsuperiordeldividendosetomadedx,setomalamitadinferiordeldividendo
dehacha,elcocientesealmacenaenhachayelrestosealmacenaendx.Siesdivisor
palabradoble,lamitadsuperiordeldividendosetomadeedx,lamitadinferiordeldividendoes
tomadodeeax,elcocientesealmacenaeneaxyelrestosealmacenaenedx.Reglas
paraeloperandosonlosmismosqueparalainstruccinmul.
idivrealizaunadivisinfirmadadelacumuladorporeloperando.Seutilizaelmismo
registroscomolainstruccindiv,ylasreglasparaeloperandosonlosmismos.
2.1.4instruccionesaritmticasdecimales
Aritmticadecimalserealizamediantelacombinacindelasinstruccionesaritmticasbinarias(al
listodescritoenlaseccinanterior)conlasinstruccionesaritmticasdecimales.La
Pgina26
26
CAPTULO2.delconjuntodeinstrucciones
instruccionesaritmticasdecimalesseutilizanparaajustarlosresultadosdeunarithbinarioanterior
operacinmeticparaproducirunresultadodecimalempaquetadoodesempaquetadovlido,oparaajustarel
entradasaunaoperacinaritmticabinariaposteriorporloquelaoperacinproducirunvlido
empaquetadooresultadodecimaldesempaquetado.
daaajustaelresultadodesumardosoperandosdecimalesempaquetadosvlidosenal.daadebe
sigasiemprelaadicindedosparesdenmerosdecimalesempaquetados(undgitoencada
mediobyte)paraobtenerunpardedgitosdecimalesempaquetadosvlidoscomoresultados.Labanderadeacarreoes
establecersieranecesariollevar.Estainstruccinnotieneoperandos.
dasajustaelresultadoderestardosoperandosdecimalesempaquetadosvlidosenal.das
siempredebeseguirlasustraccindeunpardenmerosdecimalesempaquetados(undgitoen
cadamediobyte)deotroparaobtenerunpardedgitosdecimalesempaquetadosvlidoscomoresultados.
Labanderadeacarreoseestablecesisenecesitabaunprstamo.Estainstruccinnotieneoperandos.
aaacambiaelcontenidodelregistroalqueunnmerodecimalsinenvasarvlida,y
poneacerolosprimeroscuatrobits.aaadebeseguirsiemprelaadicindedosdecimalesdesempacado
operandosenal.Labanderadeacarreoseestableceyahseincrementasiunacarreoesnecesario.Este
lainstruccinnotieneoperandos.
aascambiaelcontenidodelregistroalqueunnmerodecimalsinenvasarvlida,y
poneacerolosprimeroscuatrobits.aassiempredebenseguirlasustraccindeundecimaldesempacado
operandodeotroenal.Labanderadeacarreoseestableceyahdisminuyesiunprstamoes
necesario.Estainstruccinnotieneoperandos.
AAMcorrigeelresultadodeunamultiplicacindedosnmerosdecimalesdescomprimidosvlidos.
aamdebeseguirsiemprelamultiplicacindedosnmerosdecimalesparaproducirunavlida
resultadodecimal.Elaltodgitodeordensedejaenah,elordenbajodgitosenal.Lageneracin
lizadosversindeestainstruccinpermiteelajustedeloscontenidosdelhachaparacrear
dosdgitossinenvasardecualquierbase.Laversinestndardeestainstruccintiene
ningnoperando,laversingeneralizadatieneunoperandounvalorinmediatoespecificando
labasenumricaparalosdgitoscreados.
aadmodificaelnumeradordeahahyparaprepararseparaladivisindedosvlida
operandosdecimalesdescomprimidosparaqueelcocienteproducidoporladivisinserun
nmerodecimaldesempaquetadovlida.ahdebecontenereldgitodeordensuperioryallabaja
dgitodeorden.Estainstruccinseajustaelvalorycolocaelresultadoenotros,mientrasqueah
contendrcero.Laversingeneralizadadeestainstruccinpermiteelajustededos
dgitossinenvasardecualquierbase.ReglasparaeloperandosonlosmismosqueparaelAAM
instruccin.
2.1.5Instruccioneslgicas
noinviertelosbitseneloperandoespecificadoparaformarelcomplementoaunodeloperando.
Notieneningnefectoenlasbanderas.Reglasparaeloperandosonlosmismosqueparalainstruccininc.
AND,ORyXORinstruccionesrealizanlasoperacioneslgicasestndar.Seponenalda
lasbanderasdeSF,ZFyPF.Reglasparalosoperandossonlosmismosqueparalainstruccinadd.
bt,BTS,BTRylasinstruccionesBTCoperanenunsolobitquepuedeestarenmemoriao
Pgina27
2.1.LASINSTRUCCIONESarquitecturax86
27
enunregistrogeneral.Seespecificalaubicacindelbitcomoundesplazamientodesdeelordendebaja
finaldeloperando.Elvalordeladesviacineslatomadelsegundooperando,se
obienpuedeserunbyteinmediataounregistrogeneral.Estasinstruccionesprimeroasignanel
valordelbitseleccionadoparaCF.instruccinbtnohacenadams,btsestableceelseleccionadas
bita1,btrrestableceelbitseleccionadoa0,cambiosbtcelgranitodearenaparasucomplemento.La
primeroperandopuedeserpalabraopalabradoble.
bthacha,15
bitdepruebaenelregistro
btspalabra[bx],15pruebayconjuntodebitsenlamemoria
btrhacha,cx
pruebayelbitderesetenelregistro
palabrabtc[bx],cxpruebaypococomplementoenlamemoria
instruccionesbsfybsrescanearunapalabraounapalabradobleenelprimersetypocoalmacenanla
ndicedeestebiteneloperandodedestino,quedebeserregistrogeneral.Elbit
cadenaqueseestescaneadaesespecificadoporeloperandodeorigen,quepuedeserobienregistrogeneralo
lamemoria.LabanderaZFseestablecesilatotalidaddelacadenaescero(nohayactivacindebitsseencuentran)deotramanera
quesehagaefectivo.Sinoseencuentraningnbitconjunto,elvalordelregistrodedestinonoestdefinido.
bsfdebajoparaaltoorden(apartirdelndicedebitcero).exploracionesbsrdealta
findeordeninferior(apartirdendicedebit15deunapalabraondice31deunapalabradoble).
hachabsf,bx
bsrhacha,[si]
scanregistrarseadelante
inversamemoriaexploracin
shldesplazaeloperandodedestinodadaporelnmerodebitsespecificadoenelsegundo
operando.Eloperandodestinopuedeserbyte,palabraopalabradobleregistrogeneral
olamemoria.Elsegundooperandopuedeserunvalorinmediatooelregistrocl.La
procesadorcambiacerosendesdeelladodelaoperandodeladerecha(ordenbajo)comobitsdesalidade
elladoizquierdo.ElltimobitquesalesealmacenaenlaFQsalessinnimodeSHL.
shlal1,
Registrodedesplazamientoalaizquierdaenunbit
shlbyte[bx],1memoriadesviacinalaizquierdaporunbit
shlhacha,cl
Registrodedesplazamientoalaizquierdaporelcondedecl
shlpalabra[bx],clcambiarlamemoriadejadaporconteodecl
shrysarcambianeloperandodestinocorrectoporelnmerodebitsespecificadoen
elsegundooperando.ReglasparaoperandossonlosmismosqueparalainstruccinSHL.shr
desplazacerosdesdeelladoizquierdodeloperandocomobitsdesalidadelladoderecho.Elltimo
bitsquesalisealmacenaenCF.sarconservaelsignodeloperandodesplazandoenceros
enelladoizquierdosielvalorespositivoodesplazandoenqueridossielvaloresnegativo.
shlddesplazalosbitsdeloperandodestinoalaizquierdaporelnmerodebitsespecificado
enterceroperando,altiempoquecambialosbitsdealtoordendeloperandodeorigeneneldestino
operandonacinaladerecha.Eloperandofuentenosemodifica.Eldestino
operandopuedeserunapalabraopalabradobleregistrogeneralolamemoria,eloperandofuente
debeserunregistrogeneral,terceroperandopuedeserunvalorinmediatooelregistrocl.
Pgina28
28
CAPTULO2.delconjuntodeinstrucciones
shldax,bx,1
Registrodedesplazamientoalaizquierdaenunbit
shld[di],bx,1
memoriadesviacinalaizquierdaporunbit
shldax,bx,cl
Registrodedesplazamientoalaizquierdaporelcondedecl
shld[di],bx,clcambiarlamemoriadejadaporconteodecl
shrddesplazalosbitsdeloperandodedestinoaladerecha,mientrassecambiabitsdemenororden
desdeeloperandodeorigeneneloperandodedestinoenlaizquierda.Eloperandofuente
permanecesinmodificar.Reglasparaoperandossonlosmismosqueparalainstruccinshld.
rolyRCLgiranelbyte,palabraodobleoperandodestinopalabradadaporel
nmerodebitsespecificadoenelsegundooperando.Paracadarotacinespecifica,elalta
bitdeordenquesaledelaizquierdadelosretornosdeoperandoenelderechoaconvertirseenelnuevo
bitdeordeninferior.RCLpone,adems,enlaFQcadabitdeordensuperiorquesaledelaizquierda
ladodeloperandoantesdequevuelvaaloperandocomoelbitdeordenenlasiguiente
cicloderotacin.ReglasparaoperandossonlosmismosqueparalainstruccinSHL.
roryRCRgiranelbyte,palabraodobleoperandodestinopalabracorrectaporel
nmerodebitsespecificadoenelsegundooperando.Paracadarotacinespecifica,labaja
bitdeordenquesaledeladerechadelarentabilidaddeoperandodelaizquierdaparaconvertirseenelnuevo
bitdeorden.RCRpone,adems,enlaFQcadabitdeordeninferiorquesaledeladerecha
ladodeloperandoantesdequevuelvaaloperandocomoelbitdeordenenlasiguiente
cicloderotacin.ReglasparaoperandossonlosmismosqueparalainstruccinSHL.
pruebarealizalamismaaccinqueeleinstruccin,peronoalterael
operandodedestino,sloactualizabanderas.Reglasparalosoperandossonlosmismosqueparala
ylainstruccin.
bswapinvierteelordendebytesdeunregistrogeneralde32bits:losbits0a7son
intercambiadoconlosbits24a31,ylosbits8a15seintercambianconlosbits16atravsde
Seproporciona23.Estainstruccinparaconvertirvaloreslittleendianenformatobigendian
yviceversa.
bswapedx
intercambiodebytesenelregistro
2.1.6instruccionesdetransferenciadecontrol
jmptransfiereincondicionalmentecontrolalaubicacindedestino.Ladireccindedestinopuede
especificarsedirectamentedentrodelainstruccinoindirectamenteatravsdeunregistroomemoria,
eltamaoaceptabledeestadireccindependedesielsaltoescercaolejos(quepuede
serespecificadoporeloperandodelaanteriorconeloperadordecercaodelejos)ysila
eslainstruccinde16bitso32bits.Operandoporcercadesaltodebesertamaodepalabrade16
instruccindebitsoeltamaodwordparalainstruccinde32bits.Operandopormuchosaltodebe
serdetamaoDWORDparalainstruccinde16bitsoeltamaopwordparalainstruccinde32bits.Undirecto
instruccinJMPincluyeladireccindedestinocomopartedelainstruccin(ypuedeser
precedidoporeloperadorcorta,cercaolejos),ladireccindeloperandoespecificandodebeser
laexpresinnumricadecercaosaltocorto,odosexpresionesnumricasseparado
condospuntosdemedidadesalto,elprimeroespecificaselectordesegmento,elsegundoeseldesplazamiento
Pgina29
2.1.LASINSTRUCCIONESarquitecturax86
29
dentrodelsegmento.Eloperadorpwordpuedeserutilizadoparaforzarlallamadamedidade32bits,ydword
paraobligaralallamadamedidade16bit.Unainstruccinjmpindirectaobtieneladireccindedestino
indirectamenteatravsdeunregistroounavariablepuntero,eloperandodebeserregistrogeneral
olamemoria.Vertambin1.2.5paraalgunosdetallesms.
jmp100h
saltocercadirecta
jmp0FFFFh:0
saltolejosdirecto
jmphacha
saltocercaindirecta
jmppword[ebx]indirectasaltolejos
llamartransfiereelcontrolalprocedimiento,elahorroenlapilaladireccindelain
construccindespusdelallamadaparasuusoposteriorporunainstruccin(regreso)ret.Reglasparala
operandossonlosmismosqueparalainstruccinJMP,perolallamadanotieneningunavariantecortade
instruccindirectayporlotantonooptimizado.
ret,instruccionesRetnyRETFterminarlaejecucindeunprocedimientoytransferencias
controlardenuevoalprogramaqueinvocoriginalmenteelprocedimientoutilizandoladireccinque
fuealmacenadoenlapilaporlainstruccindellamada.reteselequivalenteparaRETN,que
devuelvedesdeelprocedimientoqueseejecutausandolallamadadeinmediato,mientrasquelosretornosRETF
delprocedimientoqueseejecutmediantelallamadaahora.Estasinstruccionesdefecto
eltamaodeladireccinapropiadaparaelajustedelcdigoactual,peroeltamaodeladireccinpuedenser
forzadoa16bitsutilizandolosmnemnicosretw,retnwyretfw,ypara32bitspormediode
laretd,retndymnemotcnicosretfd.Todasestasinstruccionespuedenespecificaropcionalmenteuna
operandoinmediato,mediantelaadicindeestaconstanteparaelpunterodepila,queefectivamenteeliminan
cualquierargumentoqueelprogramallamandoempujaronenlapilaantesdelaejecucindela
instruccindellamada.
iretdevuelveelcontrolaunprocedimientointerrumpido.Sediferenciaderetenquetambin
popslasbanderasdelapilaenelregistrodebanderas.Lasbanderassealmacenanenlapila
porelmecanismodeinterrupcin.Pordefectoeseltamaodedireccindedevolucinadecuadaparala
ajustedelcdigoactual,peropuedeserobligadoautilizar16bitso32bitsdedireccionesutilizandoel
iretwomnemotcnicoiretd.
Lasinstruccionesdetransferenciascondicionadassonsaltosquepuedenonopuedentransferirelcontrol,
dependiendodelestadodelasbanderasdelaCPUcuandolainstruccinseejecuta.Losmnemnicos
paralossaltoscondicionalespuedenobtenerseuniendolacondicinmnemnico(vertabla
2.1)alajmnemnico,porejemplolainstruccinjctransferirelcontrolcuandoel
BanderaCFseestablece.Lossaltoscondicionalespuedenseracortoocerca,ydirigirsolamente,ypuede
optimizarse(ver1.2.5),eloperandodebeserunametavalorinmediatoespecificando
direccin.
Lasinstruccionesdebuclesonsaltoscondicionalesqueutilizanunvalorquesedaencx(oecx)a
especificarelnmeroderepeticionesdeunbucledesoftware.Todaslasinstruccionesdebucleautomticamente
cxdecremento(oecx)yterminarelbucle(notransfieraelcontrol)cuandocx(o
ecx)escero.Utilizacxoecxsielajustedelcdigoactualesde16bitso32bits,
peropuedeserobligadoautilizarcxconelmnemnicoloopwoparautilizarecxconelloopd
mnemotcnico.Loopeyloopzsonlossinnimosdelamismainstruccin,queactacomo
Pgina30
30
CAPTULO2.delconjuntodeinstrucciones
Mnemotcnico
Condicindeprueba
DE=1
o
DE=0
no
c
CF=1
b
nae
nc
CF=0
ae
nb
ZF=1
e
z
ZF=0
Nebraska
NuevaZelanda
CFoZF=1
ser
n/a
CFoZF=0
un
nbe
SF=1
s
SF=0
ns
PF=1
p
pe
PF=0
np
correos
SFxorDE=1
l
ENS
SFxorDE=0
ge
nl
(SFxorDE)oZF=1
le
ng
(SFxorDE)oZF=0
g
NLE
Descripcin
desbordamiento
Nodesbordamiento
llevar
abajo
noporencimaniesigual
Notransporte
superioroigual
nopordebajo
igual
cero
noesigual
noescero
inferioroigual
noporencima
arriba
nopordebajo,niigual
signo
Nofirme
paridad
paridadpar
noparidad
paridadimpar
menos
nomayorniigual
mayoroigual
nomenos
menoroigual
nomayor
mayor
nomenorniigual
Tabla2.1:Condiciones.
Pgina31
2.1.LASINSTRUCCIONESarquitecturax86
31
elbucleestndar,perotambinterminaelbuclecuandoelindicadorestajustadoZF.loopewyloopzw
mnemotcnicoslesobliganautilizarregistrocxmientrasbucleyloopzdobliganautilizar
ecxregistrarse.LOOPNEyLOOPNZsonlossinnimosdelasmismasinstrucciones,que
actacomoelbucleestndar,perotambinterminarelbuclecuandoelindicadorZFnoestestablecida.loopnew
ymnemotcnicosloopnzwlesobliganautilizarregistrocxmientrasloopnedyfuerzaloopnzd
queutilicenregistroECX.Cadainstruccinbuclenecesitaunoperandoseruninmediato
valorespecificandoladireccindedestino,puedeserslosaltocorto(enelrangode128bytesdenuevo
y127bytesaplazoefectuadasdesdeladireccindelainstruccindespusdelainstruccindebucle).
ramasjcxzalaetiquetaespecificadaenlainstruccinsiencuentraunvalordeceroencx,
Jecxzhacelomismo,perocompruebaelvalordeecxlugardecx.Reglasparalosoperandos
sonlosmismosqueparalainstruccindebucle.
intactivalarutinadeserviciodeinterrupcinquecorrespondealnmeroespecificado
comooperandoparalainstruccin,elnmerodebeestarenelrangode0a255.El
rutinadeserviciodeinterrupcinterminaconunainstruccinIRETquedevuelveelcontrolal
lainstruccinquesigueint.cdigosmnemotcnicosint3corto(unbyte)queatrapan
invocalainterrupcinenlainstruccin3.invocalainterrupcin4sieldelabanderasefija.
encuadernadoverificaqueelvalorfirmadocontenidaenelregistroespecificadoseencuentradentro
lmitesespecificados.Unainterrupcin5seproducesielvalorcontenidoenelregistroesinferior
queellmiteinferioromayorqueellmitesuperior.Senecesitadosoperandos,los
primeroperandoespecificaelregistroqueseprueba,elsegundooperandodebesermemoria
frentealosdosvaloreslmitefirmados.Losoperandospuedensertextosodworddetamao.
hachaencuadernado,[bx]comprobarpalabraporlmites
eaxencuadernado,[esi]comprobarpalabradobledeloslmites
2.1.7instruccionesdeE/S
enlastransferenciasdeunbyte,palabraopalabradobledeunpuertodeentradaaotros,hacha,oeax.PuertosdeE/S
puedensertratadosyaseadirectamente,conelvalordebyteinmediatacodificadoenlainstruccin,o
indirectamenteatravsdelregistrodx.Eloperandodestinodebeseral,hacha,oregistroEAX.
Eloperandofuentedebeserunvalorinmediatoenelrangode0a255,oregistrodx.
enotros,20h
enhacha,dx
bytedeentradaapartirdelas20hpuerto
palabradeentradadelpuertodirigidapordx
fueratransfiereunbyte,palabraopalabradobleaunpuertodesalidadeotros,hacha,oeax.
Elprogramapuedeespecificarelnmerodepuertoutilizandolosmismosmtodosqueenla
instruccin.Eloperandodestinodebeserunvalorinmediatoenelrangode0a
255,oregistrodx.Eloperandofuentedebeseral,hacha,oregistroEAX.
20hacabo,hacha
dxacabo,al
palabradesalidaalas20hpuerto
bytedesalidaalpuertodirigidapordx
Pgina32
32
CAPTULO2.delconjuntodeinstrucciones
2.1.8operacionesdeCuerdas
Lasoperacionesdecadenasoperanenunelementodeunacadena.Unelementodecadenapuedeseruna
byte,unapalabraounapalabradoble.Loselementosdecadenasonabordadosporsiydi(oesi
yedi)registra.Despusdecadaoperacindecadenasiy/odi(oesiy/oedi)son
actualizadaautomticamenteparaqueapuntealsiguienteelementodelacadena.SiDF(direccindelabandera)
escero,losregistrosdendiceseincrementan,siDFesuno,sedecrementa.La
lacantidaddeincrementoodecrementoes1,2,o4dependiendodeltamaodelacadena
elemento.Cadainstruccindeoperacindecadenatieneformascortasquenotienenoperandosy
usodeSiy/odicuandoeltipodecdigoesde16bits,yESIy/oedicuandoeltipodecdigo
esde32bits.siyesipordatosdeladireccinpordefectoenelsegmentoseleccionadospords,diyedi
siempretratarlosdatosenelsegmentoseleccionadoporES.Formacortaseobtieneuniendo
alareglamnemotcnicadecartafuncionamientocadenaqueespecificaeltamaodelelementodecadena,loquedebera
serbparaelelementodebytes,wparaelelementodelapalabra,yddedobleelementodenominativo.Formacompletadel
operacindecadenanecesitaoperandosproporcionandoaloperadortamaoylasdireccionesdememoria,
quepuedeserSIoESIconcualquierprefijodesegmento,dioedisiempreconsegmentoes
prefijo.
MOVtransfiereelelementodecadenaapuntadaporsi(oesi)alaubicacinseal
pordi(oEDI).Tamaodeoperandospuedeserbyte,palabraoDWORD.Eloperandodestino
debeserdememoriadireccionadapordioedi,eloperandofuentedebeserlamemoria
dirigidaporsioESIconcualquierprefijodesegmento.
bytemovs[di],[si]
bytedetransferencia
palabraMOV[es:di],[ss:si]palabradetransferencia
movsd
transferirpalabradoble
CMPSrestaelelementodecadenadedestinodelelementocadenadeorigeny
actualizalosindicadoresdeAF,SF,PF,CFyDE,peroesonocambiacualquieradelacomparacin
elementos.Siloselementosdecadenasoniguales,ZFestestablecido,delocontrario,serestablece.Laprimera
operandodeestainstruccindebeserelelementocadenadeorigendirigidaporsioesi
concualquierprefijodesegmento,elsegundooperandodebeserelelementodecadenadedestino
dirigidapordioedi.
CMPSB
compararbytes
palabraCMPS[DS:SI],[es:di]compararpalabras
CMPSdword[fs:esi],[edi]compararpalabrasdobles
scasrestaelelementodecadenadestinodeotros,hacha,oeax(dependiendodela
tamaodeelementodecadena)yactualizacionesdelasbanderasdelaFA,SF,ZF,PF,CFyDE.Silosvalores
soniguales,ZFestestablecido,delocontrario,serestablece.Eloperandodebesereldestino
elementodecadenadirigidapordioedi.
bytescas[es:di]
scasw
dwordscas[es:edi]
byteexploracin
palabradeexploracin
exploracindoblepalabra
Pgina33
2.1.LASINSTRUCCIONESarquitecturax86
lodscolocaelelementodecadenadeorigenenotros,hacha,oeax.Eloperandodebeser
elelementodecadenadeorigendirigidaporsioesiconcualquierprefijodesegmento.
bytelods[DS:SI]
lodspalabra[cs:si]
LODSD
bytedecarga
palabradecarga
cargarlapalabradoble
stoscolocaelvalordeotros,hacha,oeaxenelelementodecadenadedestino.Reglaspara
eloperandosonlosmismosqueparalainstruccinSCA.
instransfiereunbyte,palabraopalabradobledeunpuertodeentradadirigidapordx
registrarseparaelelementodecadenadedestino.Eloperandodestinodebeserlamemoria
dirigidapordioedi,eloperandofuentedebeserelregistrodx.
InSb
bytedeentrada
33
inspalabra[es:di],dx
insdword[edi],dx
palabradeentrada
palabradobledeentrada
outstransfiereelelementodecadenadeorigenaunpuertodesalidadirigidaporelregistrodx.
Eloperandodestinodebeserelregistrodxyeloperandofuentedebeser
memoriadireccionadaporsioESIconcualquierprefijodesegmento.
outsdx,byte[si]
outsw
outsdx,dword[gs:esi]
bytedesalida
palabradesalida
salidadoblepalabra
Larepeticinprefijosrepresentante,repe/REPZyREPNE/repnzespecificarcadenarepetidaoperacin
acin.Cuandounainstruccindeoperacindecadenatieneunprefijoderepeticin,seejecutalaoperacin
variasveces,utilizandocadavezunelementodiferentedelacadena.Lasterminarepeticin
cuandounadelascondicionesespecificadasporelprefijosecumple.Todoslostresprefijosauto
disminuirautomticamentecxoregistroECX(dependiendodesilainstruccinoperacindecadena
utilizael16bitso32bitdedireccionamiento)despusdecadaoperacinyrepitaelasociado
operacinhastacxoecxescero.repe/REPZyREPNE/repnzseutilizanexclusivamente
conlasinstruccionesdelCPEAyCMPS(descritoacontinuacin).Cuandoseusanestosprefijos,
larepeticindelasiguienteinstruccindependedelabanderadecero(ZF)tambin,repeyREPZ
terminarlaejecucincuandolaZFescero,REPNEyrepnzterminarlaejecucin
cuandolaZFestestablecido.
repmovsd
repeCMPSB
transferirvariaspalabrasdobles
compararlosbyteshastaquenoigual
2.1.9instruccionesdecontroldelabandera
Lasinstruccionesdecontroldelabanderaproporcionanunmtodoparacambiardirectamenteelestadodelosbitsen
registrodelpabelln.Todaslasinstruccionesdescritasenestaseccinnotienenoperandos.
Pgina34
34
CAPTULO2.delconjuntodeinstrucciones
stcestableceelCF(pabellnlleven)a1,cerosclclaCF,cmccambiaelCFasu
complementar.stdestableceelDF(indicadordedireccin)a1,cldcerosdelDF,stiestableceelSI
(Banderainterrumpir)a1yporlotantopermitealasinterrupciones,cerosclielSIyporlotanto
desactivalasinterrupciones.
LAHFcopiasSF,ZF,AF,PF,yCFconlosbits7,6,4,2y0delregistroah.La
contenidodelosbitsrestantesnoestndefinidos.Lasbanderasnosevernafectados.
transferenciasSAHFbits7,6,4,2,y0delregistroahenSF,ZF,AF,PF,y
CF.
decrementosPUSHFesppordosocuatroyalmacenalapalabrabajaopalabradoblede
registrodebanderasenlapartesuperiordelapila,eltamaodelosdatosalmacenadosdependedelajustedelcdigoactual.
variantesfuerzaspushfwalmacenarlapalabraylasfuerzaspushfdalmacenarlapalabradoble.
transferenciasPOPFbitsespecficosdelapalabraopalabradobleenlapartesuperiordelapila,luego
incrementosesppordosocuatro,estevalordependedelaconfiguracindelcdigoactual.popfw
fuerzasvariantesrestauracindelapalabraylasfuerzaspopfdrestauracindelapalabradoble.
01/02/10operacionescondicionales
Lasinstruccionesobtenidasuniendolacondicinmnemotcnico(vertabla2.1)ala
ajustemnemnicoestableceunbyteaunosilacondicinesverdaderayestablecerelbyteaceroencasocontrario.
Eloperandodebeserunade8bitssearegistrogeneraloelbyteenlamemoria.
Setneal
byteseto[bx]
establecersialpabellnceroborra
conjuntodebytessidesbordamiento
instruccinSALCestablecelostodoslosbitsdealregistrarcuandolabanderadeacarreoseestableceyceros
elregistroalcontrario.Estainstruccinnotieneargumentos.
Lasinstruccionesobtenidasuniendolacondicinmnemnicoacmovmnemnico
transferirlapalabraopalabradobledelregistrogeneralolamemoriaalogeneral
registraslocuandolacondicinesverdadera.Eloperandodestinodebesergeneral
inscribirse,eloperandodeorigenpuedeserregistrogeneralolamemoria.
hachacmove,bx
moversecuandoconjuntobanderadecero
cmovnceax,[ebx]moversecuandopabellnllevenaclar
cmpxchgcomparaelvalordelacol,elhacha,oregistroeaxconeldestino
operando.Silosdosvaloressoniguales,eloperandodeorigensecargaeneldestino
operando.Delocontrario,eloperandodestinosecargaenlacol,elhacha,oregistroEAX.
Eloperandodestinopuedeserunregistroomemoriaengeneral,elmostooperandofuente
serunregistrogeneral.
cmpxchgdl,bl
comparareintercambiarconregistro
cmpxchg[bx],dxcomparareintercambiarconlamemoria
Pgina35
2.1.LASINSTRUCCIONESarquitecturax86
35
CMPXCHG8Bcomparaelvalorde64bitsenlosregistrosEDXyEAXconeldestino
operando.Silosvaloressoniguales,elvalorde64bitsenlosregistrosCExysealmacenaenEBX
eloperandodedestino.Delocontrario,elvaloreneloperandodedestinosecargaen
EDXyEAXregistros.Eloperandodedestinodebeserunapalabradecuatroenlamemoria.
CMPXCHG8B[bx]
comparareintercambiar8bytes
2.1.11instruccionesMiscelneos
instruccinnopocupaunbyte,peroafectamsqueelpunterodeinstruccin.Este
instruccintieneningnoperandoynorealizaningunaoperacin.
UD2instruccingeneraunaexcepcinopcodenovlido.Seproporcionaestainstruccin
paralaspruebasdesoftwareparagenerarexplcitamenteuncdigodeoperacinnovlida.Estaeslainstruccinnotiene
operandos.
XLATreemplazaunbyteenelregistroALconunbytendiceporsuvalorenunatraduccin
mesadirigidaporbxoebx.Eloperandodebeserunbytedememoriadirigidaporbx
oEBXconcualquierprefijodesegmento.Estainstruccintienetambinuncortoxlatbformaquetiene
ningnoperandoyutilizaladireccinbxoebxenelsegmentoseleccionadospordssegn
enlaconfiguracindelcdigoactual.
ldstransfiereunavariablepunterodeloperandofuenteparaDSyeldestino
registrarse.Eloperandofuentedebeserunoperandodelamemoria,yeloperandodedestino
debeserunregistrogeneral.ElregistroDSrecibeelselectordesegmentodelpuntero
mientrasqueelregistrodedestinorecibelapartededesplazamientodelpuntero.les,lfs,LGSy
lssfuncionadeformaidnticaaldsexceptoqueenlugardedsregistranlosES,FS,gsyss
seutilizarespectivamente.
ldsbx,[si]
punterodecargaparads:bx
leatransfiereeldesplazamientodeloperandofuente(enlugardesuvalor)aldestino
operando.Eloperandofuentedebeserunoperandodelamemoria,yeloperandodedestino
debeserunregistrogeneral.
dxlea,[bx+si+1]cargardireccinefectivaadx
cpuidvuelveidentificacindelprocesadorycuentanconinformacineneleax,ebx,ecx,
yregistrosEDX.Lainformacindevueltaseseleccionaintroduciendounvaloreneleax
registrarseantesdeejecutarselaoperacin.Estainstruccinnotieneoperandos.
lainstruccindepausaretrasalaejecucindelasiguienteinstruccinunaimplementacin
perododetiempoespecfico.Sepuedeutilizarparamejorarelrendimientodelosbuclesdeesperadecentrifugado.
Estainstruccinnotieneoperandos.
introducircreaunmarcodepilaquesepuedeutilizarparaaplicarlasreglasdembitode
bloqueestructuradolenguajesdealtonivel.Unainstruccindelalicenciaalfinaldeunprocedimiento
elcomplementodeunescribaaliniciodelprocedimientoparasimplificarlagestindelapila
yparacontrolarelaccesoalasvariablesparaprocedimientosanidados.Lainstruccinincluyeentrar
Pgina36
36
CAPTULO2.delconjuntodeinstrucciones
dosparmetros.Elprimerparmetroespecificaelnmerodebytesdealmacenamientodinmico
queseasignarnenlapiladelarutinaqueseingresa.Elsegundoparmetro
correspondealniveldeanidamientolxicadelarutina,puedeestarenelrangode0a31.
ElnivellxicoespecificadodeterminacuntosconjuntosdemarcodepilapunterosdelaCPU
copiaenelnuevomarcodepiladelatramaprecedente.Estalistademarcodepila
punterosavecessellamalapantalla.Laprimerapalabra(opalabradoblecuandoelcdigo
es32bit)delapantallaesunpunteroalaltimatramadelapila.Estepunteropermiteuna
dejarinstruccionesparainvertirlaaccindelainstruccinentraranteriorconeficacia
descartandoelltimomarcodepila.Despusdeentrarcrealanuevapantalladeunprocedimiento,
queasignaelespaciodealmacenamientodinmicoparadichorgimenpordecrementoespporel
nmerodebytesespecificadosenelprimerparmetro.Parahabilitarunprocedimientoparahacerfrenteasu
pantalla,introduzcadejapb(oebp)sealandoelcomienzodelnuevomarcodepila.Siel
nivellxicoescero,anoteempujapb(oebp),copiasspapb(oespaebp)yluego
restaelprimeroperandodeesp.Paranivelesdeanidamientomayorquecero,elprocesador
empujapunterostramaadicionalesenlapilaantesdeajustarelpunterodepila.
entraren2048,0
introduciryasignar2048bytesenlapila
2.1.12Lasinstruccionesdelsistema
LMSWcargaeloperandoenelestadodelamquina(bits0a15delregistrocr0),
mientrassmswalmacenaelestadodelamquinaeneloperandodestino.Eloperando
tantoparadichasinstruccionespuedenserregistrogeneralde16bitsodelamemoria,porloquepuedesmsw
tambinserregistrogeneralde32bits.
LMSWhacha
smsw[bx]
estadodelamquinadecargaderegistro
estadodelamquinatiendaparalamemoria
instruccioneslgdtylidtcarganlosvaloresdeoperandoenlatabladedescriptoresglobales
Registrarseolatabladedescriptoresdeinterrupcinregistrorespectivamente.SGDTyalmacenarlasidt
contenidodelregistrodelatabladedescriptoresglobaloeldescriptordeinterrupcintabladeregistro
eneloperandodedestino.Eloperandodebeserun6bytesenlamemoria.
lgdt[ebx]
cargarlatabladedescriptoresglobales
lldtcargaeloperandoenelcamposelectordesegmentodelatabladedescriptoreslocales
registrenytiendasSLDTelselectordesegmentodelatabladedescriptoreslocalesregistranen
eloperando.ltrcargaeloperandoenelcamposelectordesegmentodelatarearegistro
ytiendasdestrelselectordesegmentodelregistrodetareaseneloperando.Reglaspara
operandosonlosmismosqueparalasinstruccionesLMSWysmsw.
larcargalosderechosdeaccesodesdeeldescriptordesegmentoespecificadoporelselector
eneloperandodeorigeneneloperandodestinoyestablecelabanderaZF.Eldestino
operandopuedeserunregistrode16bitso32bitsgeneral.Eloperandofuentedebeseruna
RegistroGeneralde16bitsodememoria.
Pgina37
2.1.LASINSTRUCCIONESarquitecturax86
hachalar,[bx]
eaxlar,dx
37
derechosdeaccesoCargueenlapalabra
losderechosdeaccesodecargaenlapalabradoble
lslcargaellmitedesegmentodeldescriptordesegmentoespecificadoporelselectoren
operandodeorigeneneloperandodestinoyestableceelindicadorZF.Reglasparaeloperando
sonlosmismosqueparalainstruccinLAR.
verryverwverificarsielsegmentodecdigoolosdatosespecificadosporeloperandoes
leeroescribirdesdeelniveldeprivilegioactual.Eloperandodebeserunapalabra,
puedeserregistrogeneralolamemoria.Sielsegmentoesaccesibleylegible(porverr)
opermisosdeescritura(porverw)labanderaZFsefija,sinoseborra.Reglasparaeloperandoson
elmismoqueparalainstruccinlldt.
ARPLcomparaloscamposdedosselectoressegmentoRPL(niveldeprivilegiodelsolicitante).
Elprimeroperandocontieneunselectordesegmentoyelsegundooperandocontieneel
otra.SielcampoRPLdeloperandodedestinoesmenorqueelcampodeRPLdelafuente
operando,labanderaZFseestableceyelcampoRPLdeloperandodedestinoseincrementa
paraquecoincidaconeloperandofuente.Delocontrario,labanderaZFseborrayningncambio
esthechoparaeloperandodedestino.Eloperandodestinopuedeserunapalabrageneral
Registrarseolamemoria,eloperandofuentedebeserunregistrogeneral.
bxARPL,hacha
ARPL[bx],hacha
ajustarRPLdeselectorenelregistro
ajustarRPLdeselectorenlamemoria
SANTOLICborralosTS(tareaconmutada)banderaenelRegistrocr0.Estainstruccinnotiene
operandos.
prefijodebloqueohacequelasealdelbusbloqueodelprocesadorparaafirmardurantelaejecucin
delainstruccindeacompaamiento.Enunentornodemultiprocesador,lasealdebusdebloqueo
aseguraqueelprocesadortieneelusoexclusivodecualquiermemoriacompartidamientrasquelaseales
aseverado.Elprefijodebloqueosepuedeanteponernicamentealassiguientesinstruccionesyslo
alasformasdelasinstruccioneseneloperandodestinoesunoperandodememoria:
aadir,adc,y,btc,btr,bts,cmpxchg,CMPXCHG8B,diciembre,inc,neg,no,o,SBB,sub,
xor,xaddyxchg.Sielprefijodebloqueoseutilizaconunadeestasinstruccionesyla
operandofuenteesunoperandodememoria,unaexcepcinopcodeindefinidosepuedegenerar.
Tambinsehageneradounaexcepcinopcodeindefinidosielprefijodebloqueoseutilizacon
cualquierinstruccinnoenlalistaanterior.Lainstruccinxchgsiempreafirmaelbuslock
lasealindependientementedelapresenciaoausenciadelprefijodebloqueo.
hltdetienelaejecucindeinstruccionesycolocaelprocesadorenunestadodetenido.Una
interrupcinhabilitado,unaexcepcindedepuracin,laBinit,INITolasealdeRESETsereanudarn
laejecucin.Estainstruccinnotieneoperandos.
invalidainvlpg(sofocos)la(tampnlookasidetraduccin)TLBentradaespecificada
coneloperando,quedebeserunamemoria.Elprocesadordeterminalapginaque
contieneesadireccinyvacaelTLBparaesapgina.
RDMSRcargaelcontenidodeun64bitMSR(modeloespecficoderegistro)deladireccin
especificadoenelregistroECXenregistrosedxyeax.wrmsrescribeelcontenidode
Pgina38
38
CAPTULO2.delconjuntodeinstrucciones
registraedxyeaxenelMSRde64bitsdeladireccinespecificadaenelregistroECX.
RDTSCcargaelvaloractualdelcontadordemarcadetiempodelprocesadorde64bits
MSRenEDXyEAXregistros.Elprocesadorincrementaelcontadordemarcadetiempo
MSRcadacicloderelojyrestablecea0cadavezqueelprocesadorserestablece.cargasrdpmc
elcontenidodelcontadordemonitorizacindelrendimiento40bitespecificadoenelregistroecx
enregistrosedxyeax.Estasinstruccionesnotienenoperandos.
wbinvdescribeespaldatodaslaslneasdecachmodificadosenlamemoriacachinternadelprocesadortomain
memoriaeinvalida(sofocos)lascachsinternas.Lainstruccinemiteun
ciclodebusfuncinespecialquedirigecachsexternasparatambinescribirdatosdenuevomodificado
yotrociclodebusparaindicarqueloscachsexternasdebenserinvalidadas.Este
lainstruccinnotieneoperandos.
rsmelcontroldelprogramaderetornodesdeelmododeadministracindelsistemaparaelprogramaque
fueinterrumpidocuandoelprocesadorrecibeunainterrupcinSMM.Estainstruccintiene
ningnoperando.
SYSENTERejecutaunallamadarpidaaunprocedimientodesistemadenivel0,sysexitejecutaunayuno
volveralnivel3delcdigodeusuario.LasdireccionesutilizadasporestasinstruccionessealmacenanenMSR.
Estasinstruccionesnotienenoperandos.
01/02/13FPUinstrucciones
Los(FloatingPointUnit)instruccionesFPUoperanenlosvaloresdepuntoflotanteen
tresformatos:precisinsimple(32bit),dobleprecisin(64bits)ydoblesampliada
deprecisin(80bits).LosregistrosdeFPUformanlapilaycadaunodeellossostieneeldoble
precisinextendidovalordepuntoflotante.Cuandoalgunosvaloresseinsertanenlapila
oseeliminandelapartesuperior,losregistrosdeFPUsedesplazan,porlost0essiempreelvalor
enlapartesuperiordelapilaFPU,st1eselprimervalorpordebajodelapartesuperior,etc.Elnombrest0tiene
tambinelsinnimost.
empujafldelvalordepuntoflotanteenlapilaregistroFPU.Eloperandopuede
sea
de32bits,64bitsoubicacindememoriade80bitsoelregistrodeFPU,suvaloresentoncescargado
enlapartesuperiordelapiladeregistrosdeFPU(elregistrost0)yseconvierteautomticamenteen
elformatodeprecisinextendidadoble.
dwordfld[bx]
st2fld
cargarvalorprevisinindividualdelamemoria
empujarvalordest2enpiladeregistros
fld1,fldz,fldl2t,fldl2e,fldpi,fldlg2yfldln2cargarelusocomn
contantsenlapilaregistroFPU.Lasconstantescargadosson1,0,0,0,registro
log e,,registro2yLN2respectivamente.Estasinstruccionesnotienenoperandos.
2
10
2 10,
fildconvierteeloperandofuenteenteroconsignoendobleprecisinampliada
formatodepuntoflotanteyempujaelresultadoenlapilaregistroFPU.Lafuente
operandopuedeseruna16bits,laubicacindememoriade32bitso64bits.
FildQWORD[bx]cargaenterode64bitsdelamemoria
Pgina39
2.1.LASINSTRUCCIONESarquitecturax86
39
FSTcopiaelvalorderegistroast0eloperandodedestino,quepuedeserde32bits
oubicacindememoriade64bitsoenotroregistroFPU.fstprealizalamismaoperacin
comofstyluegoaparecelapiladeregistros,deshacersedest0.fstpaceptalamisma
operandoscomolainstruccinFSTytambinpuedenalmacenarvalorenlamemoria80bit.
fstst3
copiarvalordest0enelregistrost3
twordfstp[bx]almacenarelvalorenlamemoriayelpoppila
puoconvierteelvalorenst0aunenteroconsignoyalmacenaelresultadoenel
operandodestino.Eloperandopuedeser16bitsoubicacindememoriade32bits.FISTP
realizalamismaoperacinydespushaceestallarlapiladeregistros,seaceptaelmismo
operandoscomolainstruccinpuoytambinpuedealmacenarvalorenteroenlamemoriade64bits,
porloquetienelasmismasreglasparaoperandosdeinstruccinfild.
fbldconvierteelenteroBCDempaquetadosencomaflotantededobleprecisinampliada
formatearyempujaestevalorenlapilaFPU.fbstpconvierteelvalorenst0a
unllenoenteroBCD18dgitos,almacenaelresultadoeneloperandodestinoypops
lapiladeregistros.Eloperandodebeserunaubicacindememoriade80bits.
faddaadeeldestinoyfuenteoperandoyalmacenalasumaeneldestino
ubicacin.EloperandodedestinoessiempreunregistroFPU,silafuenteesunamemoria
ubicacin,eldestinoesst0registrarseyslooperandofuentedebeserespecificado.
SiambosoperandossonregistrosdeFPU,porlomenosunodeellosdebehaberregistrost0.Una
operandoenlamemoriapuedeserunvalorde32bitso64bits.
faddQWORD[bx]agregarvalordobleprecisinparast0
faddst2,st0
aadirst0aST2
faddpagregaeldestinoyfuenteoperando,almacenalasumaeneldestino
ubicacinyluegoaparecelapiladeregistros.EloperandodedestinodebeserunaFPU
registroyeloperandofuentedebeserelst0.Cuandonoseespecificanoperandos,st1
seutilizacomounoperandodedestino.
faddp
faddpst2,st0
aadirst0ast1ysacarlapila
aadirst0ast2ysacarlapila
instruccinfiaddconvierteunoperandofuenteenteroendobleprecisinampliada
valordepuntoflotanteyloagregaaloperandodestino.Eloperandodebeseruna
16bitsoubicacindememoriade32bits.
palabrafiadd[bx]aadirpalabraenteroparast0
fsub,fsubr,FMUL,fdiv,instruccinfdivrsonsimilaresaFADD,tienenelmismo
reglasparaoperandosyslosediferencianenelcmputoperfomed.fsubsustraeel
operandofuentedeloperandodestino,fsubrRestaeloperandodestino
desdeeloperandofuente,FMULmultiplicaeldestinoyorigenoperandos,fdiv
divideeloperandodestinoporeloperandofuenteyfdivrdividelafuente
Pgina40
40
CAPTULO2.delconjuntodeinstrucciones
operandoporeloperandodedestino.fsubp,fsubrp,fmulp,fdivp,fdivrprealizarla
mismasoperacionesysacarlapiladeregistro,lasreglasparaeloperandosonlosmismosquepara
lainstruccinfaddp.FISUB,fisubr,fimul,fidiv,fidivrrealizarestasoperaciones
despusdeconvertireloperandofuenteenteroenvalordepuntoflotante,quetienenlamisma
reglasparaoperandosdeinstruccinfiadd.
fsqrtcalculalarazcuadradadelvalorenelregistrost0,fsincalculaelseno
deesevalor,fcoscalculaelcosenodeesevalor,FCHScomplementasubitdesigno,
fabsborrasusignoparacrearelvalorabsoluto,FRNDINTredondeaalintegrantemscercana
valor,enfuncindelmodoactualderedondeo.f2xm1calculaelvalorexponencial
de2alapotenciadest0ysustraeel1.0delamisma,elvalordest0debeestarenel
variar1,0a1,0.Todasestasinstruccionesalmacenarelresultadoenst0ynotienenoperandos.
fsincoscalculatantoelsenoyelcosenodelvalorenelregistrost0,tiendas
enelsenost0yempujaelcosenoenlapartesuperiordelapiladeregistrodeFPU.computafptan
latangentedelvalorenst0,almacenaelresultadoenst0yempujaun1,0sobrelaFPU
registrarsepila.fpatancalculaelarcotangentedelvalorenst1divididoporelvalor
enst0,almacenaelresultadoenst1yhaceestallarlapiladeregistrosdeFPU.fyl2xcalculala
logaritmobinariodest0,lomultiplicaporst1,almacenaelresultadoenst1yapareceel
PiladeregistroFPUfyl2xp1realizalamismaoperacinperoaade1.0ast0antes
calcularellogaritmo.fpremcalculaelrestoobtenidodedividirel
valorenst0porelvalorenst1,yalmacenaelresultadoenst0.fprem1realizala
mismaoperacinquefprem,perocalculaelrestodelamaneraespecificadaporelIEEE
Norma754.fscaletruncaelvalorenst1yaumentaelexponentedest0por
estevalor.fxtractseparaelvalorenst0ensuexponenteymantisa,tiendas
elexponenteenst0yempujalamantisaenlapilaregistro.realizaFNOP
ningunaoperacin.Estasinstruccionesnotienenoperandos.
intercambiosFXCHelcontenidodelregistrost0unotroFPU.Eloperandodebeser
unregistroFPU,sinoseespecificaningnoperando,seintercambianloscontenidosdest0yst1.
fcomyFCOMPcompararelcontenidodebanderasst0yeloperandofuenteyestablecidos
enlapalabradeestadoFPUsegnlosresultados.FCOMPaparece,adems,elregistro
apilardespusderealizarlacomparacin.Eloperandopuedeserunasolaodedobleprecisin
valorenlamemoriaoelregistrodeFPU.Cuandonoseespecificaningnoperando,st1seutilizacomouna
operandofuente.
fcom
FCOMPst2
compararst0const1
compararst0conlapilast2ypop
fcomppcomparaelcontenidodest0yst1,establecebanderasenlapalabradeestadoFPU
deacuerdoconlosresultadosyhaceestallarlapiladeregistrosendosocasiones.Estainstruccinnotiene
operandos.
fucom,fucompyfucompprealizaunacomparacindesordenadadedosregistrosdeFPU.
Reglasparaoperandossonlosmismosqueparaelfcom,FCOMPyfcompp,perolafuente
operandodebeserunregistroFPU.
Pgina41
2.1.LASINSTRUCCIONESarquitecturax86
41
FICOMyficompcompararelvalorenst0conunoperandofuentedeenteroyconjunto
lasbanderasenlapalabradeestadoFPUdeacuerdoconlosresultados.ficompaparece,adems,la
registrodepiladespusderealizarlacomparacin.Elvalorenteroseconvierteaduplicar
precisinenformatoextendidodepuntoflotanteantesdelacomparacinsehace.Eloperando
debeserunaubicacindememoriade16bitso32bits.
FICOMpalabra[bx]compararst0conenterode16bits
fcomi,fcomip,FUCOMI,fucomiprealizarlacomparacindest0conotroFPU
registraryconfigurarlasbanderasZF,PFyCFdeacuerdoconlosresultados.fcomipyfucomip
adicionalmentesacarlapiladeregistrodespusderealizarlacomparacin.Lasinstruccionesdeobservadores
contenidasuniendolacondicinFPUmnemnico(vaselatabla2.2)paraelmnemnicofcmov
transferirelregistroFPUespecificadoenelregistrost0silacondicinfivenpruebaesverdadera.
Estasinstruccionespermitendossintaxisdiferentes,unoconsolooperandoespecificandoel
registrofuenteFPU,yotracondosoperandos,enesecasodeberaoperandodestino
serst0registroyelsegundooperandoespecificaelregistroFPUfuente.
fcomist2
st0fcmovb,st2
compararst0conbanderasST2yestablecidos
transferirst2ast0siestpordebajo
Mnemotcnicocondicinprobada
Descripcin
CF=1
abajo
b
ZF=1
igual
e
CFoZF=1
inferioroigual
ser
PF=1
desordenada
u
CF=0
nopordebajo
nb
ZF=0
noesigual
Nebraska
CFyZF=0nopordebajoniesigual
nbe
PF=0
Nodesordenada
nu
Tabla2.2:CondicionesdeFPU.
ftstcomparaelvalorenst0con0.0yestablecelosindicadoresenlapalabradeestadoFPU
segnlosresultados.fxamexaminaelcontenidodelast0yestablecelosindicadoresen
PalabradeestadoFPUparaindicarlaclasedevalorenelregistro.Estasinstruccionestienen
ningnoperando.
fstswyfnstswalmacenarelvaloractualdelapalabradeestadoFPUeneldestino
ubicacin.Eloperandodedestinopuedeserunamemoriade16bitsoelregistrodehacha.
chequesfstswdeesperadeexcepcionesFPUumaskedantesdeguardarlapalabradeestado,
fnstswnolohace.
fstcwyalmacenarfnstcwelvaloractualdelapalabradecontrolFPUenelespecificado
destinoenlamemoria.fstcwchequespendientesumaskedexcepcionesFPUantesdealmacenamiento
inglapalabradecontrol,fnstcwno.fldcwcargaeloperandoenelcontrolFPU
palabra.Eloperandodebeserunaubicacindememoriade16bits.
Pgina42
42
CAPTULO2.delconjuntodeinstrucciones
fstenvyfnstenvalmacenarelentornooperativoFPUactualenlamemoria
lugarespecificadoporeloperandodestinoymscaratodaslasexcepcionesFPU.
fstenvcompruebaesperadeexcepcionesFPUumaskedantesdeproceder,fnstenvhace
no.fldenvcargaelentornooperativocompletodememoriaenlaFPU.
FSAVEyalmacenarfnsaveelestadoactualFPU(entornodeoperacinyregistro
apilar)eneldestinoespecificadoenlamemoriayreinicializalaFPU.chequeFSAVE
dependienteexcepcionesFPUdesenmascaradosantesdeproceder,fnsavenolohace.frstor
cargaelestadoFPUdelaposicindememoriaespecificada.Todasestasinstruccionesnecesitan
unoperandoserunaubicacindememoria.ParacadaunadeestasinstruccionesexistirdosAdems
mnemnicoscionalesquepermitenseleccionarprecisamenteeltipodelaoperacin.Elfstenvw,
fnstenvw,fldenvw,fsavew,fnsavewymnemotcnicosfrstorwobliganalainstruccinde
realizarlaoperacincomoenelmodode16bits,mientrasquefstenvd,fnstenvd,fldenvd,fsaved,
fnsavedyfrstordforzarlaoperacincomoenelmodode32bits.
finityfninitestablecerelentornooperativoFPUensuestadopredeterminado.finit
compruebaesperadeexcepcinFPUdesenmascaradoantesdeproceder,fninitno.fclex
yfnclexquitarleslasmarcasdeexcepcinFPUenlapalabradeestadoFPU.chequesfclexpara
pendienteexcepcinFPUdesenmascaradoantesdeproceder,fnclexnolohace.esperaryfwait
sonsinnimosdelamismainstruccin,quehacequeelprocesadorparacomprobarsihaypendiente
desenmascaradoexcepcionesFPUymanejarlosantesdecontinuar.Estasinstruccionestienen
ningnoperando.
ffreequeestablecelaetiquetaasociadaconregistroFPUespecificadoparavaciar.Eloperando
debeserunregistroFPU.
fincstpyfdecstpgirarlapilaFPUporunoaadiendoorestandouno
alpunterodelapartesuperiordelapila.Estasinstruccionesnotienenoperandos.
2.1.14instruccionesMMX
LasinstruccionesMMXoperanenlostiposenterosenpaquetesyutilizanlosregistrosMMX,
quesonlaspartesde64bitsbajasdelosregistrosdeFPU80bits.DebidoaestoMMX
instruccionesnosepuedenutilizaralmismotiempocomoinstruccionesFPU.Puedenfuncionar
enbytesempaquetados(ochoenterosde8bits),palabrasllenas(cuatroenterosde16bits)oenvasados
palabrasdobles(dosenterosde32bits),elusodeformatosempaquetadospermiterealizaroperaciones
envariosdatosalavez.
movqcopiaunapalabracudrupledeloperandofuentealoperandodestino.En
menosunodelosoperandosDebehaberunregistroMMX,lasegundapuedesertambinunMMX
Registrarseoposicindememoriade64bits.
mm0movq,mm1
mm2movq,[ebx]
moverpalabracudruplederegistropararegistrarse
moverpalabracudrupledelamemoriapararegistrar
copiasMOVDunadoblepalabradeloperandofuentealoperandodestino.Uno
delosoperandosdebenserunregistroMMX,elsegundopuedeserunregistrogeneralo
Ubicacindememoriade32bits.SloseutilizabajopalabradobledeMMXregistro.
Pgina43
2.1.LASINSTRUCCIONESarquitecturax86
43
TodaslasoperacionesgeneralesMMXtienendosoperandos,eloperandodedestinodebeser
unregistroMMX,eloperandodeorigenpuedeserunregistroMMXoubicacindememoriade64bits
cin.Laoperacinserealizaenloselementosdedatoscorrespondientesdelafuentey
operandodestinoysealmacenaenloselementosdedatosdeloperandodestino.paddb,
paddwypadddrealizanlaadicindebytesderelleno,palabrasllenas,oembaladosdoble
palabras.psubb,psubwypsubdrealizanlasustraccindetiposapropiados.paddsb,
paddsw,psubsbypsubswrealizarlaadicinosustraccindebytesderellenoo
palabrasllenasconlasaturacinfirmado.paddusb,paddusw,psubusb,psubuswson
anloga,peroconlasaturacinsinsigno.pmulhwypmullwrealizaunamulfirmado
plicacindelaspalabrasparallevaryalmacenarlaspalabrasaltasobajasdelosresultadosenel
operandodestino.pmaddwdrealizaunamultiplicacindelaspalabrasenvasados
yaadeel
cuatroproductosdepalabrasdoblesintermediosenparesparaproducirresultadocomounabarrotadodoble
palabras.pand,PORypxorrealizarlasoperacioneslgicasenlaspalabrasdequad,pandnpe
Losformulariostambinunanegacinlgicadeloperandodestinoantesdelaoperacin.pcmpeqb,
pcmpeqwypcmpeqdcompararlaigualdaddebytesempaquetados,envasados
oempaquetadospalabras
palabrasdobles.Siunpardeelementosdedatosesigual,elelementodedatoscorrespondienteen
eloperandodestinoestllenodetrozosdevalor1,delocontrarioseponea0.pcmpgtb,
pcmpgtwypcmpgtdrealizarlaoperacinsimilar,perocompruebansilosdatos
elementoseneloperandodestinosonmayoresqueloselementosdedatosencorrespoding
eloperandofuente.conversospacksswbembaladospalabrasfirmadosenbytesfirmadosempaquetadas,
packssdwconvierteembaladofirmdoblespalabrasenpalabrasfirmadosempaquetadas,consaturacin
cinparamanejarcondicionesdedesbordamiento.packuswbconviertellenopalabrasfirmadosenempaquetado
bytessinsigno.Elementosdedatosconvertidosdeoperandodeorigensealmacenanenla
partebajadeloperandodestino,mientrasqueloselementosdedatosconvertidosdesdeeldestino
operandosealmacenanenlapartealta.punpckhbw,punpckhwdyintercalacionespunpckhdq
loselementosdedatosdelaspartesaltasdelosoperandosytiendasdeorigenydestino
elresultadoeneloperandodedestino.punpcklbw,punpcklwdypunpckldqrealizan
lamismaoperacin,perolaspartesbajasdelafuenteyeloperandodedestinoseutilizan.
mm0paddsb,[esi]aadirbytesempaquetadosconsaturacinfirmado
mm3pcmpeqw,mm7compararpalabrasparallevarparalaigualdad
psllw,pslldypsllqrealizarelcambiolgicoizquierdadelaspalabrasenvasados,embaladosdoble
palabrasounasolapalabradequadeneloperandodestinoenlacantidadespecificadaenel
operandofuente.psrlw,psrldypsrlqrealizanderechadesplazamientolgicodelaspalabrasllenas,
embaladopalabrasdoblesounasolapalabraquad.psrawypsradrealizandesplazamientoaritmtico
delaspalabrasllenasopalabrasdobles.EloperandodestinodebeserunMMX
inscribirse,mientrasoperandodeorigenpuedeserunregistroMMX,laubicacindememoriade64bitsode8bits
valorinmediato.
mm2psllw,mm4
palabrasdesviacinalaizquierda,lgicamente,
mm4psrad,[ebx]cambiarpalabrasdoblesderechoaritmticamente
emmshacequeelFPUregistrautilizableparalasinstruccionesFPU,quedebeserutilizado
antesdeusarlasinstruccionesFPUsiseutilizaranlasinstruccionesMMX.
Pgina44
44
CAPTULO2.delconjuntodeinstrucciones
2.1.15instruccionesSSE
LaextensinSSEaademsinstruccionesMMXytambinintroducelasoperaciones
envaloresdepuntoflotantedeprecisinsimpleparallevar.El128bitllenodeprecisinsimple
formatoconsistedecuatrovaloresdeunsolopuntoflotantedeprecisin.LosregistrosSSEde128bits
estndiseadosconelpropsitodeoperacionesenestetipodedatos.
movapsymovupstransferirunadoblepalabradeloperandoquadcontienepecadoembalado
valoresdeprecisingledeoperandofuentealoperandodestino.Almenosunadelas
operandostienenqueserunregistroSSE,elsegundopuedesertambinunregistroSSEo128
ubicacindememoriadebit.Operandosdememoriaparalainstruccinmovapsdebenestaralineadosen
lmitede16bytes,operandosparalainstruccinmovupsnotienenqueestaralineados.
movupsxmm0,[ebx]moverunalignedpalabradoblequad
movlpsmueveembaladosdosvaloresdeprecisinsimpleentrelamemoriaylabaja
palabracudrupledeSSEregistro.movhps,muevenembaladosdosvaloresdeprecisinsimpleentre
lamemoriaylapalabraaltadelpatiodelaESSregistro.Unodelosoperandosdebenseruna
SSEregistro,yelotrooperandodebeserunaubicacindememoriade64bits.
movlpsxmm0,[ebx]moveralamemoriabajopalabracudrupledexmm0
movhps[esi],xmm7moverpalabraaltaquaddexmm7alamemoria
movlhpsmueveembaladosdosvaloresdeprecisinsimpledelapalabrabajadelpatiodelafuente
registroparalapalabracudrupledealtaderegistrodedestino.movhlpsmuevedosembaladossola
valoresdeprecisindelapalabrademayorquadderegistrodeorigenalapalabrabajadecudruple
registrodedestino.AmbosoperandostienenqueserunosregistrosdelaESS.
movmskpstransfiereelbitmssignificativodecadaunodeloscuatrovaloresdeprecisinindividuales
enlaESSregistrarseenbajoscuatrobitsdeunregistrogeneral.Eloperandofuentedebeser
unregistroSSE,eloperandodedestinodebeserunregistrogeneral.
movsstransfiereunsolovalordeprecisinentrelafuenteyeloperandodedestino
(Slolapalabradoblebajasetrasferred).AlmenosunodelosoperandostienequeserunSSE
registro,elsegundopuedesertambinunregistroomemoriade32bitsubicacinSSE.
movss[edi],XMM3
moversebajopalabradobledeXMM3alamemoria
CadaunadelasoperacionesaritmticasdelaESStienedosvariantes.Cuandolosextremosmnemotcnicos
conps,eloperandodeorigenpuedeserunlugardememoriade128bitsounregistroSSE,la
operandodedestinodebeserunregistroSSEylaoperacinserealizatambinencaminosde
cuatrovaloresdeprecisinindividuales,paracadapardeloselementosdedatoscorrespondientesporseparado,
elresultadosealmacenaenelregistrodedestino.Cuandolatecladeaccesoterminaconss,
eloperandodelafuentepuedeserunaubicacindememoriade32bitsounregistroSSE,eldestino
operandodebeserunregistroSSEylaoperacinserealizasobrelosvaloresdeprecisinsimple,
slobajosdoblespalabrasderegistrosSSEseutilizanenestecaso,elresultadosealmacenaenlabaja
doblepalabraderegistrodedestino.addpsyaddssagreganlosvalores,subpsysubss
restarelvalordelafuentedevalordedestino,mulpsymulssmultiplicarlosvalores,
Pgina45
2.1.LASINSTRUCCIONESarquitecturax86
divpsydivssdividenelvalordedestinoporelvalordeorigen,rcppsyrcpss
calcularelrecprocoaproximadadelvalordeorigen,sqrtpsycalcularsqrtss
larazcuadradadelvalordeorigen,rsqrtpsyrsqrtsscalculanlaaproximacin
recprocodelarazcuadradadelvalordeorigen,maxpsymaxsscomparanlafuentey
valoresdedestinoyretornodelamayor,minpsyminsscomparanlafuentey
valoresdedestinoyretornoelqueresultemenor.
xmm0mulss,[ebx]
addpsXMM3,xmm7
multiplicarlosvaloresdeprecisinsimple
aadirvaloresdeprecisinindividualesenvasados
45
andps,andnps,puestosderehidratacinoralyxorpsrealizanlasoperacioneslgicasencaminosdeunasola
valoresdeprecisin.Eloperandofuentepuedeserunaubicacindememoriade128bitsounaSSE
inscribirse,eloperandodedestinodebeserunregistroSSE.
cmppscomparallenovaloresdeprecisinsimpleydevuelveunresultadomscaraenel
operandodedestino,quedebeserunregistroSSE.Eloperandofuentepuedeserun128
posicindememoriadebitsoSSEregistro,elterceroperandodebeserunoperandoinmediato
cdigodelaseleccindeunodelosochocompararcondiciones(tabla2.3).cmpssrealizala
mismaoperacinsobrelosvaloresdeprecisinsimple,slobajopalabradobledelregistrodedestino
seveafectado,enestecasoeloperandodeorigenpuedeserunaubicacindememoriade32bitsoSSEregistro.
Estasdosinstruccionestienentambinvariantesconslodosoperandosylacondicin
codificadadentromnemotcnico.Susmnemnicosseobtienenuniendoelmnemnico
delatabla2.3delareglamnemotcnicacmpyluegofijarelpsossalfinal.
XMM2cmpps,xmm4,0compararlosvaloresdeprecisinindividualesenvasados
cmpltssxmm0,[ebx]compararlosvaloresdeprecisinsimple
Cdigomnemotcnico
0
1
2
3
4
5
6
7
eq
lt
le
unord
neq
NLT
NLE
ord
Descripcin
igual
menosque
menoroigual
desordenada
noesigual
nomenosde
nomenosdeigualni
ordenado
Tabla2.3:CondicionesdelaESS.
comissyucomisscomparanlosvaloresdeprecisinsimpleyfijanlaZF,PFyCF
banderasparamostrarelresultado.EloperandodedestinodebeserunregistroSSE,lafuente
operandopuedeserunaubicacindememoriade32bitsoSSEregistro.
shufpsmuevecualesquieradosdeloscuatrovaloresdeprecisinindividualesdeloperandodedestino
enlapalabraquadbajodeloperandodedestino,ydosdeloscuatrovaloresde
Pgina46
46
CAPTULO2.delconjuntodeinstrucciones
eloperandodeorigenenlapalabracudrupledealtadeloperandodestino.Eldestino
operandodebeserunregistroSSE,eloperandofuentepuedeserunaubicacindememoriade128bits
oSSEregistro,elterceroperandodebeserunaseleccindevalorinmediatode8bitsque
valoressemovieroneneloperandodestino.Losbits0y1seleccionarelvalorde
sertrasladadodeoperandodedestinoaladoblepalabrabajadelresultado,losbits2y3
seleccionarelvalorquesertrasladadadesdeeloperandodestinoalasegundapalabradoble,
losbits4y5seleccioneelvalorquevayanaabandonareloperandofuentealtercerdoble
palabra,ylosbits6y7deseleccionarelvalorquevayanaabandonareloperandofuentealalto
palabradobledelresultado.
shufpsxmm0,xmm0,10010011bbarajarpalabrasdobles
unpckhpsrealizaunadesempaquetarintercaladadelosvaloresdelaspartesaltasdela
operandosdeorigenydestinoyalmacenaelresultadoeneloperandodestino,que
DebehaberunregistroSSE.Eloperandofuentepuedeserunaubicacindememoriade128bitsounaSSE
registrarse.unpcklpsrealizaunadesempaquetarintercaladadelosvaloresdelaspartesbajasde
eloperandodeorigenydedestinoyalmacenaelresultadoeneloperandodedestino,el
reglasparaoperandossoniguales.
cvtpi2psconversosembaladosdospalabrasenterosdoblesenellosdosrepletosola
precisinvaloresdepuntoflotanteyalmacenaelresultadoenlapalabrabajadecudrupledeldestino
operandonacin,quedebeserunregistroSSE.Eloperandofuentepuedeserunade64bits
ubicacindememoriaoregistroMMX.
xmm0cvtpi2ps,mm0enterosavaloresdeprecisinsimple
cvtsi2ssconvierteunapalabradobleenteroenunvalordepuntoflotantedeprecisinsimple
yalmacenaelresultadoenladoblepalabrabajadeloperandodestino,quedebenser
unregistroSSE.Eloperandofuentepuedeserunaubicacindememoriade32bitsode32bitsengeneral
registrarse.
xmm0cvtsi2ss,eaxnmeroenterodevalordeprecisinsimple
conversoscvtps2piembaladosdosvaloresdepuntoflotantedeprecisinsimpleendosembalado
enterosdepalabrasdoblesyalmacenaelresultadoeneloperandodestino,quedebeser
unregistroMMX.Eloperandofuentepuedeserunaubicacindememoriade64bitsoSSEregistro,
sloseutilizabajopalabracudrupledeSSEregistro.cvttps2pirealizalaoperacinsimilar,
exceptoqueeltruncamientoseutilizapararedondearunvaloresdeorigenaenteros,lasnormasparalosoperandos
sonlosmismos.
mm0cvtps2pi,xmm0Losvaloresdeprecisinsimpleenenteros
cvtss2siconvertirunsolovalordecomaflotantedeprecisinenunapalabradeenterodoble
yalmacenaelresultadoeneloperandodedestino,quedebeserun32bitengeneral
registrarse.Eloperandofuentepuedeserunaubicacindememoriade32bitsoSSEregistro,slobajo
seutilizalapalabradobledeSSEregistro.cvttss2sirealizalaoperacinsimilar,excepto
queeltruncamientoseutilizapararedondearunvalordeorigenaunentero,lasnormasparalosoperandosson
mismo.
Pgina47
2.1.LASINSTRUCCIONESarquitecturax86
eaxcvtss2si,xmm0valordeprecisinsimpleaentero
copiaspextrwlapalabraeneloperandoorigenespecificadoporelterceroperandoala
operandodestino.EloperandofuentedebeserunregistroMMX,eldestino
operandodebeserunregistrogeneralde32bits(lapalabraaltadeldestinoseborra),
elterceroperandodebeunvalorinmediatode8bits.
pextrweax,mm0,1
extraerpalabraeneax
pinsrwinsertaunapalabradeloperandofuenteeneloperandodestinoenel
ubicacinespecificadaconelterceroperando,quedebeserunvalorinmediatode8bits.
EloperandodedestinodebeserunregistroMMX,eloperandofuentepuedeserunade16bits
(sloseutilizabajopalabradelregistro)laubicacindememoriaoregistrogeneralde32bits.
pinsrwmm1,ebx,2
insertePalabrasebx
pavgbymediadecmputopavgwdebytesopalabrasempaquetadas.pmaxubvolveralmax
valoresimumdebytessinsignoenvasados,pminubdevuelvelosvaloresmnimosdeempaquetado
bytessinsigno,pmaxswdevuelvelosvaloresmximosdepalabrasfirmadosempaquetadas,pminsw
devuelvelosvaloresmnimosdepalabrasfirmadosempaquetadas.pmulhuwrealizaunaunsigned
47
multiplicacindelaspalabrasenvasados
yalmacenalosaltospalabrasdelosresultadosenlades
operandotino.psadbwcalculalasdiferenciasabsolutasdebytessinsignoenvasados,
resumelasdiferencias,yalmacenalasumaenlapalabrabajadeloperandodestino.Todos
estasinstruccionessiguenlasmismasreglasparalosoperandoscomolasoperacionesgeneralesMMX
descritoenelapartadoanterior.
pmovmskbcreaunamscarahechadelbitmssignificativodecadabyteenlafuente
operandoyalmacenaelresultadoenelbytebajodeloperandodestino.Eloperandofuente
DebehaberunregistroMMX,eloperandodedestinodebeunregistrogeneralde32bits.
pshufwinsertapalabrasdeloperandofuenteeneloperandodestinodela
ubicacionesespecificadasconelterceroperando.EloperandodedestinodebeserunMMX
registro,eloperandodeorigenpuedeserunaubicacindememoriade64bitsoMMXregistro,tercero
operandodebeseleccionarunvalorinmediatode8bitsquevalorasetrasladades
operandotino,enlaformasimilaralaterceraoperandodelainstruccinshufps.
movntqmuevelapalabracudrupledeloperandofuentedememoriautilizandounno
pistatemporalparaminimizarlacontaminacindecach.EloperandofuentedebeserunMMX
inscribirse,eloperandodedestinodebeserunaubicacindememoriade64bits.movntpstiendas
valoresdeprecisindeembalajeindividualdelSSEregistranenlamemoriaconunnotemporal
pista.EloperandofuentedebeserunregistroSSE,eloperandodedestinodebeseruna
Posicindememoriade128bits.tiendasmaskmovqseleccionadosbytesdesdeelprimeroperandoenuna
Posicindememoriade64bitsconuntoqueintemporal.AmbosoperandosdebenserunMMX
registros,elsegundooperandoseleccionabytesWichdeloperandofuenteestnescritas
alamemoria.LaubicacindelamemoriasesealaporDI(oEDI)registrarseenelsegmento
seleccionadaporDS.
Pgina48
48
CAPTULO2.delconjuntodeinstrucciones
prefetcht0,prefetcht1,prefetcht2yprefetchntabuscarlalneadedatosde
memoriaquecontieneelbyteespecificadoporeloperandoaunlugardeterminadoenlajerarqua.
Eloperandodebeserunaubicacindememoriade8bits.
sfencerealizaunaoperacindeserializacinentodalainstruccindealmacenamientodememoriaque
expedidosantesdelamisma.Estainstruccinnotieneoperandos.
ldmxcsrcargaeloperandodememoriade32bitsenelregistroMXCSR.tiendasstmxcsr
elcontenidodeMXCSRenunoperandodememoriade32bits.
fxsaveguardaelestadoactualdelregistroFPU,MXCSR,ytodoelFPU
ySSEregistraunaubicacindememoria512bytesespecificadoeneloperandodedestino.
datosvuelveacargarfxrstorpreviamentealmacenadosconlainstruccinfxsavedelespecificado512
ubicacindememoriabyte.Eloperandodelamemoria,tantoparaesasinstruccionesdebenestaralineados
el16delmitedebyte,debedeclararoperandodeningntamaoespecificado.
02/01/16instruccionesSSE2
LaextensinSSE2introducelasoperacionesencomaflotantededobleprecisinlleno
valores,seextiendelasintaxisdeinstruccionesMMX,yaadetambinalgunasnuevasinstrucciones.
movapdymovupdtransferirunapalabracudrupledobleoperandoconadicinembaladosdoble
valoresdeprecisindeloperandofuentealoperandodestino.Estasinstruccionesson
anlogaamovapsymovupsytienenlasmismasreglasparaoperandos.
movlpdmuevevalordobleprecisinentrelamemoriaylapalabrabajadelpatiode
RegistroSSE.movhpdtrasladvalordobleprecisinentrelamemoriayelalto
palabracudrupledeSSEregistro.Estasinstruccionessonanlogosamovlpsymovhpsy
tenerlasmismasreglasparaoperandos.
movmskpdtransfiereelbitmssignificativodecadaunodelosdosvaloresdedobleprecisin
enlaESSregistrarseenbajasdosbitsdeunregistrogeneral.Estainstruccinesanlogo
amovmskpsytienelasmismasreglasparaoperandos.
movsdtransfiereunvalordedobleprecisinentrelafuenteyeloperandodedestino
(Slolapalabrabajadecudruplesetrasferred).AlmenosunodelosoperandostienequeserunSSE
registro,elsegundopuedesertambinunregistroomemoriade64bitsubicacinSSE.
Lasoperacionesaritmticassobrelosvaloresdeprecisindobleson:addpd,addsd,subpd,subsd,
mulpd,mulsd,divpd,divsd,sqrtpd,sqrtsd,maxpd,maxsd,minpd,minsd,y
sonanlogaalasoperacionesaritmticassobrelosvaloresdeprecisinsimpledescritosenlosanteriores
seccin.Cuandoelmnemnicoterminaconpdenlugardeps,serealizalaoperacin
tambinencaminosdedosvaloresdedobleprecisin,perolasreglasparaoperandossoniguales.Cundo
delmnemnicoterminaconsdlugardess,eloperandofuentepuedeserunamemoriade64bits
ubicacinounregistroSSE,eloperandodedestinodebeserunregistroSSEyla
operacinserealizaenvaloresdeprecisindoble,slobajospalabrascudruplesdelosregistrosdelaESS
seutilizanenestecaso.
andpd,andnpd,orpdyxorpdrealizarlasoperacioneslgicasendobleempaquetado
valoresdeprecisin.SonanlogaaSSEoperacioneslgicasenunasolaprevisin
valoresytienenlasmismasreglasparaoperandos.
Pgina49
2.1.LASINSTRUCCIONESarquitecturax86
49
cmppdcomparalosvaloresdeprecisindoblerellenoyvuelveydevuelveunamscara
resultadoeneloperandodedestino.Estainstruccinesanlogaacmppsytiene
lasmismasreglasparaoperandos.cmpsdrealizalamismaoperacinendobleprecisin
valores,slobajopalabracudruplederegistrodedestinoseveafectado,enestecasoeloperandodeorigen
puedeserunamemoriade64bitsoSSEregistro.Varianteconslodosoperandosseobtienen
uniendolacondicinmnemnicodelatabla2.3alamnemnicacmpyluego
fijarelpdosdalfinal.
comisdyucomisdcompararlosvaloresdeprecisindobleyajustelaZF,PFy
BanderasCFparamostrarelresultado.EloperandodedestinodebeserunregistroSSE,lafuente
operandopuedeserunlugardememoriade128bitsoSSEregistro.
shufpdmuevecualquieradelosdosvaloresdeprecisindobledelaoperandodedestino
enlapalabrabajadecudrupledeloperandodestino,ycualquieradelosdosvaloresdela
operandodeorigenenlapalabracudrupledealtadeloperandodestino.Estainstruccines
anlogaashufpsytienelasmismasreglasparaeloperando.Bit0delaterceraoperando
seleccionaelvalorquesertrasladadadesdeeloperandodestino,1bitseleccionaelvalorde
sertrasladadodesdeeloperandodeorigen,elrestodelosbitsestnreservadosydebeponeracero.
unpckhpdrealizaunadesempaquetadodelaspalabrasdealtaquaddesdeelorigenydestino
operandos,unpcklpdrealizaunadesempaquetadodelaspalabrasbajasquaddelafuentey
operandosdedestino.Sonanlogaaunpckhpsyunpcklps,ytienenla
mismasnormasparalosoperandos.
cvtps2pdconviertelosdosvaloresdepuntoflotantedeprecisinsimpleenvasados
adosempaquetado
valoresdepuntoflotantedeprecisindoble,eloperandodestinodebeserunregistroSSE,
eloperandodeorigenpuedeserunaubicacindememoriade64bitsoSSEregistro.cvtpd2psconversos
losdosvaloresdepuntoflotantededobleprecisinparallevaraembaladosdosprecisinsimple
valoresdepuntoflotante,eloperandodedestinodebeserunregistroSSE,eloperandofuente
puedeserunaubicacindememoriade128bitsoSSEregistro.cvtss2sdconviertelaprecisinsimple
valordecomaflotantededobleprecisinvalordecomaflotante,eloperandodestino
DebehaberunregistroSSE,eloperandofuentepuedeserunaubicacindememoriade32bitsoSSE
registrarse.cvtsd2ssconviertelaprecisindoblevalordepuntoflotantedeprecisinsimple
valordecomaflotante,eloperandodedestinodebeserunregistroSSE,eloperandofuente
puedeserlaposicindememoriade64bitsoSSEregistro.
conversoscvtpi2pdembaladosdospalabrasenterosdobleseneldobledelempaquetado
precisinlosvaloresdepuntoflotante,eloperandodedestinodebeserunregistroSSE,la
operandodeorigenpuedeserunaubicacindememoriade64bitsoMMXregistro.cvtsi2sdconvierteuna
palabradobleenteroenunvalordecomaflotantedeprecisindoble,eloperandodestino
DebehaberunregistroSSE,eloperandodelafuentepuedeserunaubicacindememoriade32bitso32bits
registrogeneral.cvtpd2piconviertellenodedobleprecisinvaloresdepuntoflotanteen
envasados
dospalabrasenterosdobles,eloperandodestinodebeserunregistroMMX,
eloperandodeorigenpuedeserunlugardememoriade128bitsoSSEregistro.cvttpd2pi
realizalaoperacinsimilar,exceptoqueeltruncamientoseutilizapararedondearunvaloresdeorigen
aenteros,lasreglasparaoperandossoniguales.cvtsd2siconvierteundobleprecisin
valordecomaflotanteenunapalabradedobleentero,eloperandodedestinodebeseruna
Pgina50
50
CAPTULO2.delconjuntodeinstrucciones
Registrogeneralde32bits,eloperandodeorigenpuedeserunaubicacindememoriade64bitsoSSE
registrarse.cvttsd2sirealizalaoperacinsimilar,exceptoqueeltruncamientoseusapara
entornoaunvalordeorigenaentero,lasreglasparaoperandossoniguales.
cvtps2dqycvttps2dqconversollenodeprecisinsimplevaloresdepuntoflotantea
embaladocuatropalabrasenterosdobles,almacenndoloseneloperandodestino.cvtpd2dq
yconversocvttpd2dqllenodedobleprecisinvaloresdepuntoflotantedeempacadodos
enterosdepalabrasdobles,almacenandoelresultadoenlapalabrabajadecudrupledeloperandodestino.
cvtdq2psconversosembaladoscuatropalabrasenterosdoblesparaempacadonicoflotantedeprecisin
valoresdepunto.PortodasestasoperandodestinoinstruccindebeserunregistroSSE,la
operandodeorigenpuedeserunlugardememoriade128bitsoSSEregistro.conversoscvtdq2pd
embaladodospalabrasenterosdoblesdelapalabraquadbajodeloperandofuentealempaquetado
dobleprecisinlosvaloresdepuntoflotante,elorigenpuedeserunaubicacindememoriade64bitso
SSEregistro,eldestinotienequeserSSEregistro.
movdqaymovdqutransferirunadoblepalabradeloperandoquadquecontienenmerosenterosenvasados
deloperandofuentealoperandodestino.Almenosunodelosoperandostienenqueestar
unregistroSSE,lasegundapuedesertambinunregistroSSEoposicindememoriade128bits.
Operandosdememoriaparalainstruccinmovdqadebenestaralineadosenellmitede16bytes,
operandosparalainstruccinmovdqunotienenqueestaralineados.
movq2dqmueveelcontenidodelregistrofuenteMMXalapalabrabajadelpatiode
destinoSSEregistro.movdq2qmuevelapalabrabajadelpatiodelafuenteSSEregistro
aldestinoMMXregistro.
movq2dqxmm0,mm1
movdq2qmm0,XMM1
pasardeMMXSSEregistroaregistro
pasardeSSEregstreseparaMMXregistro
TodaslasinstruccionesMMXqueoperanenlosnmerosenterosde64bitsparallevar(aquellosconmnemon
icsqueempiezanporp)seextiendenaoperarennmerosenterosde128bitsllenoubicadosenSSE
registros.SintaxisadicionalparaestasinstruccionesnecesitaunregistroSSEdondeMMX
registroquesenecesitaba,ylaubicacindememoriade128bitsoSSEregistrodonde64bits
senecesitabanubicacindememoriaoregistroMMX.Laexcepcineslainstruccinpshufw,
quenopermitelasintaxisextendida,perotienedosnuevasvariantes:pshufhwypshuflw,
quepermitenslolasintaxisextendida,yrealizanlamismaoperacinqueenpshufw
laspalabrasdealtaobajaenquaddeoperandosrespectivamente.Tambinelnuevopshufdinstruccin
seintroduce,querealizalamismaoperacinquepshufw,peroenlaspalabrasdobles
enlugardepalabras,permiteslolasintaxisextendida.
psubbxmm0,[esi]
restar16bytesenvasados
eaxpextrw,xmm0,7extraermsaltopalabraeneax
paddqrealizalaadicindepalabrasquadenvasados,psubqrealizalasustraccin
depalabrasquadenvasados,pmuludqrealizaunamultiplicacinsinsignodepalabrasdoblesbajas
decadaunocorrespondientespalabrascudruplesydevuelvelosresultadosenpalabrasquadlleno.
EstasinstruccionessiguenlasmismasreglasparalosoperandoscomolasoperacionesgeneralesMMX
sedescribeen2.1.14.
Pgina51
2.1.LASINSTRUCCIONESarquitecturax86
51
pslldqypsrldqrealizarelcambiolgicohacialaizquierdaoderechadelapalabradoblequadenel
operandodedestinoporlacantidaddebytesespecificadoseneloperandodeorigen.Eldestino
operandonacindebeserunregistroSSE,operandofuentedebeserunade8bitsinmediata
valor.
punpckhqdqintercalalapalabraaltadelpatiodeloperandofuenteyelalto
quadpalabradeloperandodestinoylosescribeeneldestinoSSEregistro.
punpcklqdqintercalalapalabraquadbajodeloperandofuenteylapalabrabajadecudruple
deloperandodestinoylosescribeeneldestinoSSEregistro.Lafuente
operandopuedeserunlugardememoriade128bitsoSSEregistro.
tiendasmovntdqenvasados
datosenterosdelaESSseregistranenlamemoriautilizandono
pistatemporal.EloperandofuentedebeserunregistroSSE,eloperandodestino
debeserunaubicacindememoriade128bits.tiendasmovntpdembaladosvaloresdedobleprecisin
desdeelSSEregistroparalamemoriautilizandounapistanotemporal.Reglasparaeloperandosonla
mismo.tiendasmovntinmeroenterodeunregistrogeneraldememoriautilizandounnotemporal
pista.Eloperandofuentedebeserunregistrogeneralde32bits,eloperandodedestino
debeserunaubicacindememoriade32bits.tiendasmaskmovdquseleccionadosbytesdelaprimera
operandoenunaposicindememoriade128bitsutilizandounapistanotemporal.Ambosoperandos
debeserunregistrodelaESS,elsegundooperandoseleccionabytesWichdeloperandofuente
seescribenenlamemoria.LaubicacindelamemoriasesealaporDI(oEDI)inscribirseenel
segmentoseleccionadoporDSynonecesitaestaralineado.
clflushescribeeinvalidalalneacachasociadaconladireccindebyte
especificadaporeloperando,quedebeserunaubicacindememoriade8bits.
lfencerealizaunaoperacindeserializacinocasindetodacargainstruccindelamemoria
quesepublicaronantesdeella.mfencerealizaunaoperacindeserializacinentodalainstruccin
accediendomemoriaquesepublicarantesdeella,yporloquecombinalasfuncionesdesfence
(Descritoenlaseccinanterior)ylasinstruccioneslfence.Estasinstruccionesnotienen
operandos.
02/01/17instruccionesSSE3
TecnologaPrescottintrodujoalgunasnuevasinstruccionesparamejorarelrendimientode
SSEySSE2estaextensinsellamaSSE3.
fisttpcomportacomolainstruccinFISTPyaceptalosmismosoperandos,lanica
diferenciaesquesiempreseutilizatruncamiento,independientementedelamodalidadderedondeo.
cargasmovshdupeneloperandodestinoelvalorde128bitsobtenidadelafuente
valordelmismotamaollenandoelcadapalabraquadconlosdosduplicadosdelvalor
ensualtapalabradoble.movslduprealizalamismaaccin,salvoquesesolapaconla
valoresdepalabrasdoblesbajas.EloperandodestinodebeserSSEregistro,lafuente
operandopuedeserregistroSSEoposicindememoriade128bits.
movddupcargaelvaloryladuplicaenlapalabraaltaybajadecudruplefuentede64bits
deloperandodedestino.EloperandodestinodebeserSSEregistro,lafuente
operandopuedeserregistroSSEoubicacindememoriade64bits.
Pgina52
52
CAPTULO2.delconjuntodeinstrucciones
lddquesfuncionalmenteequivalenteamovdquconmemoriacomooperandodeorigen,pero
puedemejorarelrendimientocuandoeloperandofuentecruzaunafronteracacheline.La
operandodedestinotienequeserSSEregistro,eloperandofuentedebeserde128bits
ubicacin.
addsubpsrealizasolaadicinprecisindeparessegundaycuartaynica
substracionprecisindelosprimeroyterceroparesdevaloresdecomaflotanteenlosoperandos.
addsubpdrealizaunasumadeprecisindobledelasegundaparejaydobleprecisin
sustraccindelaprimeraparejadevaloresdecomaflotanteeneloperando.haddpsrealiza
lasumadedosvaloresdeprecisinsimpledentrodelapalabracadaquaddeorigeny
operandosdedestino,yalmacenalosresultadosdedichaadicinhorizontaldelosvaloresde
operandodedestinoenpalabrabajadecudrupledeloperandodestino,ylosresultadosde
eloperandodeorigenenaltapalabracudrupledeloperandodestino.haddpdrealizala
Ademsdelosdosvaloresdedobleprecisindentrodecadaoperando,yalmacenaelresultadode
operandodedestinoenpalabrabajadecudrupledeloperandodestino,yelresultadode
operandofuenteenaltapalabracudrupledeloperandodestino.Todosestosnecesidaddeinstrucciones
eloperandodestinoseaSSEregistro,operandodeorigenpuedeserSSERegistrarseo
Posicindememoriade128bits.
Monitorestableceunrangodedireccionesparaelmonitoreodelastiendasdewriteback.Senecesitasu
tresoperandosseanEAX,ECXyEDXregistraneneseorden.MWAITesperaaun
writebacktiendaparaelrangodedireccionesestablecidoporlainstruccinmonitor.Utilizados
operandosconparmetrosadicionales,siendoelprimeroelEAXysegundoelregistroECX.
LafuncionalidaddeSSE3seextiendeanmsporelconjuntodeSSE3Suplementario
instrucciones(SSSE3).Porlogeneral,siguenlasmismasreglasparalosoperandoscomotodala
OperacionesMMXextendieronporSSE.
phaddwyphadddrealizanlahorizontaladicionaldelosparesdevaloresadyacentes
delafuenteyeloperandodedestino,ylastiendasdelosimporteseneldestino
(Sumasdeloperandodeorigenentranenlaparteinferiordelregistrodedestino).Operan
entrozosde16bitsode32bits,respectivamente.phaddswrealizalamismaoperacinen
firmadovaloresempaquetadosde16bits,peroelresultadodecadaadicinsesatura.phsubwy
phsubdrealizaranlogamentelasustraccinhorizontalde16bitsovalorde32bitslleno,
yphsubswrealizalarestahorizontaldelosvaloresempaquetadosde16bitsfirmadoscon
saturacin.
pabsb,pabswypabsdcalcularelvalorabsolutodecadaunofirmadollenofirmaron
valoreneloperandofuenteylosalmacenaenelregistrodedestino.Ellosoperador
en8bits,16bitsyloselementosde32bitsrespectivamente.
multiplicapmaddubswfirmaronvaloresde8bitsdeloperandofuenteconeldiente
pondientevaloressinsignode8bitsdeloperandodedestinoparaproducirintermedia
Valoresde16bits,ycadaparadyacentedelosvaloresintermediosseaadeentonceshori
talmenteyesassumasde16bitssealmacenaneneloperandodestino.
multiplicapmulhrswcorrespondientesenterosde16bitsdelafuenteyeldestino
operandoparaproducirvaloresde32bitsintermedios,ylos16bitsjuntoalbitmsalto
decadaunodeesosvaloressonentoncesredondeadoyembaladoeneloperandodestino.
Pgina53
2.1.LASINSTRUCCIONESarquitecturax86
53
pshufbbarajalosbyteseneloperandodestinodeacuerdoalamscaraproporcionado
poreloperandodeorigencadaunodelosbyteseneloperandodeorigenesunndicedelaposicindedestino
paraelbytecorrespondienteeneldestino.
psignb,psignwypsigndrealizanlaoperacinen8bits,enterosde16bitso32bits
eneloperandodedestino,enfuncindelossignosdelosvaloresenlafuente.Sielvalor
enfuenteesnegativo,elvalorcorrespondienteenelregistrodedestinoesnegado,si
elvalorenlafuenteespositivo,ningunaoperacinserealizaenelvalorcorrespondientese
llevaacabo,ysielvalordefuenteescero,elvalorseponeaceroendestino,tambin.
palignranexaeloperandofuentealoperandodestinoparaformarlainter
mediarenvalordedosveceseltamao,yluegoextraeeneldestinoregistrarel64o
128bitsquesehagaalineadosconelbytededesplazamientoespecificadoporelterceroperando,que
debeserunvalorinmediatode8bits.EstaeslanicainstruccinSSSE3quetienetres
argumentos.
2.1.18AMD3DNow!instrucciones
El3DNow!extensinagregaunnuevoinstruccionesMMXalasdescritasen2.1.14,y
introducelaoperacinsobrelosvaloresdepuntoflotanteenpaquetesde64bits,cadaunocompuestopordos
simpleprecisinlosvaloresdepuntoflotante.
EstasinstruccionessiguenlasmismasreglasquelasoperacionesgeneralesdeMMX,eldestino
operandonacindebeserunregistroMMX,eloperandofuentepuedeserunregistroMMX
oubicacindememoriade64bits.pavgusbcalculalospromediosredondeadasdeempaquetadosinsigno
bytes.pmulhrwrealizaunamultiplicacinfirmadadelaspalabrasllenas,alrededordelalto
palabradecadaunodoblesresultadosdepalabrasylasalmacenaeneloperandodestino.pi2fd
convierteempaquetadospalabradobleenterosenvaloresdepuntoflotanteparallevar.conversospf2id
embaladovaloresdepuntoflotanteenpalabrasenterosdoblesenvasados
utilizandoeltruncamiento.pi2fw
conviertepalabraenterosempaquetadosenvaloresdepuntoflotanteenvasados,slobajospalabrasdecada
palabradobleeneloperandofuenteseutilizan.pf2iwconviertelosvaloresdepuntoflotanteenvasados
enenterosdepalabrasllenas,losresultadosseextiendenapalabrasdoblesutilizandolaextensindesigno.
pfaddaadellenovaloresdepuntoflotante.flotantePFSUBypfsubrsubstratosembalado
valoresdepuntos,elprimerosustraevaloresdeorigendelosvaloresdedestino,elsector
ondunosustraevaloresdedestinodelosvaloresdeorigen.multiplicapfmulembalados
valoresdecomaflotante.pfaccsumalosvaloresdepuntoflotantedealtaybajadelades
operandotino,almacenandoelresultadoenladoblepalabrabajadedestino,yagrega
losvaloresdepuntoflotantedealtaybajadeloperandofuente,almacenarelresultadoenel
altadoblepalabradedestino.pfnaccsustraeelaltovalordecomaflotantede
eloperandodestinodelabaja,almacenandoelresultadoenladoblepalabrabajadedes
tino,ysustraeelaltovalordecomaflotantedeloperandofuentedela
bajo,almacenandoelresultadoenlaaltadoblepalabradedestino.pfpnaccsustraeel
altovalordecomaflotantedeloperandodestinodelabaja,almacenandoelresultado
enladoblepalabrabajadedestino,yaadeelpuntovaflotantedebajayalta
uesdeloperandofuente,almacenarelresultadoenelaltodoblepalabradedestino.
Pgina54
54
CAPTULO2.delconjuntodeinstrucciones
pfmaxypfmincalculanlosvaloresmximoymnimodevaloresdepuntoflotante.pswapd
inviertelapalabradobledealtoybajodeloperandofuente.pfrcpdevuelveunes
timacionesdelosrecprocosdevaloresdepuntoflotantedeloperandofuente,pfrsqrt
Devuelveunaestimacindelasracescuadradasrecprocasdevaloresdepuntoflotantedela
operandodeorigen,pfrcpit1realizalaprimeraetapaenlaiteracindeNewtonRaphsonpara
refinarlaaproximacinrecprocaproducidoporlainstruccinpfrcp,pfrsqit1realiza
elprimerpasoenlaiteracindeNewtonRaphsonpararefinarlarazcuadradarecprocaAP
aproxiproducidaporlainstruccinpfrsqrt,pfrcpit2realizaelsegundopasofinal
enlaiteracindeNewtonRaphsonpararefinarlaaproximacinrecprocaolalosdesti
Rocalaproximacindelarazcuadrada.pfcmpeq,pfcmpgeypfcmpgtcomparanelempaquetado
valoresdepuntoflotanteyestablecetodoslosbitsocerostodoslosbitsdeldatocorrespoding
eneloperandodedestinodeacuerdoconelresultadodelacomparacin,primerocompruebasi
losvaloressoniguales,segundochequessielvalordedestinoesmayoroigualalafuente
valor,tercerocompruebasielvalordedestinoesmayorqueelvalordeorigen.
prefetchyprefetchwcargarlalneadedatosdelamemoriaquecontienebytes
especificadaporeloperandoenlamemoriacachdedatos,lainstruccinprefetchwdebeutilizarse
cuandoseesperaquelosdatosenlalneadecachquesermodificado,delocontrariolacaptacinprevia
lainstruccindebeserutilizado.Eloperandodebeserunaubicacindememoriade8bits.
femmsrealizaunayunoclaradelestadoMMX.Notieneoperandos.
02.01.19Lasinstruccionesdelmododelargosx8664
LasarquitecturasAMD64yEM64T(vamosautilizarelnombrex8664comnparaellos
ambos)ampliarelconjuntodeinstruccionesx86paraelprocesamientode64bits.Mientraslegadoycompatibilidad
modosbilidadutilizanelmismoconjuntoderegistroseinstrucciones,elnuevomododelargoseextiende
lasoperacionesdex86a64bitsypresentavariosregistrosnuevos.Puedeactivar
generarelcdigodeestemodoconladirectivause64.
Cadaunodelosregistrosdepropsitogeneralseextiendea64bitsyelconjuntoochonuevos
seagreganregistrosdepropsitogeneralytambinochonuevosregistrosdelaESS.Consultelatabla2.4para
elresumendelosnuevosregistros(slolosquenoseenumeranenlatabla1.9).La
registrosdepropsitogeneraldesmallerstamaossonlasporcionesdeordeninferiordelosmsgrandes.
Todavasepuedeaccederalosregistrosdelaah,bh,dhchyenelmododetiempo,peronopuedeutilizar
enlamismainstruccinconcualquieradelosnuevosregistros.
Engeneral,cualquierinstruccindearquitecturax86,loquepermitide16bitso32bits
,tamaosdeoperandoenelmododetiempopermitetambinlosoperandosde64bits.Losregistrosde64bitsdebera
serusadoparatratarenmododelargo,tambinsepermiteeldireccionamientode32bits,peronoes
posibleutilizarlasdireccionesbasadasenregistrosde16bits.Acontinuacinsepresentanlasmuestrasdenuevo
operacionesposiblesenelmododetiempoenelejemplodelainstruccinmov:
movrax,r8
transferenciaderegistrogeneralde64bits
moval,[rbx]memoriadetransferenciadirigidaporel64bitderegistro
Elmodolargoutilizatambinlasdireccionesbasadaspunterodeinstrucciones,puedeespecificarlo
Pgina55
2.1.LASINSTRUCCIONESarquitecturax86
Tipo
Bits
General
16
32
55
64
SSE
128
rax
rcx
rdx
rbx
spl
rsp
BPL
rbp
sil
rsi
dil
idi
R8b
r8w
R8d
r8
xmm8
R9b
r9w
R9D
r9
xmm9
R10br10wr10dr10xmm10ymm10
R11br11wr11dr11xmm11ymm11
R12br12wr12dr12xmm12ymm12
R13br13wr13dr13xmm13ymm13
R14br14wR14dr14xmm14ymm14
R15br15wr15dr15xmm15ymm15
AVX
256
ymm8
ymm9
Tabla2.4:Nuevosregistrosenmodolargo.
manualmenteconelRIPsmboloespecialderegistro,perotalabordartambinesautomticamente
generadaporelensambladorplana,yaquenohay64bitsenelmododedireccionamientoabsolutodelargo.
Anpuedeforzarelensambladordeusarel32bitdireccionamientoabsolutoponiendoel
overridetamaodworddireccindentrodeloscorchetes.Tambinhayunaexcepcin,
dondeel64bitdireccionamientoabsolutoesposible,eslainstruccinmovconunodelos
operandosiendoregistroacumulador,ysiendosegundoeloperandodememoria.Paraforzar
elensambladordeusarel64bitdireccionamientoabsolutoexiste,utiliceeloperadortamaoQWORD
direccindentrodeloscorchetes.Cuandonoseaplicaoperadordetamaoparaabordar,
ensambladorgeneralaformaptimaautomticamente.
mov[QWORD0],raxabsolutadireccionamientode64bits
mov[dword0],r15dabsolutadireccionamientode32bits
mov[0],rsi
RIPrelativadireccionamientoautomtico
mov[rip+3],sil
RIPrelativadireccionamientomanual
Tambincomolosoperandosinmediatosparalasoperacionesde64bitsslolosvaloresconsignode32bits
sonposibles,conlanicaexcepcindelainstruccinmovconeloperandodestino
un64bitderegistrodepropsitogeneral.Tratardeforzarla64bitinmediataconcualquier
otrainstruccinseproducirunerror.
Sinoserealizaningunaoperacinenlosregistrosde32bitsgeneralesenmodolargo,lapartesuperior
32bitsdelosregistrosde64bitscontienenserellenanconceros.Estoesadiferenciadela
Pgina56
56
CAPTULO2.delconjuntodeinstrucciones
operacionesenporcionesde16bitso8bitsdelosregistros,queconservanlosbitssuperiores.
Tresnuevasinstruccionesdeconversindetiposestndisponibles.Elsignocdqeextiendeel
palabradobleenEAXenpalabraquadyalmacenaelresultadoenelregistroRAX.CQOsigno
seextiendelapalabraquadenRAXenpalabradoblequadyalmacenalosbitsadicionalesenel
RegistroRDX.Estasinstruccionesnotienenoperandos.signomovsxdamplaeldoble
operandofuentepalabra,siendoobienelregistrode32bitsodelamemoria,eneldestinode64bits
operando,quetienequeserregstrate.Nosenecesitaningunainstruccinanlogaparaelcero
extensin,yaqueserealizadeformaautomticaporcualquieroperacinenregistrosde32bits,comoseal
enelprrafoanterior.YlasinstruccionesMOVZXyMOVSX,conformealogeneral
regla,sepuedeutilizarconeloperandodedestinode64bits,loquepermitelaextensindebyteopalabra
valoresenpalabrascudruples.
Todalaaritmticabinariaylaenseanzalgicasehanpromovidoparapermitir64bits
operandosenmodolargo.Elusodeinstruccionesaritmticasdecimalesenmodolargoes
prohibida.
Lasoperacionesdepila,comoempujeypopenelmodopordefectodelargoaoperandosde64bitsy
quenoesposibleutilizaroperandosde32bitsconellos.ElPushaypopasedesautorizan
enelmododelargo.
Loscercadesaltosyllamadasindirectasenmodopordefectodelargoaoperandosde64bitsyes
noesposibleutilizarlosoperandosde32bitsconellos.Porotrolado,laindirecta
lejossaltosyllamadaspermitenningnoperandosquesepermitienlaarquitecturax86y
Tambinsepermiteoperandodememoriade80bits(aunquesloEM64Tpareceaplicartales
variante),conlosprimerosochobytesyladefinicindelosdosltimosbytesdecompensacinqueespecificanla
selector.Lossaltoslejanosdirectoyllamadasnoestnpermitidosenmodolargo.
LasinstruccionesdeE/S,adentro,afuera,entradasysalidassonlasinstruccionesexcepcionalesque
noseextiendenaaceptaroperandosdepalabraquadenmodolargo.Peroelrestodelacadena
operacionesson,yhaynuevasformascortasmovsq,cmpsq,scasq,lodsqystosq
introducidoparalasvariantesdelasoperacionesdecadenadeelementosdecadenade64bits.ElRSIy
RegistrosdeIDIseutilizanpordefectoparahacerfrentealoselementosdecadena.
LaEPA,LGSylasinstruccioneslssseextiendenaaceptarmemoriadeorigende80bits
operandoconregistrodedestinode64bits(aunquesloEM64Tpareceponerenprcticatales
variante).Losldsylesestnpermitidasenelmododetiempo.
Lasinstruccionesdelsistemacomolgdtquerequeraneloperandodememoriade48bits,en
mododelargarequiereeloperandodelamemoriade80bits.
Elcmpxchg16beselequivalentede64bitsdeinstruccinCMPXCHG8B,utilizaeldoble
quadoperandodememoriapalabrayde64bitsregistrapararealizarlaoperacinanloga.
Elfxsave64yfxrstor64denuevasvariantesdeinstruccionesfxsaveyfxrstor,
disponiblesloenelmodolargo,queutilizanunformatodiferentedereadealmacenamientoconelfinde
almacenaralgunospunterosentamaocompletode64bits.
swapgseslanuevainstruccin,queintercambialoscontenidosdeGSregistroyla
KernelGSbasemodeloespecficoregistro(MSRdireccin0C0000102h).
syscallysysreteselpardenuevasinstruccionesqueproporcionanlafuncionalidad
similaraSYSENTERysysexitenmodolargo,dondenoestpermitidoelltimopar.La
Pgina57
2.1.LASINSTRUCCIONESarquitecturax86
sysexitqymnemotcnicossysretqproporcionanlasversionesde64bitsdesysexitysysret
instrucciones.
Losmnemnicosrdmsrqywrmsrqsonlasvariantesde64bitsdelaRDMSRywrmsr
instrucciones.
57
02/01/20instruccionesSSE4
Enrealidad,haytresdiferentesconjuntosdeinstruccionesbajoelnombreSSE4.Intelde
firmadodosdeellos,SSE4.1ySSE4.2,conesteltimoseextiendelaantiguaenelpleno
SSE4deIntelestablece.Porotrolado,laaplicacinporAMDincluyeslounospocos
instruccionesdeesteconjunto,perotambincontienealgunasinstruccionesadicionales,quesellaman
laSSE4aestablecido.
LasinstruccionesSSE4.1sumayorasiguenlasmismasreglasparaoperandos,comolaESSbsica
operaciones,porloquerequierenoperandodestinoaserSSEregistroyoperandofuente
siendolaposicindememoriade128bitsoSSEregistro,yalgunasoperacionesrequierenunatercera
operando,elvalorinmediatode8bits.
pmulldrealizaunamultiplicacinfirmadadelaspalabrasylastiendasdelosdoblesenvasados
bajosdoblespalabrasdelosresultadoseneloperandodedestino.pmuldqrealizaunados
multiplicacionesfirmadosdelaspalabrasdoblescorrespondientesenlaspalabrasquadinferioresde
operandos,yalmacenalosresultadoscomopalabrasquadenvasados
enelregistrodedestino.
pminsbypmaxsbdevolverlosvaloresmximosdebytesfirmadosempaquetadasmnimoo,
pminuwypmaxuwdevuelvenelvalormximodelaspalabrasnofirmadosempaquetadasmnimoy,
pminud,pmaxud,pminsdyretornopmaxsdvaloresmximosdeempaquetadomnimoo
palabrassinfirmarofirmados.Estasinstruccionescomplementanlasinstruccionesdecomputacin
embaladomnimoomximointroducidoporSSE.
ptestestableceelindicadorZFaunocuandoelresultadodeANDbitabitdelosdosoperandos
escero,yponeaceroelZFlocontrario.TambinestablecelabanderaCFauno,cuandoelresultadode
YaniveldebitsdeloperandodestinoconelbitabitNOdeloperandofuentees
cero,yponeaceroelCFlocontrario.pcmpeqqcomparapalabrasquadllenoporlaigualdad,
yllenaloselementoscorrespondientesdeloperandodedestino,yaseaconunosoceros,
dependiendodelresultadodelacomparacin.
packusdwconvierteembaladofirmdoblespalabrasdelafuenteyeldestino
operandoenlaspalabrassinfirmarutilizandosaturacin,yalmacenalapalabraresultanteocho
valoresenelregistrodedestino.
phminposuwencuentralapalabravalorsinsignomnimoeneloperandofuenteylugares
enlapalabramsbajodeloperandodedestino,elestablecimientodelosbitssuperioresrestantesde
destinoacero.
roundps,roundss,roundpdyroundsdrealizarelredondeodeempaquetadooindivi
ualvalordecomaflotantedeprecisinsimpleodoble,usandoelmododeredondeoespecificado
porelterceroperando.
xmm0roundsd,xmm1,0011brondahaciacero
Pgina58
58
CAPTULO2.delconjuntodeinstrucciones
DPPscalculaproductoescalardelosvaloresdepuntoflotantedeprecisinsimplelleno,esdecir
multiplicaloscorrespondientesparesdevaloresdelafuenteyeloperandodedestinoy
luegosumalosproductosarriba.Losaltoscuatrobitsdelatercera8bitoperandoinmediato
elcontroldelosproductosquesecalculanyllevadosalasuma,y
elbajocontroldecuatrobits,
enlaqueloselementosdedestinodelproductopuntoresultantesecopia(losotroselementos
estnllenosdecero).DPPDcalculaproductoescalardellenodobleprecisinflotante
valoresdepunto.Losbits4y5deltercercontroloperando,lascualessecalculanlosproductos
yaadi,ylosbits0y1deestecontroldevalor,queloselementosenelregistrodestino
debellenarseconelresultado.mpsadbwcalculamltiplessumasdelasdiferenciasabsolutas
bytesdenofirmados.Eltercercontrolesdeoperando,convalorenbits01,quedela
bloquesdecuatrobyteseneloperandodeorigensetomaparacalcularunadelasdiferenciasabsolutas,y
conunvalorenelbit2,enelquedelosdosprimerosbloquesdecuatrobyteseneldestinodeiniciodeloperando
clculodemltiplessumas.Lasumasecalculaapartirdecuatrodifferenciesabsolutasentre
losbytessinsignoenelbloquedeorigenydedestinocorrespondiente,ycadalado
sumasecalculadelamismamanera,peroteniendoloscuatrobytesdedestinoenel
posicionarunbytedespusdelaposicindelbloqueanterior.Loscuatrobytesdelafuente
siendoelmismocadavez.Deestamanerasecalculanochosumasdedifferenciesabsolutosy
almacenancomovaloresdepalabraenvasados
eneloperandodestino.Lasinstruccionesdescriben
enesteprrafosiguelasmismasreglasparaoperandos,comolainstruccinroundps.
blendps,blendvps,blendpdyblendvpdcondicionalmentecopiarlosvaloresde
operandodeorigeneneloperandodedestino,enfuncindelosbitsdelamscaraproporcionado
porterceraoperando.Siunbitdelamscaraseestablece,elelementocorrespondientedelafuentesecopiaen
elmismolugarendestino,delocontrarioestaposicineseldestinosedejasincambios.
Lasreglasparalosdosprimerosoperandossoniguales,comoparaobtenerinstruccionesgeneralesdelaESS.
blendpsyblendpdnecesitanterceroperandoaserde8bitsinmediata,yqueoperanen
valoresindividualesodoblesdeprecisin,respectivamente.blendvpsyblendvpdrequierentercero
operandoaserelregistroXMM0.
blendvpsXMM3,xmm7,xmm0mezclardeacuerdoconmscara
pblendwcondicionalmentecopiaselementosdenominativosdeloperandofuenteeneldes
tino,dependiendodelosbitsdemscaraproporcionadasporterceroperando,quenecesitaestar
Valorinmediatode8bits.pblendvbcondicionalmentecopiaselementosdebytesdelafuente
operandosendestino,enfuncindemscaradefinidosporelterceroperando,quetiene
serXMM0registro.Estasinstruccionessiguenlasmismasreglasparalosoperandoscomoblendps
yblendvpsinstrucciones,respectivamente.
insertpsinsertaunnicovalordecomaflotantedeprecisindesdeellugaren
operandodeorigenespecificadoporlosbits67delterceroperandoenlaubicacinenelregistrodestino
seleccionadoporlosbits45delaterceraoperando.Adems,elbajocuatrobitsdeterceroperando
control,queloselementosderegistrodedestinoseponenacero.Losdosprimerosoperandos
seguirlasmismasreglasqueparaelfuncionamientogeneralSSE,elterceroperandodebeserde8bits
inmediata.
extractpsextraeunnicovalordecomaflotantedeprecisintomadodelaubicacin
Pgina59
2.1.LASINSTRUCCIONESarquitecturax86
59
enfuentedeoperandoespecificadopordosbitsbajosdeterceroperando,yloalmacenaenla
operandodestino.Eldestinopuedeserunvalordememoriade32bitsodepropsitogeneral
registro,eloperandofuentedebeserSSEregistro,yelterceroperandodebeser
Valorinmediatode8bits.
extractpsedx,xmm3,3extraerelvalormsalto
pinsrb,pinsrdypinsrqcopiarunbyte,palabraopalabradoblequaddelafuente
operandoenlaubicacindeloperandodedestinodeterminadoporelterceroperando.La
operandodedestinotienequeserSSEregistro,eloperandodeorigenpuedeserunaubicacindememoria
detamaoapropiado,oelregistrodepropsitogeneralde32bits(perodepropsitogeneralde64bits
registrarseparapinsrq,quesloestdisponibleenelmododetiempo)yelterceroperandotiene
serde8bitsvalorinmediato.Estasinstruccionescomplementanlainstruccinpinsrw
operandoenSSEdestinoregistro,quefuepresentadoporSSE2.
pinsrdXMM4,eax,1insertarlapalabradobleensegundaposicin
pextrb,pextrw,pextrdypextrqcopiarunbyte,palabra,palabradobleocudruplepalabra
desdelaubicacineneloperandofuenteespecificadaporterceroperando,eneldestino.La
operandofuentedebeserSSEregistro,elterceroperandodebeserde8bitsinmediata,
yeloperandodedestinopuedeserlaubicacindememoriadetamaoapropiado,olade32bits
registrodepropsitogeneral(pero64bitderegistrodepropsitogeneralparapextrq,queesslo
disponibleenelmododelargo).LainstruccinpextrwconSSEregistrarsecomofuenteyaestaba
introducidoporSSE2,peroSSE4seextiendeparapermitiroperandodememoriacomodestino.
pextrw[ebx],xmm3,7extraermsaltopalabraenlamemoria
pmovsxbwypmovzxbwrealizarextensindesignooceroextensindeochovaloresdebytes
desdeeloperandodeorigenenvaloresdepalabraenvasados
eneloperandodedestino,quetieneque
serSSEregistro.Lafuentepuedesermemoriade64bitsoSSEregistrocuandoseregistra,
sloseutilizasubajaporcin.pmovsxbdypmovzxbdrealizanextensindesignoocero
extensindeloscuatrovaloresdebytesdesdeeloperandodeorigenenlosvaloresdepalabradobleenvasados
eneloperandodedestino,lafuentepuedesermemoriade32bitsoSSEregistro.pmovsxbq
ypmovzxbqrealizanextensindesignooceroextensindelosdosvaloresdebytesdesdeel
operandodeorigenenlosvaloresdepalabraquadenvasados
eneloperandodestino,elorigenpuedeser
Memoriade16bitsoSSEregistro.pmovsxwdypmovzxwdrealizanextensindesignoocero
extensindeloscuatrovaloresdepalabradesdeeloperandofuenteenpalabrasdoblesenvasados
eneloperandodestino,elorigenpuedeserlamemoriade64bitsoSSEregistro.pmovsxwq
ypmovzxwqrealizanextensindesignooceroextensindelosdosvaloresdelaspalabrasde
eloperandofuenteenpalabrasquadenvasados
eneloperandodestino,elorigenpuedeser
Memoriade32bitsoSSEregistro.pmovsxdqypmovzxdqrealizanextensindesignoocero
extensindelosdosvaloresdepalabrasdoblesdeloperandofuenteenpalabrasquadenvasados
eneloperandodestino,elorigenpuedeserlamemoriade64bitsoSSEregistro.
xmm0pmovzxbq,palabra[si]ceroextenderbytesapalabrasquad
pmovsxwqxmm0,XMM1
inscribirseextenderpalabrasparaQuadpalabras
Pgina60
60
CAPTULO2.delconjuntodeinstrucciones
cargasmovntdqapalabradoblequaddesdeeloperandofuentealdestinomediante
unapistanotemporal.EloperandodestinodebeserregistroSSE,ylafuente
operandodebeserlaposicindememoriade128bits.
ElSSE4.2,sedescribeacontinuacin,aadenosloalgunasdelasoperacionesnuevasenunregistrodelaESS,
perotambinintroducealgunascompletamentenuevasinstruccionesoperanpropsitogeneral
registrasolamente.
pcmpistricomparados(longitudimplcita)cuerdascerodecomposicinprevistosensufuente
yoperandodestinoygeneraunndicealmacenadoaECXrealizapcmpistrm
lamismacomparacinygeneraunamscaraalmacenadoparaXMM0.pcmpestricomparados
cuerdasdelongitudesexplcitas,conlongitudproporcionadaenEAXparaeloperandodestino
yenEDXparaeloperandofuente,ygeneraunndicealmacenadoparaECXpcmpestrm
realizalamismacomparacinygeneraunamscaraalmacenadoparaXMM0.Lafuente
yoperandodedestinosiguelasmismasreglasqueparalasinstruccionesgeneralesdelaESS,latercera
operandodebeser8bitvalorinmediatodeterminarlosdetallesdeoperacinrealizada
ConsulteladocumentacindeIntelparaobtenerinformacinsobrelosdetalles.
pcmpgtqcomparapalabrasquadlleno,yllenaloselementoscorrespondientesdeldestino
operandonacin,yaseaconunosoceros,dependiendodesielvalordedestino
esmayorqueladelafuente,ono.Estainstruccinsiguelasmismasreglaspara
operandoscomopcmpeqq.
crc32acumulaunvalorCRC32paraeloperandofuentecomenzandoconvalorinicial
proporcionadaporeloperandodedestino,yalmacenaelresultadoeneldestino.Amenosqueenellargo
modo,eloperandodedestinodebeserunregistrodepropsitogeneralde32bits,yel
operandodeorigenpuedeserunbyte,palabraopalabradobleregistrooposicindememoria.En
modolargodeloperandodedestinotambinpuedeserunregistrodepropsitogeneralde64bits,y
eloperandofuenteentalcasopuedeserunbyteopalabraquadregistrooposicindememoria.
eaxcrc32,dl
acumularCRC32enelvalordebyte
eaxcrc32,palabra[ebx]acumularCRC32enelvalordelapalabra
raxcrc32,QWORD[rbx]acumularCRC32enelvalordelapalabraquad
POPCNTcalculaelnmerodebitspuestoseneloperandodeorigen,quepuedeserde16bits,
32bito64bitderegistrodepropsitogeneralomemoriadelocalizacin,yalmacenaestacuentaen
eloperandodedestino,quetienequeserregistrodelmismotamaoqueeloperandodeorigen.
Lavariantede64bitssloestdisponibleenelmododetiempo.
POPCNTecx,eax
bitsderecuentoestablecenen1
LaextensinSSE4a,quetambinincluyelainstruccinintroducidaporPOPCNT
SSE4.2,almismotiempoaadelainstruccinlzcnt,quesiguelamismasintaxis,
ycalculaelrecuentodeliderarbitsceroeneloperandofuente(sieloperandodeorigenes
todoslosbitsacero,elnmerototaldebitseneloperandodeorigensealmacenaendestino).
extrqextraerlasecuenciadebitsdelapalabrabajadelpatiodelaESSregistroprevisto
comoprimeroperandoylosalmacenaenelextremoinferiordeesteregistro,llenandolosbitsrestantes
enlapalabrabajadecudrupleconceros.Laposicindelacadenadebitsysulongitudpuedeo
Pgina61
2.1.LASINSTRUCCIONESarquitecturax86
dispondrndedosvaloresinmediatosde8bitscomosegundoyterceroperando,oporSSE
registrarsecomosegundooperando(ynohayterceroperandoentalcaso),quedebe
contenerelvalordeposicinenlosbits813ylalongituddecadenadebitsenlosbits05.
extrqxmm0,8,7
extrqxmm0,xmm5
extraer8bitsdelaposicin7
bitsextradosdefinidoporelregistro
insertqescribelasecuenciadebitsdelapalabradecuatrobajodeloperandofuente
enlaposicinespecificadaenpalabrabajadecudrupledeloperandodestino,dejandoelotro
bitsdepalabrabajadelpatiodedestinointacto.Laposicindondelosbitsdebenserescritos
ylalongituddecadenadebitsobienpuedeestarprovistadedosvaloresde8bitsinmediatoscomo
terceroycuartodeoperando,oporloscamposdebitseneloperandodeorigen(yslohaydos
operandosenestecaso),quedebecontenerelvalordeposicinenlosbits72a77ydelongitudde
cadenadebitsenlosbits6469.
XMM1insertq,xmm0,4,2inserte4bitsenlaposicin2
insertqXMM1,xmm0
insertarbitsdefinidosporelregistro
movntssymovntsdtiendavalordecomaflotantedeprecisinsimpleodobledela
fuenteSSEregistroen32bitsoubicacindememoriadedestinode64bitsrespectivamente,usando
insinuacinnotemporal.
02/01/21instruccionesAVX
LosAdvancedVectorExtensionsintroducirinstruccionesquesonnuevasvariantesdeSSE
61
instrucciones,connuevoesquemadecodificacinquepermitelasintaxisextendidaquetieneundestino
operandonacinseparadadetodoslosoperandosdeorigen.Tambinintroduce256bitsAVX
registros,queseextiendenhastalasviejas128bitsregistrosSSE.CualquierinstruccinAVXque
ponealgnresultadoenSSEregistro,ponecerobitsenaltaporcindelregistroAVX
quelocontiene.
LaversinAVXdeinstruccionesSSEtieneelnemotcnicoobtenidoanteponiendoSSE
nombredelainstruccinconv.ParacualquierSSEinstruccinaritmticaquetenaundestino
operandotambinserutilizadocomounodelosvaloresdeorigen,lavarianteAVXtieneunanuevasintaxis
contresoperandoseldestinoylasdosfuentes.Eldestinoylaprimerafuente
puedenserregistrosSSEysegundafuentepuedeserSSEregistroomemoria.Silaoperacin
serealizaenunsolopardevalores,losbitsrestantesdeprimerafuenteSSEregistranson
copiadoenelregistrodeldestino.
vsubssxmm0,XMM2,XMM3
Restardosflotadoresde32bits
vmulsdxmm0,xmm7,QWORD[esi]multiplicardosflotadoresde64bits
Encasodeoperacionesenvasados,cadainstruccintambinpuedeoperareneltamaodelosdatosde256bits
cuandolosregistrosAVXseespecificanenlugardelosregistrosdeESS,yeltamaodelamemoria
operandotambinseduplicaacontinuacin.
Pgina62
62
CAPTULO2.delconjuntodeinstrucciones
vaddpsymm1,ymm5,yword[esi]ochosumasdeparesdeflotador32bits
Lasinstruccionesqueoperansobrelostiposenterosempaquetados(enparticularlosqueauricularpuede
lierhabasidopromovidodeMMXSSE)tambinadquirilanuevasintaxiscontres
operandos,sinembargo,sonslopuedanoperarenBolsatipo128bitsyporlotanto
nopuedeutilizartodolosregistrosAVX.
vpavgwXMM3,xmm0,XMM2
vpslldXMM1,xmm0,1
promediodeenterosde16bits
cambiarpalabrasdoblesizquierda
SilaversinSSEdelainstruccintenaunasintaxiscontresoperandos,siendoeltercerouna
unvalorinmediato,laversinAVXdetalinstruccintienecuatrooperandos,con
restanteinmediataelltimo.
vshufpdymm0,ymm1,ymm2,10010011bbarajarcarrozasde64bits
vpalignrxmm0,XMM4,xmm2,3
extraerbytealineadovalor
Lapromocindeunanuevasintaxisdeacuerdoconlasreglasdescritasanteriormentesehaaplicado
atodaslasinstruccionesdelasextensionesSSEhastaSSE4,conlasexcepcionesdescritas
acontinuacin.
instruccinvdppdhasintaxisextendidaacuatrooperans,peronotieneunade256bits
versin.
Elsonunaspocasinstrucciones,asabervsqrtpd,vsqrtps,vrcppsyvrsqrtps,que
puedeoperarentamaodedatosde256bits,peroconservlasintaxisconslodosoperandos,
porqueutilizanlosdatosdeunasolafuente:
vsqrtpdymm1,ymm0
ponerracescuadradasenotroregistro
Deunamanerasimilarvroundpdyvroundpsconservanlasintaxiscontresoperandos,la
ltimosiendounvalorinmediato.
vroundpsymm0,ymm1,0011brondahaciacero
Tambinalgunasdelasoperacionessobrelosenterosenvasados
mantuvieronsuoperandodedosotresoperando
sintaxismientrasquesiendopromovidoalaversinAVX.Entalcaso,estasinstruccionessiguenex
exactamentelasmismasreglasparaoperandoscomosuscontrapartesdelaESS(desdeoperacionesdeempaquetado
enterosnotienenvariantesde256bitsenextensinAVX).Estosincluyenvpcmpestri,
vpcmpestrm,vpcmpistri,vpcmpistrm,vphminposuw,vpshufd,vpshufhw,vpshuflw.
YhaymsinstruccionesqueenAVXversionesmantienenexactamentelamismasintaxispara
operandoscomoeldeSSE,sinopcionesadicionales:vcomiss,vcomisd,
vcvtss2si,vcvtsd2si,vcvttss2si,vcvttsd2si,vextractps,vpextrb,vpextrw,
vpextrd,vpextrq,vmovd,vmovq,vmovntdqa,vmaskmovdqu,vpmovmskb,vpmovsxbw,
vpmovsxbd,vpmovsxbq,vpmovsxwd,vpmovsxwq,vpmovsxdq,vpmovzxbw,vpmovzxbd,
vpmovzxbq,vpmovzxwd,vpmovzxwqyvpmovzxdq.
Lasinstruccionesdetransferenciayconversinensumayorasehanpromovidoparapermitir256bits
operandosdetamao,ademsdelavariantede128bitsconunasintaxisidnticaaladeSSE
Pgina63
2.1.LASINSTRUCCIONESarquitecturax86
63
versindelamismainstruccin.Cadaunodelosvcvtdq2ps,vcvtps2dqyvcvttps2dq,
vmovaps,vmovapd,vmovups,vmovupd,vmovdqa,vmovdqu,vlddqu,vmovntps,vmovntpd,
vmovntdq,vmovsldup,vmovshdup,vmovmskpsyvmovmskpdheredalasincronizacinde128bits
impuestodesdeSursinningncambio,ytambinpermiteunanuevaformaconoperandos256bits
enlugardelos128bits.
vmovups[edi],ymm6
almacenardatosnoalineados256bits
vmovdduptienelasintaxisde128bitsidnticaasuversinSSE,ytambintieneuna
Versinde256bits,quealmacenalosduplicadosdelapalabraquadmsbajodelafuente
operandoenlamitadinferiordeloperandodedestino,yenlamitadsuperiordedestino
losduplicadosdelapalabracudruplebajadelamitadsuperiordelafuente.Tantolafuentey
operandosdedestinodebenentoncesservaloresde256bits.
vmovlhpsyvmovhlpsslotienenversionesde128bits,ycadatresoperandos,
quetodosdebenserregistrosSSE.vmovlhpscopiadosvaloresdeprecisinsimpledela
bajopalabraquaddesegundafuenteregstreseparalapalabraaltadelpatiodelregistrodedestino,
ycopialapalabrabajaquaddeprimerafuenteregistranenlapalabraquadbajodedestino
registrarse.vmovhlpscopiadosvaloresdeprecisinsimpledelapalabracudrupledealtadelsegundo
registrodeorigenalapalabrabajadecudrupledelregistrodedestino,ycopiaelaltaquad
palabradeprimerafuenteregistraenlapalabracudrupledealtaderegistrodedestino.
vmovlps,vmovhps,vmovlpdyvmovhpdtienesloversionesde128bitsysusintaxis
varadependiendodesieloperandodememoriaesundestinoodeorigen.Cuandolamemoria
eseldestino,lasintaxisesidnticaaladelainstruccinSSEequivalente,ycuando
lamemoriaeslafuente,lainstruccinrequieretresoperandos,losdosprimerossonlosregistrosdelaESS
ylaterceramemoriade64bits.Elvalorpuestoendestinoesentonceselvalor
copiadodeprimerafuente,yaseaconlapalabrabajaoaltaquadsustituidoporvalorde
segundafuente(eloperandodelamemoria).
vmovhps[esi],xmm7
almacenarmediasuperioralamemoria
vmovlpsxmm0,xmm7,[ebx]bajadelamemoria,descansoderegistro
vmovssyvmovsdtienenunasintaxisidnticaasusequivalentesdelaESSmientrasuno
delosoperandoseslamemoria,mientrasquelasversionesqueoperanexclusivamenteenregistrosrequieren
tresoperandos(siendocadaregistroSSE).Elvaloralmacenadoendestinoesentoncesla
valorcopiadodeprimerafuenteconelelementodedatosmsbajareemplazadoconelvalormsbajo
desdelasegundafuente.
vmovssXMM3,[edi]
vmovssxmm0,XMM1,XMM2
bajadelamemoria,descansarpuestoacero
unvalordeXMM2,tresdeXMM1
vcvtss2sd,vcvtsd2ss,vcvtsi2ssyvcvtsi2dutilizanlasintaxisdetresoperando,
dondedestinoylaprimerafuentesonsiemprelosregistrosdelaESSylasegundafuente
siguelasmismasreglasylafuenteenlasintaxisdeinstruccionesSSEequivalente.La
valoralmacenadoendestinoesentonceselvalorcopiadodeprimerafuentecondatosmsbajo
elementoreemplazadoconelresultadodelaconversin.
Pgina64
64
CAPTULO2.delconjuntodeinstrucciones
XMM4vcvtsi2sd,XMM4,ecxEnterode32bitsa64bitsfloat
xmm0vcvtsi2ss,xmm0,raxEnterode64bitsa32bitsfloat
vcvtdq2pdyvcvtps2pdpermitenlamismasintaxisquesusequivalentesdelaESS,msel
nuevasvariantesconAVXregistrocomodestinoySSEregistroomemoriade128bitscomo
fuente.Anlogamentevcvtpd2dq,vcvttpd2dqyvcvtpd2ps,ademsdelavariante
conunasintaxisidnticaalaversinSSE,permitirunavarianteconSSEregistrocomodestino
yregistroAVXodememoriade256bitscomofuente.
vinsertps,vpinsrb,vpinsrw,vpinsrd,vpinsrqyvpblendwutilizarunasintaxiscon
cuatrooperandos,dondedestinoyprimerafuentetienenqueserlosregistrosdelaESS,yeltercero
ycuartooperandosiguelasmismasreglasqueelsegundoyterceroperandoenlasintaxisde
instruccionesSSEequivalente.Valoralmacenadoendestinoeselvalorcopiadodeprimera
fuenteconalgunoselementosdedatossustituidoconvaloresextradosdelasegundafuente,
deformaanlogaalaoperacindelascorrespondientesinstruccionesSSE.
xmm0vpinsrd,xmm0,eax,3insertarlapalabradoble
vblendvps,vblendvpdyvpblendvbutilizarunasintaxisnuevaconcuatrooperandosderegistro:
destino,dosfuentesyunamscara,ensegundafuentetambinpuedeserunoperandoenmemoria.
vblendvpsyvblendvpdtenerlavariantede256bits,dondeoperandossonregistrosoAVX
Memoriade256bits,ascomolavariantede128bits,quetieneseroperandosregistraSSEo
Memoriade128bits.vpblendvbtieneslounavariantede128bits.Valoralmacenadoendestinoes
elvalorcopiadodelaprimerafuenteconalgunoselementosdedatosreemplazados,deacuerdocon
enmascarar,porlosvaloresdelasegundafuente.
vblendvpsymm3,ymm1,ymm2,ymm7mezclardeacuerdoconmscara
vptestpermitelamismasintaxisquesuversinSSEytambincuentaconunaversinde256bits,
conambosoperandosduplicadosutamao.Tambinhaydosnuevasinstrucciones,yvtestps
vtestpd,querealizanpruebasanlogas,peroslodelosbitsdesignodelascorrespondientessola
precisinovaloresdedobleprecisin,yestablecerlaZFyCFenconsecuencia.Siguen
lasmismasreglasdesintaxiscomovptest.
ymm0vptest,yword[ebx]valoresde256bitsdeprueba
vtestpdxmm0,XMM1
bitsdesignopruebadecarrozasde64bits
vbroadcastss,vbroadcastsdyvbroadcastf128denuevasinstrucciones,que
transmitirelelementodedatosdefinidoporeloperandodeorigenentodosloselementosdecorresponing
tamaoenelregistrodedestino.vbroadcastssnecesitaserfuentedememoriade32bitsy
destinoseacualquieraSSEoAVXregistro.vbroadcastsdrequierememoriade64bits
comofuente,yAVXregistrocomodestino.vbroadcastf128requierememoriade128bits
comofuente,yAVXregistrocomodestino.
vbroadcastssymm0,dword[eax]conseguirochoejemplaresdevalor
Pgina65
2.1.LASINSTRUCCIONESarquitecturax86
65
vinsertf128eslanuevainstruccin,quetienecuatrooperandos.Eldestino
ylaprimerafuentetienequeserregistrosAVX,segundafuentepuedeserSSERegistrarseo128
posicindememoriadebitsycuartooperandodebeserunvalorinmediato.Almacenaen
destino,elvalorobtenidomediantelaadopcindecontenidodeprimerafuenteylasustitucindeunodesus
Unidadesde128bitsconvalordelasegundafuente.Elbitmsbajodelcuartoespecificadeoperando
enelquelaposicindequelasustitucinsehace(yasea0o1).
vextractf128eslanuevainstruccincontresoperandos.Lasnecesidadesdedestino
serregistroSSEoposicindememoriade128bits,lafuentedebeserAVXregistro,y
elterceroperandodebeserunvalorinmediato.Extraeendestinounode
lasunidadesde128bitsdelafuente.Elbitmsbajodelterceroperandoespecifica,cuyaunidades
extrado.
vmaskmovpsyvmaskmovpdsonlasnuevasinstruccionescontresoperandosque
almacenarselectivamenteendestinoloselementosdesegundafuenteenfuncindelaseal
trozosdeelementoscorrespondientesdeprimerafuente.Estasinstruccionespuedenoperaren
datos,yaseade128bits(registrosSSE)odatosde256bits(registrosAVX).Decualquierdestino
osegundafuentetienequeserunaubicacindememoriadetamaoapropiado,losotrosdosoperandos
debeserregistros.
vmaskmovps[edi],xmm0,xmm5tiendacondicionalmente
vmaskmovpdymm5,ymm0,[esi]cargacondicional
vpermilpdyvpermilpssonlasnuevasinstruccionescontresoperandosqueper
silenciarlosvaloresdelaprimerafuentedeacuerdoaloscamposdecontroldeorigenysegundo
ponerelresultadoeneloperandodestino.SepermiteusarcualtresregistrosSSEo
tresAVXregistracomosusoperandos,lasegundafuentepuedeserunamemoriadeigualtamao
alosregistrosutilizados.Enformaalternativa,lasegundafuentepuedeserunvalorinmediatoy
entonceslaprimerafuentepuedeserunaubicacindememoriadeltamaoigualalregistrodedestino.
vperm2f128eslanuevainstruccinconcuatrooperandos,queseleccionabloquesde128bits
dedatosdepuntoflotantedeprimeraysegundafuentedeacuerdoconloscamposdebitsde
cuartooperando,ylosalmacenaeneldestino.Destinoyprimerafuentedebenser
AVXregistra,segundafuentepuedeserregistroAVXoreadememoriade256bits,ycuarto
operandodebeserunvalorinmediato.
vperm2f128ymm0,ymm6,ymm7,12hpermutarbloquesde128bits
instruccinvzeroallestablecetodoelAVXregistraacero.vzerouppercolocalapartesuperior
Porcionesde128bitsdetodosAVXregistraacero,dejandolaESSregistraintacta.Estos
nuevasinstruccionestomanningnoperando.
vldmxcsryvstmxcsrsonlasversionesAVXdeldmxcsreinstruccionesstmxcsr.
Lasreglasparasusoperandossemantienensincambios.
01/02/22instruccionesAVX2
LaextensinAVX2permitetodaslasinstruccionesAVXoperanennmerosenterosparallevara
utilizarlostiposdedatosde256bits,eintroducealgunasnuevasinstruccionestambin.
Pgina66
66
CAPTULO2.delconjuntodeinstrucciones
LasinstruccionesAVXqueoperanennmerosenterosenvasados
yslotenaunade128bitsvariable
hormigas,sehancomplementadoconlasvariantesde256bits,yporlotantosusreglasdesintaxisseconvirti
anlogaalasinstruccionesAVXoperanenBolsatipodepuntoflotante.
vpsubbymm0,ymm0,[esi]
vpavgwymm3,ymm0,ymm2
restar32bytesenvasados
promediodeenterosde16bits
Sinembargo,hayalgunasinstruccionesquenohansidoequipadosconelde256bitsvariable
hormigas.vpcmpestri,vpcmpestrm,vpcmpistri,vpcmpistrm,vpextrb,vpextrw,vpextrd,
vpextrq,vpinsrb,vpinsrw,vpinsrd,vpinsrqyvphminposuwnosevenafectadospor
AVX2ypermitirqueslolosoperandos128bits.
Lasinstruccionesdedesplazamientoparallevar,loquepermitielterceroperandoespecificandocantidadde
serregistroSSEoposicindememoriade128bits,utilicelasmismasreglasparaelterceroperando
ensuvariantede256bits.
vpsllwymm2,ymm2,XMM4
palabrasdesviacinalaizquierda
vpsradymm0,ymm3,xword[ebx]cambiarpalabrasdoblesderecha
TambinhaynuevasinstruccionesdedesplazamientoempaquetadosconestndardetresoperandoAVXsin
impuesto,quecambiarcadaelementodeprimerafuenteporlacantidadespecificadaenelcorrespondiente
elementodelasegundafuente,yalmacenarlosresultadosendestino.vpsllvddesplaza32bits
elementosfueron,vpsllvqdesplazaelementosde64bitsalaizquierda,vpsrlvddesplazaelementosde32bitsderecho
lgicamente,vpsrlvqdesplazaelementosde64bitsaladerechademaneralgicayvpsravddesplaza32bitselemento
mentosderechoaritmticamente.
Eliniciodesesinseextiendenyceroextenderinstrucciones,queenAVXversionespermitieronfuente
operandoaserregistroSSEounamemoriadetamaoespecfico,enlanuevanecesidadvariantede256bits
lamemoriadeesetamaoseduplicoSSEregistrarsecomofuenteyAVXregistrocomodestino.
ymm0vpmovzxbq,dword[esi]
bytesapalabrasquad
Tambinvmovntdqasehaactualizadoconlavariantede256bits,loquepermitetransferir
Valorde256bitsdememoriaparaAVXregistro,necesitaladireccindememoriaqueseajustaa
32bytes.
vpmaskmovdyvpmaskmovqsonlasnuevasinstruccionesconsintaxisidnticaa
vmaskmovpsovmaskmovpd,yrealizalaoperacinanlogaenempacadode32bits
ovaloresde64bits.
vinserti128,vextracti128,vbroadcasti128yvperm2i128sonlanuevain
construccionesconsintaxisidnticasavinsertf128,vextractf128,vbroadcastf128y
vperm2f128respectivamente,yrealizaroperacionesanlogasenbloquesde128bitsde
datosenteros.
instruccionesvbroadcastssyvbroadcastsdsehanampliadoparapermitirSSE
registrarsecomooperandodeorigen(queenAVXslopodaserunrecuerdo).
vpbroadcastb,vpbroadcastw,vpbroadcastdyvpbroadcastqsonlanuevain
truccionesqueemitenelbyte,palabra,palabradobleocudruplepalabradelafuente
Pgina67
2.1.LASINSTRUCCIONESarquitecturax86
67
operandoentodosloselementosdecorresponingtamaoenelregistrodedestino.Eldestino
cinoperandopuedeseroSSEoAVXregistro,yeloperandodeorigenpuedeserSSE
Registrarseodememoriadetamaoigualaltamaodelelementodedatos.
vpbroadcastbymm0,byte[ebx]obtener32bytesidnticos
vpermdyvpermpsdenuevasinstruccionesdetresoperandos,queutilizancadaunode32bits
elementodeprimerafuentecomounndicedeelementoensegundafuentequesecopiaen
destinoenlaposicincorrespondientealelementoquecontienendice.Eldestinoy
primerafuentetienequeserregistrosAVX,ylasegundafuentepuedeserAVXregistroo
Memoriade256bits.
vpermqyvpermpddenuevasinstruccionesdetresoperandos,queutilizanlosndicesde2bits
desdeelvalorinmediatoespecificadocomoterceroperandoparadeterminarquelementode
almacndeorigenenlaposicindadaendestino.EldestinotienequeserAVXregistro,
fuentepuedeserAVXregistroomemoriade256bits,yelterceroperandodebeserde8bits
valorinmediato.
Lafamiliadelasnuevasinstruccionesquerealizanrenenoperacintieneunasintaxisespecial,como
ensuoperandodememoriaqueutilizanelmododequeesnicaparaellosabordar.Labase
dedireccinpuedeserunregistrodepropsitogeneralde32bito64bit(esteltimosloenlargo
modo),yelndice(posiblementemultiplicadoporvalordelaescala,comoeneltratamientoestndar)es
especificadaporSSEoAVXregistro.Esposibleutilizarsolamentendicesinbaseycualquier
desplazamientonumricopuedeseraadidoaladireccin.Cadaunadeesasinstruccionestoma
tresoperandos.Enprimeroperandoeselregistrodedestino,segundooperandoeslamemoria
sedirigiconunndicedevectoresyterceroperandoesunregistroquecontienelamscara.Lamayorparte
bitmssignificativodecadaelementodemscaradeterminasiunvalorsecargadesde
memoriaenelementocorrespondientededestino.Ladireccindecadaelementoparacargar
sedeterminamedianteelelementocorrespondientederegistrodendiceeneloperandodememoria
paracalcularladireccinfinalconbaseydesplazamientodado.Cuandoelregistrodendice
contienemenoselementosquelosregistrosdedestinoymscara,loselementossuperioresde
destinoseponeacero.Despusdequeelvalorestcargadoexitosamente,elelementocorrespondiente
enlamscaraderegistroseestableceencero.Eldestino,elndiceylamscaradetodosdebenserdistintos
registros,noselespermiteusarelmismoregistroendospapelesdiferentes.
vgatherdpscargasprecisinsimplevaloresdelospuntosabordadosporlosndicesde32bitsflotante.
Eldestino,elndiceylamscaradetodoslosregistrosdebenserdelmismotipo,yaseaSSEo
AVX.Losdatosdirigidaporeloperandodememoriaesde32bitsdetamao.
vgatherdpsxmm0,[eax+XMM1],XMM3
reunircuatrocarrozas
vgatherdpsymm0,[ebx+ymm7*4],ymm3reunirochocarrozas
vgatherqpscargasprecisinsimplevaloresdelospuntosabordadosporlosndicesde64bitsflotante.
EldestinoylamscaradebenestarsiemprelosregistrosdelaESS,mientrasqueelregistrodendicepuedeser
yaseaSSEoAVXregistro.Losdatosdirigidaporeloperandodememoriaesde32bitsdetamao.
vgatherqpsxmm0,[XMM2],XMM3
vgatherqpsxmm0,[ymm2+64],XMM3
Pgina68
reunirdosflotadores
reunircuatrocarrozas
68
CAPTULO2.delconjuntodeinstrucciones
cargasvgatherdpdvaloresdecomaflotantededobleprecisindirigidasporlosndicesde32bits.
ElregistrodendicedebesersiempreSSEregistro,eldestinoylamscaradebenser
dosregistrosdelmismotipo,yaseaSSEoAVX.Losdatostratadosporlamemoria
operandoesde64bitsdetamao.
vgatherdpdxmm0,[ebp+XMM1],XMM3
ymm0vgatherdpd,[XMM3*8],ymm5
reunirdosdobles
reunircuatrodobles
cargasvgatherqpdvaloresdecomaflotantededobleprecisindirigidasporlosndicesde64bits.
Eldestino,elndiceylamscaradetodoslosregistrosdebenserdelmismotipo,yaseaSSEo
AVX.Losdatosdirigidaporeloperandodememoriaesde64bitsdetamao.
valoresvpgatherddyvpgatherqdcargade32bitsabordadasnien32bito64bit
ndices.Siguenlasmismasreglasquevgatherdpsyvgatherqpsrespectivamente.
valoresvpgatherdqyvpgatherqqcargade64bitsabordadasnien32bito64bit
ndices.Siguenlasmismasreglasquevgatherdpdyvgatherqpdrespectivamente.
01/02/23conjuntosauxiliaresdeinstruccionescomputacionales
HayunnmerodeextensionesdeconjuntosdeinstruccionesadicionalesrelacionadosconAVX.Seintro
ducirinstruccionesnuevovector(yavecestambinasusequivalentesSSEqueutilizanclsico
codificacindeinstrucciones),einclusoalgunasnuevasinstruccionesdefuncionamientoenlosregistrosgenerales
queutilizanlacodificacinAVXcomoladepermitirlasintaxisextendidacondestinoseparada
yoperandosdeorigen.ElsoportedeCPUparacadaunodeestosconjuntosdeinstruccionesdebeser
determinadaporseparado.
LaextensinAESproporcionaunconjuntoespecializadodeinstruccionesparaelpropsitode
clculoscriptogrficosdefinidosporAdvancedEncryptionStandard.Cadaunodeestos
instruccin,tienedosversiones:laAVXunoyelotroconlasintaxisSSEas
clsicoutilizacodificacin.ConsultelosmanualesdeIntelparalosdetallesdelaoperacindeestos
instrucciones.
aesencyaesenclastrealizanunasolarondadecifradoAESendatosde
primerafuenteconunaclavedevueltadelasegundafuente,yelresultadodetiendaendestino.La
destinoyprimerafuentesonregistrosdelaESS,ylasegundafuentepuedenserSSEregistro
ounamemoriade128bits.LasversionesdeestasinstruccionesAVX,vaesencyvaesenclast,
utilizarlasintaxiscontresoperandos,mientrasquelaversinSSEcomoslotienedosoperandos,
conprimeroperandoseralavezeldestinoyprimerafuente.
aesdecyaesdeclastrealizanunasolarondadeAESdescifradodelosdatosdel
primerafuenteconunaclavedevueltadesdesegundafuente.Lasreglasdesintaxisparaellosysu
VersionesAVXsonlosmismosqueparaaesenc.
aesimcrealizalatransformacinInvMixColumnsdeloperandofuenteyalmacn
elresultadoeneldestino.Tantoaesimcyusovaesimcslodosoperandos,destino
siendoSSEregistro,ylasfuentesestSSERegistrarseoposicindememoriade128bits.
aeskeygenassistesunainstruccindeayudanteparagenerarlaclavederonda.Necesitatres
operandos:destinodeserSSEregistro,lasfuentesestSSERegistrarseodememoriade128bits,
Pgina69
2.1.LASINSTRUCCIONESarquitecturax86
69
yterceroperandosiendode8bitsvalorinmediato.LaversindeestainstruccinAVX
utilizalamismasintaxis.
LaextensinCLMULintroduceunasolainstruccin,pclmulqdq,ysuAVX
versintambin.Estainstruccinrealizaunamultiplicacincarrylessdedosvaloresde64bits
seleccionadodeprimeraysegundafuentedeacuerdoconloscamposdebitsenunvalorinmediato.
EldestinoylaprimerafuentesonregistraSSE,segundafuenteesregistroSSEo128
marcas,yunvalorinmediatoseofrececomoltimooperando.vpclmulqdqtomadecuatro
operandos,mientraspclmulqdqllevaslotresoperandos,alaprimerasirvetanto
elpapeldedestinoylaprimerafuente.
LaextensinFMA(FusedMultiplyAdd)introduceinstruccionesadicionalesAVX
querealizarlamultiplicacinylasumacomounasolaoperacin.Cadaunotienetres
operandos,primerounoquesirvetantoelpapeldedestinoylaprimerafuente,ylasiguiente
lossiendolasegundaytercerafuente.SeobtieneelmnemnicodeinstruccinFMA
anexandoalprefijovf:primeromonmparaseleccionarsiresultadodelamultiplicacin
debetomarsecomoestonegada,entoncesobienaadirosubparaseleccionarsitercervalorse
seraadidoalproductoorestadodelproducto,entoncesobien132,213o231
paraseleccionarquoperandosfuentesemultiplicanyqueseaadeunoorest,
yfinalmenteeltipodedatosenlosqueoperalainstruccin,yaseaps,pd,ssoSD.
ComolofueconinstruccionesSSEpromovidosaAVX,instruccionesdeusoencaminosde
valoresdepuntosflotantespermitensintaxis128bitso256bits,enlaantiguatodoslosoperandosson
SSEregistra,peroeltercerotambinpuedeserunamemoriade128bits,enesteltimocasolosoperandos
sonregistrosAVXylaterceratambinpuedenserunamemoriade256bits.Lasinstruccionesque
computarslounresultadodecomaflotantenecesitaoperandosserregistrosSSE,yeltercero
operandotambinpuedeserunrecuerdo,yaseade32bitsparaprecisinsimpleode64bitsdedoble
deprecisin.
vfmsub231psymm1,ymm2,ymm3
vfnmadd132sdxmm0,xmm5,[ebx]
multiplicaryrestar
multiplicar,negaryaadir
Ademsdelasinstruccionescreadasporlaregladescritaanteriormente,hayfamilias
deinstruccionesconmnemnicosdepartida,yaseaconovfmaddsubvfmsubadd,seguido
porcualquieradelas132,213o231yluegoobienpsopd(laoperacinsiempredebeestaren
valoresenvasados
enestecaso).Seaadenalresultadodelamultiplicacinorestarde
quedependiendodelaposicindelvalorenlosdatosembaladoinstruccionesdelvfmaddsub
grupoagregacuandolaposicinesimparyrestarcuandolaposicinesan,instrucciones
delgrupovfmsubaddaadircuandolaposicinesanycuandoelsubtstract
posicinesimpar.LasreglasparaoperandossonlosmismosqueparaotrasinstruccionesFMA.
LasinstruccionesFMA4sonsimilaresaFMA,peroelusodelasintaxisconcuatrooperandosy
porquepermitandestinoseadiferenteatodaslasfuentes.Susmnemotcnicossonidnticos
alasinstruccionesFMAconel132,213o231cortado,comotenerdestinoseparada
operandohacequetalseleccindelosoperandossuperfluos.Lamultiplicacinessiempre
realizadoenlosvaloresdelaprimeraysegundafuente,yluegoelvalordetercera
Pgina70
70
CAPTULO2.delconjuntodeinstrucciones
seaadeosustraefuente.Cualquieradesegundaotercerafuentepuedeserunoperandodelamemoria,
ylasreglasparaeltamaodelosoperandossonlosmismosqueparaobtenerinstruccionesFMA.
vfmaddpdymm0,ymm1,[esi],ymm2multiplicarysumar
vfmsubssxmm0,XMM1,XMM2,[ebx]multiplicaryrestar
LaextensinF16Cconstadedosinstrucciones,vcvtps2phyvcvtph2ps,que
convertirvaloresdepuntonicoentrelaprecisinylamediadeprecisin(el16bitflotanteflotante
formatodepuntoing).vcvtps2phtresoperandos:destino,deorigenyderedondeo
controles.Elterceroperandoessiempreunainmediata,lafuenteesobienSSEoAVX
registroquecontienelosvaloresdeprecisinsimple,yeldestinoeselregistroSSEobro
ria,eltamaodelamemoriaesde64bitscuandolafuenteesSSEregistroy128bitscuando
lafuenteesAVXregistro.vcvtph2pstomadosoperandos,eldestinoquepuedeser
SSEoAVXregistro,ylafuentequeesregistroSSEolamemoriaconeltamaodela
unmediodetamaodedestinodeloperando.
LaextensinAMDXOPintroduceunaseriedenuevasinstruccionesvectorialesconen
lacodificacinylasintaxisanlogaalasinstruccionesAVX.vfrczps,vfrczss,vfrczpdy
vfrczsdextraerpartesfraccionariasdevaloressimplesodoblesdeprecisin,todostoman
dosoperandos.Lasoperacionesenvasados
permitiryasearegistroSSEoAVXcomodestino,
paralosotrosdosquetienequeserSSEregistro.Fuentepuederegistrardelmismotipoque
destino,olamemoriadetamaoapropiado(de256bitsparaeldestinodeserAVXregistro,
128bitparalaoperacinembaladocondestinosiendoregistroSSE,64bitparalaoperacin
enunvalordeaislamientodedobleprecisinyde32bitsparalaoperacinenunasolaprecisinsolitario
valor).
vfrczpsymm0,[esi]
cargarpartesfraccionarias
vpcmovcopiasbitsdesdeelprimerosegundafuenteendestinoenfuncinde
losvaloresdelosbitscorrespondientesenelcuartooperando(elselector).Sielbiten
selectorestestablecido,elbitcorrespondientedelaprimerafuentesecopiaenlamismaposicin
endestino,delocontrarioelbitdesegundafuentesecopia.Decualquiersegundafuenteo
puedeserlaposicindememoriadeseleccin,128bitso256bits,dependiendodesilosregistrosdelaESS
oregistrosAVXseespecificancomolosotrosoperandos.
vpcmovxmm0,XMM1,XMM2,[ebx]selectorenlamemoria
vpcmovymm0,ymm5,[esi],ymm2fuenteenlamemoria
Lafamiliadeinstruccionesdecomparacinempaquetadostomarcuatrooperandos,eldestinoy
primerolasfuentesestSSEregistro,segundafuentedeserSSEregistroomemoriade128bits
yelcuartooperandoserunvalorinmediatoquedefineeltipodecomparacin.La
instruccinmnemnicaosecreaaadiendoavpcomtieneelprefijoseaboubacom
parepalabrasfirmaronobytessinsigno,wosusfechasparacompararconosinsigno,doud
acompararconosinsignodoblepalabras,qouqparacompararconosinsigno
palabrascudruples.Losvaloresrespectivosdelaprimeraylasegundafuentesecomparanyse
Pgina71
2.1.LASINSTRUCCIONESarquitecturax86
71
elelementodedatoscorrespondienteendestinosehaconfiguradocomotodosunosocerosde
enesperadelresultadodelacomparacin.Elcuartooperandotienequeespecificarunodelosocho
tiposdecomparacin(tabla2)0.5.Todasestasinstruccionestambintienenvariantesconslotres
operandosyeltipodecomparacincodificadaenelnombredelainstruccinmediantelainsercinde
delmnemnicocomparacindespusvpcom.
vpcomb
xmm0,XMM1,xmm2,4
xmm0vpcomgew,XMM1,[ebx]
pruebadebytesiguales
compararpalabrasfirmados
Cdigomnemotcnico
Descripcin
0
1
2
3
4
5
6
7
menosque
lt
menoroigual
le
msque
gt
mayoroigual
ge
igual
eq
noesigual
neq
falso
falso
verdadero
verdadero
Tabla2.5:comparacionesXOP.
vpermil2psyvpermil2pdfijanloselementosderegistrodedestinoacerooauna
valorseleccionadodeprimeraosegundafuenteenfuncindeloscamposdebitscorrespondientesde
elcuartooperando(elselector)yelvalorinmediatoproporcionadaenquintooperando.
ConsultelosmanualesdeAMDparalaexplicacindetalladadelaoperacinrealizadapor
estasinstrucciones.Cadaunodeloscuatroprimerosoperandospuedenserunregistro,y,obiensegundo
fuenteoselectorpuedenserubicacindememoria,128bitso256bits,dependiendodesi
SSEregistraoregistrosAVXseutilizanparalosotrosoperandos.
vpermil2psymm0,ymm3,ymm7,ymm2,0permutardedosfuentes
vphaddbwaadeparesdebytesfirmadosadyacentesparaformarvaloresde16bitsylosalmacena
enlasmismasposicionesendestino.vphaddubwhacelomismo,perotrataalosbytes
comosinfirmar.vphaddbdysumavphaddubdtodoslosbytes(yaseaconosinsigno)en
cadabloquedecuatrobytesalosresultadosde32bits,vphaddbqysumavphaddubqtodoslosbytesencada
bloquedeochobytesdelosresultadosde64bits,vphaddwdyvphadduwdaadirparesdepalabrasde32
resultadodelosbits,vphaddwqysumavphadduwqTodaslaspalabrasencadabloquedecuatropalabrasy64bits
resultados,vphadddqyvphaddudqaadirparesdepalabrasdoblesalosresultadosde64bits.vphsubbw
substratosdecadadosbytesbloqueanelbyteenlaposicinmsaltadelaqueamenor
posicin,yalmacenaelresultadocomounvalorde16bitsconsignoenlaposicincorrespondienteen
destino,substratosvphsubwddecadadospalabrasbloquearlapalabraenunaposicinmsalta
delaqueenlaposicinmsbajayhacefirmadoresultadosde32bits,vphsubdqrestaren
Pgina72
72
CAPTULO2.delconjuntodeinstrucciones
cadabloquededospalabraseldobledeladeunaenunaposicinmsaltadelaqueenlaposicinmsbaja
ymarcasfirmaronresultadosde64bits.Cadaunadeestasinstruccionestomadosoperandos,los
destinosiendoSSEregistro,ylafuentedeserSSERegistrarseodememoriade128bits.
vphadduwqxmm0,XMM1
cuatrillizossumadelaspalabras
vpmacswwyvpmacsswwmultiplicarlosvaloresde16bitscorrespondientesfirmadosporel
primeraysegundafuenteyluegoaadirlosproductosalosvaloresparalelosdelatercera
fuente,entoncesvpmacswwtomalos16bitsmsbajosdecidosgrasossaturadosyelresultadovpmacssww
elresultadohastaelvalorde16bits,yalmacenarlosresultadosfinalesde16bitseneldestino
nacin.vpmacsddyvpmacssddrealizarlaoperacinanlogaenvaloresde32bits.
vpmacswdyvpmacswdhacerelmismoclculosloenlosbajosvaloresde16bitsde
cadabloquede32bitsylaformadelosresultadosde32bits.vpmacsdqlyvpmacssdqlrealizar
taloperacinenlosbajosvaloresde32bitsdecadabloquede64bitsyformanla64bit
resultados,mientrasvpmacsdqhyvpmacssdqhhaganlomismoenlosvaloresde32bitsdealta
cadabloquede64bits,formandotambinlosresultadosde64bits.vpmadcswdyvpmadcsswdmultiplican
elvalorde16bitsconsignocorrespondientedelaprimeraysegundafuente,entoncesresumirtodoel
cuatroproductosyaadirestasumaacadaelemento16bitsdelatercerafuente,elalmacenamientodela
resultadotruncadoosaturadaendestino.Todasestasinstruccionestomancuatrooperandos,
lasegundafuentepuedesermemoriade128bitsoSSEregistro,todoslosotrosoperandostienen
serregistrosSSE.
vpmacsddxmm6,XMM1,[ebx],xmm6acumularproducto
vppermseleccionabytesdeprimeraysegundafuente,opcionalmenteseaplicaunaseparada
transformacinacadaunodeellos,ylosalmacenaeneldestino.Loscamposdebits
encuartooperando(elselector)especificarparacadaposicineneldestinolobytede
qufuentesetomayquoperacinseaplicaaellaantesdequesealmacenaall.Remitir
losmanualesdeAMDparalainformacindetalladasobreestoscamposdebits.Estainstruccin
llevacuatrooperandos,yaseasegundafuenteoelselectorpuedeserunamemoriade128bits(oellos
puedeserSSEregistraambos),todoslosotrosoperandostienenqueserregistraSSE.
vpshlb,vpshlw,vpshldyvpshlqcambiarlgicamentebytes,palabras,palabrasdobleso
palabrasquadrespectivamente.Seespecificalacantidaddebitsadesplazarporparacadaelemento
porseparadoporelbyteconsignocolocadoenlaposicincorrespondienteenelterceroperando.
Lafuentequecontieneelementosparadesplazarseproporcionacomosegundooperando.Cualquieradesegunda
oterceroperandopuedesermemoriade128bits(opuedenserSSEregistraambos)yla
otrosoperandostienenqueserlosregistrosdelaESS.
XMM3vpshld,XMM1,[ebx]
cambiarbytesdeXMM1
vpshab,vpshaw,vpshadyvpshaqaritmticamentecambiarbytes,palabras,palabrasdobles
opalabrascudruples.Estasinstruccionessiguenlasmismasreglasqueloscambioslgicosdescritos
anteriormente.vprotb,vprotw,vprotdyvprotqgirebyte,palabra,palabrasdoblesoquad
palabras.Siguenlasmismasreglasquelosturnos,pero,adems,permitenterceroperandoa
serunvalorinmediato,encuyocasoseespecificalamismacantidaddegiroparatodala
elementosenlafuente.
Pgina73
2.1.LASINSTRUCCIONESarquitecturax86
vprotbxmm0,[esi],3
73
girarbytesalaizquierda
LaextensinMOVBEintroduceslounanuevainstruccin,movbe,queintercambia
bytesenelvalordelafuenteantesdeguardarlaeneldestino,porloquesepuedeutilizarparacargary
almacenarvaloresgrandesendian.Senecesitandosoperandos,yaseaeldestinoodeorigendebe
serunade16bits,32bitsodememoriade64bits(elltimodeloscualesslosepermiteenelmododelongitud),
yelotrooperandodebeserunregistrogeneraldelmismotamao.
LaextensindelIMC,queconstadedossubconjuntosBMI1yBMI2,introducenueva
Manualdeinstruccionesenlosregistrosgenerales,queutilizanlamismacodificacinqueAVXin
truccionesyaspermitenlasintaxisextendida.Todasestasinstruccionesutilizanoperandosde32bits,
yenelmododetiempoquetambinpermitenquelasformasconoperandosde64bits.
ANDNcalculalafuncinYdesegundafuenteconlosbitsinvertidosdeprimero
origenyalmacenaelresultadoendestino.Eldestinoylaprimerafuentetienenque
serregistrosgenerales,lasegundafuentepuedeserregistrogeneralolamemoria.
ANDNedx,eax,[ebx]
bitmultiplicareaxinvertidaconlamemoria
bextrextraedelaprimerafuentedelasecuenciadebitsutilizandounndiceylalongitud
especificadoporloscamposdebitsenelsegundooperandodeorigenyloalmacenaeneldestino.La
ms8bitsdesegundafuenteespecificanlaposicindesecuenciadebitsparaextraeryla
siguientes8bitsdesegundafuenteseespecificalalongituddelasecuencia.Laprimerafuentepuedeseruna
registrogeneralolamemoria,losotrosdosoperandostienenqueserregistrosgenerales.
bextreax,[esi],ecxextraercampodebitsdelamemoria
BLSIextraeelconjuntodebitsmsbajadelafuente,ajustartodoslosotrosbitsendestino
nacinacero.Eldestinodebeserunregistrogeneral,lafuentepuedesergeneral
Registrarseomemoria.
BLSIrax,r11
aislarelbitdecontrolmsbajo
blsmskestablecetodoslosbitseneldestinohastaelbitdecontrolmsbajoenlafuente,
incluyendoestebit.copiasBLSRtodoslosbitsdelafuentealdestino,exceptoparael
msbajobitsset,quesesustituyeporcero.Estasinstruccionessiguenlasmismasreglaspara
operandoscomoBLSI.
tzcntcuentaelnmerodevalorescerobits,queeslosbitsdecerohastaelmsbajo
establecerelbitdevalordeorigen.Estainstruccinesanlogaalzcntysigueelmismo
reglasparaoperandos,porloquetambintieneunaversinde16bits,adiferenciadelasotrasinstruccionesdeIMC.
bzhieslainstruccinBMI2,quecopialosbitsdelprimerorigenaldestino,
lareduccinacerotodoslosbitsapartirdelaposicinespecificadaporsegundafuente.Sesigueelmismo
reglasparaoperandoscomobextr.
Pextutilizaunamscaraensegundooperandofuentealseleccionarbitsdeprimeraoperandosyputs
losbitsseleccionadoscomounasecuenciacontinuaendestino.PDEPrealizalainversa
operacinquetomasecuenciadebitsdelprimerorigenyloscolocadeformaconsecutiva
enlasposicionesenlasqueseestablecenlosbitsensegundafuente,elestablecimientodetodoslosdemsbitsen
Pgina74
74
CAPTULO2.delconjuntodeinstrucciones
destinoacero.EstasinstruccionesBMI2siguenlasmismasreglasparalosoperandoscomo
ANDN.
mulxesunainstruccinBMI2querealizaunamultiplicacinsinsignodevalorde
EDXoregistroRDX(dependiendodeltamaodeoperandosespecificados)porelvalorde
terceroperando,yalmacenalamitadbajadelresultadoenelsegundooperando,yelalto
lamitadderesultadoenelprimeroperando,ylohacesinafectarlasbanderas.Latercera
operandopuedeserregistrogeneralolamemoria,ytantolosoperandosdedestinoque
serregistrosgenerales.
mulxedx,eax,ecx
multiplicaredxporecxenedx:eax
shlx,shrxysarxsoninstruccionesBMI2,querealizanlgicaoaritmtica
cambiosdevalordeprimerafuenteenlacantidadespecificadaporsegundafuente,yalmacenanel
darlugaradestinosinafectarlasbanderas.Eltenerlasmismasreglasparaoperandos
comobzhiinstruccin.
rorxesunainstruccinBMI2quegiraaladerechaelvalordeloperandofuentepor
lacantidadconstanteespecificaenterceroperandoyalmacenaelresultadoeneldestino
sinafectaralasbanderas.Eloperandodestinotienequeserregistrogeneral,el
operandodeorigenpuedeserregistrogeneralolamemoria,yelterceroperandotienequeseruna
valorinmediato.
rorxeax,edx,7
girarsinafectarbanderas
LatuneladoraesunaextensindiseadaporAMDparacomplementarelconjuntodeIMC.Elbextr
instruccinseamplaconunanuevaforma,enelquelasegundafuenteesunade32bitsinmediata
valor.blsicesunanuevainstruccinquerealizalamismaoperacinqueBLSI,perocon
losbitsdelresultadoinvierten.UtilizalasmismasreglasparaoperandoscomoBLSI.blsfillesuna
nuevainstruccin,quetomaelvalordelafuente,establecetodoslosbitspordebajodelconjuntomsbajo
pocoyalmacenarelresultadoeneldestino,sinoquetambinutilizalasmismasreglasparaoperandoscomoBLSI.
BLCI,blcic,BLCS,blcmskyblcfillsoninstruccionesanlogasaBLSI,blsic,
BLSR,blsmskyblsfillrespectivamente,peroquellevanacabolasversionesbitsinvertidade
lasmismasoperaciones.Siguenlasmismasreglasparaoperandoscomolasinstruccionesque
reflexionar.
tzmskencuentraelconjuntodebitsmsbajaenelvalordeloperandofuente,establecetodoslosbitsdebajodelpara
1ytodoelrestodebitsacero,luegoescribeelresultadoeneldestino.t1mskcencuentrael
bitmenossignificativoceroenelvalordeloperandofuente,establecelosbitsdeabajoacero
ytodoslosotrosbitsa1,yescribeelresultadoeneldestino.Estasinstruccionestienen
lasmismasreglasparaoperandoscomoBLSI.
02.01.24Otrasextensionesdeconjuntodeinstrucciones
Hayunnmerodeextensionesdeconjuntosdeinstruccionesadicionalesreconocidoporelensambladorplana,
yseproporcionalasintaxisgeneraldelasinstruccionesintroducidasporesasextensiones
aqu.Paraunainformacindetalladasobrelasoperacionesrealizadasporellos,revisarla
Pgina75
2.1.LASINSTRUCCIONESarquitecturax86
75
manualesdeIntel(porelVMX,SMX,xSave,RDRAND,FSGSBASE,INVPCID,
HLEyextensionesRTM)oAMD(paralaextensinSVM).
Lasextensionesdemquinavirtual(VMX)proporcionanunconjuntodeinstruccionesparaelmandato
gestindemquinasvirtuales.Lainstruccinvmxon,queentraenlaoperacinVMX,
requiereunnicooperandodememoriade64bits,quedebeserunadireccinfsicadelamemoria
regin,queelprocesadorlgicopuedeutilizarparaapoyarlaoperacinVMX.Elvmxoff
deinstrucciones,loquedejalaoperacinVMX,notieneoperandos.Elvmlaunchy
vmresume,quelanzaroreanudarlasmquinasvirtuales,yvmcall,quepermite
softwaredeinvitadosparallamaralmonitordemquinavirtual,utiliceningnoperandobien.
Elvmptrldcargaladireccinfsicadelaactualestructuradecontroldelamquinavirtual
(VMCS)desuoperandodememoria,vmptrstalmacenaelpunteroactualVMCSen
direccinespecificadaporsuoperandodememoria,yvmclearestableceelestadolanzamientodel
VMCSreferenciadoporsuoperandodememoriaparaborrar.Estostresinstruccintodosrequieren
nicooperandodememoriade64bits.
ElvmreadleedeVCMSuncampoespecificadoporeloperandodeorigenyloalmacena
eneloperandodedestino.Eloperandofuentedebeserunregistrodepropsitogeneral,
yeloperandodedestinopuedeserunregistrodememoria.Elvmwriteescribeenuna
VMCScampoespecificadoporeloperandodedestinoelvalorproporcionadoporeloperandodeorigen.
Eloperandofuentepuedeserunregistrodepropsitogeneralodelamemoria,yeldestino
operandodebeserunregistro.Eltamaodeoperandosparaesasinstruccionesdebeserde64bits
cuandoestenmododelargo,y32bitdeotramanera.
Elinveptyinvvpidinvalidalosbuffersdetraduccindedirecciones(TLB)y
cachsdepaginacindelasobras,yaseaderivadosdetablasdepginasextendidas(EPT),oenbasea
elidentificadordeprocesadorvirtual(VPID).Estasinstruccionesrequierendosoperandos,elprimero
unoeselregistrodepropsitogeneral,especificandoeltipodeinvalidacin,yelsegundo
unodeellosunoperandodememoriade128bitsproporcionaeldescriptordeinvalidacin.Laprimera
operandodebeserunregistrode64bitsenelmododelargo,y32bitderegistrodeotramanera.
Lasextensionesdelmodomsseguro(SMX)proporcionanlasfuncionalidadesTRAVSdisponible
lainstruccingetsec.Estainstruccintieneningnoperando,ylafuncinquees
ejecutadoesdeterminadoporelcontenidodelregistroEAXalejecutarestainstruccin.
Lamquinavirtualsegura(SVM)esunavariantedelaextensindemquinavirtualutilizadopor
AMD.LainstruccinSkinitreinicializadeformaseguraelprocesadorquepermitelapuestaenmarcha
deconfianzadesoftware,comoelmonitordemquinavirtual(VMM).Estainstruccinselleva
unnicooperando,quedebeserEAX,yproporcionaunadireccinfsicadelaseguro
bloquecargador(SLB).
Lainstruccinvmrunseutilizaparainiciarunamquinavirtualinvitada,sunicooperando
debeserunregistroacumulador(AX,EAXoRAX,laltimadisponiblesloen
modolargo)proporcionarladireccinfsicadelbloquedecontroldelamquinavirtual(VMCB).
ElvmsavealmacenaunsubconjuntodeestadodelprocesadorenVMCBespecificadoporsuoperando,y
vmloadcargaelmismosubconjuntodeestadodeprocesadordeunVMCBespecificado.Lomismo
reglasdeoperandocomoparaelvmrunaplicanaesosdosinstrucciones.
vmmcallpermitequeelsoftwaredeinvitadosallamaralaVMM.Estainstruccinnosehace
Pgina76
76
CAPTULO2.delconjuntodeinstrucciones
operandos.
stgiestableceelindicadorglobaldeinterrupcina1ycerosclgiit.Estasinstruccionestoman
ningnoperando.
invlpgainvalidalaasociacinTLBparaunapginavirtualespecificadaporelprimeroperando
(Quetienequeserregistroacumulador)yelidentificadordeespaciodedireccinespecificadaporel
segundooperando(quedebeserECXregistro).
ElconjuntodeinstruccionesxSavepermiteguardaryrestaurarloscomponentesdeestadodelprocesador.
xSaveyalmacenarxsaveoptloscomponentesdeestadodelprocesadordefinidosporlamscaradebitsenEDX
yEAXregistraenzonadefinidaporeloperandodelamemoria.xrstorrestauradelazona
especificadoporeloperandodememorialoscomponentesdeestadodelprocesadordefinidosporlamscaraen
EDXyEAX.Elxsave64,xsaveopt64yxrstor64sonversionesde64bitsdeestos
instrucciones,seadmitennicamenteenelmodolargo.
xgetbvleerelcontenidode64bitsXCR(registrodecontrolextendido)especificadosenECX
inscribirseenlosregistrosEAXyEDX.xsetbvescribeelcontenidodeEDXyEAXen
laXCR64bitsespecificadoporECXregistro.Estasinstruccionesnotienenoperandos.
LaextensinRDRANDintroduceunanuevainstruccin,rdrand,quecargael
hardwaregeneravaloraleatorioenelregistrogeneral.Senecesitaunoperando,elcual
puedeserde16bits,32bitsoregistrode64bits(conelltimodeloscualespermitisloenlargo
modo).
LaextensinFSGSBASEaadeinstruccionesdelmodolargosquepermitenleeryescribir
losregistrosbasesegmentoparalossegmentosdeFSyGS.rdfsbaseyrdgsbaseleenel
correspondientesregistrosbasesegmentoenoperando,mientraswrfsbaseywrgsbaseescritura
elvalordeloperandoenlosregistro.Todasestasinstruccionestomanunoperando,que
puedeserde32bitsoregistrogeneralde64bits.
LaextensinINVPCIDaadeinstruccininvpcid,queinvalidalacartografaen
lasmemoriascachTLByderadiobsquedabasadoeneltipodeinvalidacinseespecificaenprimeroperando
ydescriptorinvalidatePCIDespecificaensegundooperando.Losoperandosprimerodebe
serregistrogeneralde32bitscuandonoestenmododetiempo,oregistrode64bitsengeneralcuandoen
modolargo.Elsegundooperandodebeserlaposicindememoriade128bits.
LasextensionesHLEyRTMqueproporcionarunaseriedeinstruccionesparaelmandatotransaccional
gestin.Elxacquireyxreleasesonnuevosprefijosquesepuedenutilizarconalgunosde
lasinstruccionesparaempezaroterminarlaelisindebloqueoenladireccindememoriaespecificadaporelprefijo
instruccin.Lainstruccinxbegininicialaejecucindetransacciones,suoperandoes
ladireccindeunarutinadereplieguequeseejecutaencasodeabortarlatransaccin,seespecifica
comoeloperandodeinstruccindesaltoprximo.xendmarcaelfinaldetranscationalejecucin
regincin,senecesitaningnoperando.xabortfuerzasabortarlatransaccin,quesenecesitaunniode8bits
valorinmediatocomosunicooperando,estevalorsepasaenlosbitsmsaltosdeEAXa
larutinadereserva.chequesXTESTsihayejecucindetransaccionesencurso,
estainstruccinnotomaoperandos.
Pgina77
2.2.DIRECTIVASDECONTROL
77
2.2directivasdecontrol
Estaseccindescribelasdirectivasquecontrolanelprocesodemontaje,sonpro
sarduranteelmontajeypuedecausaralgunosbloquesdeinstruccionesparaserensamblados
diferenteonoensambladosenabsoluto.
2.2.1constantesnumricas
Ladirectiva=permitedefinirlaconstantenumrica.Sedebeirprecedidadela
nombrarparalaconstanteyseguidodelaexpresinnumricaqueproporcionaelvalor.
Elvalordetalesconstantespuedeserunnmeroounadireccin,peroadiferenciadelasetiquetas
lasconstantesnumricasnoselespermitemantenerlasdireccionesbasados
enregistros.Adems
estadiferencia,ensuvariantebsicaconstantesnumricassecomportanmuyparecidoetiquetas
einclusosepuedeconvisindehacerreferenciaaellos(accesoasusvaloresantesdequerealmenteconsiguen
definido).
Hay,sinembargo,unasegundavariantedeconstantesnumricas,queesreconocidopor
ensambladorcuandointentadefinirlaconstantedenombreconelqueyahabauna
constantenumricadefinida.Entalesgolosinascasoensambladorqueconstantescomomontaje
variabledetiempoypermitequeseasignaconelnuevovalor,peroprohbehaciaadelantereferencias
que(porrazonesobvias).Vamosaver,tantolavariantedeconstantesnumricasenunejemplo:
sumadd
x=1
x=x+2
suma=x
Aqu,laxesunavariabledetiempodemontaje,ycadavezqueseaccede,elvalorqueera
asignadoallosmsrecientementeseutiliza.As,siintentamosaccederalaxantesdequellegue
definidoporprimeravez,comosiescribimosddxenlugardelainstruccinsumadd,sera
causarunerror.Ycuandoseredefineconelx=x+2Directiva,elvaloranterior
dexseutilizaparacalcularlanueva.Asquecuandolasumaconstantesedefine,laxtiene
valorde3,yestevalorseasignaalasuma.Desdestesedefineslounavezen
fuente,eslaconstantenumricaestndar,ypuedeserhaciaadelantereferenciado.Asquela
sumaddsemontacomodd3.Paraleermsacercadecmoelensambladorescapazderesolver
esto,consultelaseccin2.2.6.
Elvalordelaconstantenumricapuedeserprecedidoporeloperadordetamao,quepuedeasegurar
queelvalorseajustaenelrangoparaeltamaoespecificado,ypuedeafectartambincmoalgunos
delosclculosdentrodelaexpresinnumricaserealizan.Enesteejemplo:
c8=byte1
c32=dword1
definedosconstantesdiferentes,elprimeroseajustaen8bits,elsegundoseajustaen32bits.
Pgina78
78
CAPTULO2.delconjuntodeinstrucciones
Cuandoesnecesariodefinirconstanteconelvalordeladireccin,quepuedeserRegistro
basado(yporlotantonosepuedeemplearconstantenumricaparaestepropsito),puedeutilizar
lasintaxisextendidadedirectivaetiqueta(yasehadescritoenelapartado1.2.3),como:
MYADDRetiquetaenebp+4
quedeclaraetiquetacolocadaenebp+4direcciones.Sinembargorecuerdequelasetiquetas,adiferenciade
constantesnumricas,nopuedenconvertirseenvariablesdetiempodemontaje.
2.2.2ensamblajecondicional
siladirectivahacequealgunosbloquesdeinstruccionesparasumontajesloendeterminadascon
condicin.Sedebeirseguidodelaexpresinlgicaqueespecificalascondiciones,instrucciones
enprximaslneassemontarslocuandosecumpleestacondicin,delocontrarioloharn
omitir.Laopcinmssidirectivasiguiconexpresinlgicaespecificando
condicinadicionalcomienzaelsiguientebloquedeinstruccionesquesemontarsipre
nosecumplanlascondicionesante,ysecumplelacondicinadicional.Elopcionaldems
Directivacomienzaelbloquedeinstruccionesquesemontarsitodaslascondiciones
nosecumplieron.Elfinalsidirectivaterminaelltimobloquedeinstrucciones.
Debetenerencuentaquesiladirectivaseprocesaenlaetapademontajey,portanto,
noafectaralasdirectivasdelpreprocesador,comolasdefinicionesdeconstantessimblicasy
macroinstruccionescuandoelensambladorreconocelaDirectivasi,todoelpreprocesamiento
yasehaterminado.
Laexpresinlgicaconsisteenvaloreslgicosyoperadoreslgicos.Lalgica
operadoresdelanegacinlgica,yporlgicay,|porlgicao.Lanegacintiene
lamsaltaprioridad.Valorlgicopuedeserunaexpresinnumrica,serfalsosi
esigualacero,delocontrarioserverdadera.Dosexpresinnumricapuedesercomparado
usandounodelossiguientesoperadoresparahacerelvalorlgico:=(igual),<(menor),>
(Mayor),<=(menoroigual),>=(mayoroigual),<>(noigual).
Eloperadorutilizado,seguidodeunnombredesmbolo,eselvalorlgicoqueloscheques
sielsmbolodadoseutilizaenalgunaparte(devuelveresultadocorrectoauncuandosignos
utilizadoslodespusdeestacomprobacin).Eloperadordefinidopuedeserseguidoporcualquierexpresin,
porlogeneralsloporunsolonombredelsmbolocompruebasilaexpresindadacontiene
slosmbolosquesedefinenenlafuenteyaccesiblesdesdelaposicinactual.
ConoperadorrelativeToesposiblecomprobarsilosvaloresdedosexpresiones
difierensloencantidadconstante.Lasintaxisvlidaesunaexpresinnumricaseguidade
relativeToyluegootraexpresin(posiblementebasados
enregistros).Lasetiquetasquenotienen
valornumricosimplepuedeserprobadoestaformadedeterminarqutipodeoperacionespuede
serposibleconellos.
Elsiguienteejemploutilizalaconstantederecuentoquedebedefinirsealguien
dondeenlafuente:
sicount>0
Pgina79
2.2.DIRECTIVASDECONTROL
79
cxmov,cuente
repmovsb
endif
Estasdosinstruccionesdemontajeseensamblanslosilaconstantedelcontadoresmayor
que0.Elsiguienteejemplomuestralaestructuracondicionalmscomplejo:
sielconteoyrecuentomod4
cxmov,cuente/4
repmovsd
mssicount>4
cxmov,cuente/4
repmovsd
cxmov,Condemod4
repmovsb
ms
cxmov,cuente
repmovsb
endif
Elprimerbloquedeinstruccionessemontacuandoelrecuentoesdistintodeceroydivisible
porcuatro,sinosecumpleestacondicin,lasegundaexpresinlgica,quesiguela
mssi,seevalaysiescierto,elsegundobloquedeinstruccionesconseguirmontado,
delocontrarioelltimobloquedeinstrucciones,quesiguelalneaquecontieneslootracosa,es
ensamblado.
Tambinhayoperadoresquepermitenlacomparacindelosvaloresquesoncualquiercadenadesmbolos.
Eleqcomparasidosdeestosvaloressonexactamentelomismo.Loscontrolesdeloperadoren
sielvalordadoesunmiembrodelalistadevaloresdespusdedichooperador,lalista
debeserencerradoentre<y>personajes,susmiembrosdebenserseparadoscon
comas.Lossmbolosseconsideranlamismacuandotienenelmismosignificadopara
elensambladorporejemplopwordyfwordparaensambladorsonlosmismosyporlotanto
nosedistinguenporlosoperadoresanteriores.Delamismamanera16eq10heselverdadero
condicin,sinembargo16eq10+4noloes.
EloperadoreqtypeCompruebaquelosdosvalorescomparadostienenlamismaestructura
tura,ysiloselementosestructuralessondelmismotipo.Lostiposdistinguidos
incluirexpresionesnumricas,cadenasentrecomillasindividuales,nmerosdepuntoflotante,direccin
expresiones(lasexpresionesentrecorchetesoprecedidoporeloperadorPTR),
mnemnicosdeinstrucciones,registros,losoperadoresdetamao,saltanoperadoresdetipoyeltipodecdigo.
Ycadaunodeloscaracteresespecialesqueactancomoseparadores,comocomaodospuntos,es
elpropiotiposeparado.Porejemplo,dosvalores,cadaunoconsistenteennombrederegistro
seguidodecomaylaexpresinnumrica,serconsideradocomodelmismotipo,sin
importaqutipoderegistroylocomplicadoqueseutilizalaexpresinnumricacon
excepcindelascadenasentrecomillasypuntoflotantevalores,quesonlostiposespecialesde
Pgina80
80
CAPTULO2.delconjuntodeinstrucciones
expresionesnumricasysontratadoscomodiferentestipos.Aseax,16eqtypefs,3+7
condicinesverdadera,peroeax,16eqtypeeax,1.6esfalsa.
2.2.3bloquesderepeticindeinstrucciones
Directivavecesserepiteunainstruccinnmerodeterminadodeveces.Sedebeseguirse
porlaexpresinnumricaespecificandoelnmeroderepeticionesylainstruccinpararepetir
(Colonopcionalmentesepuedeutilizarparaelnmeroylainstruccinseparada).Cuandosmboloespecial
%Seutilizadentrodelainstruccin,esigualalnmeroderepeticinactual.Porejemplo
Tiempos5db%definircincobytesconvaloresde1,2,3,4,5.Elusorecurrentedeveces
Tambinsepermiteladirectiva,porloquelostiempos3veces%db%definirnseisbytesconlosvalores1,
1,2,1,2,3.
Directivarepeticinrepitetodoelbloquedeinstrucciones.Sedebeirseguidade
expresinnumricaespecificandoelnmeroderepeticiones.SeesperaInstruccionespararepetir
enprximaslneas,terminconladirectivadefinalderepeticin,porejemplo:
repetir8
bytemov[bx],%
incbx
finalderepeticin
Elcdigogeneradoalmacenarvaloresdebytesdeunoaochoenlamemoriadireccionada
porBXregistrarse.
Nmeroderepeticionespuedesercero,enesecasolasinstruccionesnoseensamblanen
todos.
Ladirectivadescansopermitedejarderepetiranteriorycontinuarelmontajede
laprimeralneadespusdelfinalderepeticin.Encombinacinconladirectivasisepermitedetener
repitiendobajoalgunacondicinespecial,como:
s=x/2
repetir100
six/s=s
rotura
endif
s=(s+x/s)/2
finalderepeticin
Ladirectivamientrasrepiteelbloquedeinstruccionesmientraslacondicinespecificada
porlaexpresinlgicasiguiendoescierto.Elbloquedeinstruccionesqueserepita
debeterminarconelextremomientrasDirectiva.Antesdecadarepeticindelaexpresinlgica
seevalaycuandosuvaloresfalse,elconjuntosecontinuempezandodesdeelprimer
lneadespusdeltiempofinal.Tambinenestecasoelsmbolo%contieneelnmerodelacorriente
repetir.Ladirectivadeinterrupcinsepuedeutilizarparadetenerestetipodebucleenlamismaformaque
conladirectivaderepeticin.Elejemploanteriorsepuedereescribirparautilizareltiempoenlugar
derepetirdeestamanera:
Pgina81
2.2.DIRECTIVASDECONTROL
81
s=x/2
mientrasquex/s<>s
s=(s+x/s)/2
si%=100
rotura
endif
extremomientras
Losbloquesdefinidosconsi,repetirymientrassepuedeanidarencualquierorden,sinembargo
quedebenestarcerradosenelmismoordenenqueseiniciaron.Ladirectivadescanso
Siempredejadeprocesarelbloquequeseinicielpasado,yaseaconlarepeticinomientras
Directiva.
2.2.4espaciosdedireccionamiento
conjuntosdirectivaORGdireccinenlaqueseesperaqueelsiguientecdigoparaaparecerenlamemoria.
Sedebeserseguidoporlaexpresinnumricaespecificandoladireccin.Estadirectiva
comienzaelnuevoespaciodedireccionamiento,elcdigosiguienteensnosemuevedeningunamanera,pero
todaslasetiquetasdefinidasdentrodeellayelvalordelsmbolo$sevenafectadoscomosisepuso
enladireccinindicada.Sinembargo,esresponsabilidaddelprogramadorparaponerelcdigoen
direccincorrectaeneltiempodeejecucin.
Ladirectivadecargapermitedefinirconstanteconunvalorbinariocargadodesdeel
yamontadocdigo.Estadirectivadebeserseguidoporelnombredelaconstante,
acontinuacin,eloperadortamaoopcionalmente,acontinuacin,apartirdeloperadoryunaexpresinnumricaqueespecifica
unadireccinvlidaenelespaciodedireccionesactual.Eloperadordetamaotieneunsignificadoinusualen
estecasosedicecuntosbytes(hasta8)tienenquesercargadoparaformarelbinario
valordelaconstante.Sinoseespecificaningnoperadordetamao,secargaunbyte(porlotantoelvaloresten
variarde0a255).Losdatoscargadosnopuedenexcederlacorrientedeoffset.
Ladirectivadelatiendapuedemodificarelcdigoyageneradomediantelasustitucindealgunosde
losdatosgeneradosanteriormenteconelvalordefinidoporlaexpresinnumricadada,
quesigue.Laexpresinpuedeserprecedidaporeloperadordetamaoopcionalparaespecificar
cmovalorgrandelaexpresindefine,yporlotantolacantidaddebytessealmacena,si
nohayningnoperadortamao,sesuponequeeltamaodeunbyte.Entonceseloperadoryen
laexpresinnumricoquedefineladireccinvlidaenlacorrientedeespaciodedireccionamientodecdigo,en
queelvalordadotienequeseralmacenadodespusdeellas.Estaesunadirectivaparaavanzados
electrodomsticosydebenusarseconcuidado.
Ambasdirectivasdecargayalmacenamientoselimitanaoperarenlugaresenlosactualesabordar
espacio.La$$smboloessiempreigualaladireccinbasedelespaciodedireccionamientoactual,
yelsmbolo$esladireccindelaposicinactualeneseespaciodedireccionamiento,porlotanto
estosdosvaloresdefinenloslmitesdelazona,dondelacargayalmacnpuedenoperar.
Lacombinacindelasdirectivasdecargayalmacenamientopermitehacercosascomocodificaralgunasde
elcdigoyagenerado.Porejemplo,paracodificartodoelcdigogeneradoenlacorriente
espaciodedireccionamientopuedeutilizarcomobloquededirectivas:
Pgina82
82
CAPTULO2.delconjuntodeinstrucciones
repetir$$$
cargarunbytede$$+%1
tiendaByteaxorcen$$+%1
finalderepeticin
ycadabytedecdigoseXORconelvalordefinidoporcconstante.
virtualesdefinendatosvirtualesenladireccinespecificada.Estosdatosnoseincluir
enelarchivodesalida,peroetiquetasdefinidasnopuedenserutilizadosenotraspartesdelafuente.Este
directivapuedeserseguidoporaloperadorylaexpresinnumricaqueespecificael
abordardedatosvirtuales,delocontrarioesdecirutilizaladireccinactual,lomismoquevirtualen$.
Instruccionesquedefinenlosdatosseesperaqueenlasprximaslneas,terminaronconfinesdirectivavirtual.
Elbloquedeinstruccionesvirtualesensesunespaciodedireccionamientoindependiente,despusdequesea
terminado,serestauraelcontextodeespaciodedireccionamientoanterior.
Ladirectivavirtualpuedeserutilizadoparacrearlaunindealgunasvariables,porejemplo:
GDTRdp?
virtualenGDTR
DwGDT_limit?
DdGDT_address?
terminarvirtuales
Definedosetiquetasparalaspartesdelavariablede48bitsenladireccinGDTR.
Tambinpuedeserusadoparadefiniretiquetasparaalgunasestructurasabordadosporunregistro,por
ejemplo:
virtualenbx
LDT_limitdw?
DdLDT_address?
terminarvirtuales
Contalmovaxinstruccindefinicin,[LDT_limit]serensambladoalamisma
instruccinmovax,[bx].
Ladeclaracindevaloresdedatosdefinidosoinstruccionesdentrodelbloquevirtualtambinsera
til,porquelaDirectivadecargasepuedeutilizarparacargarlosvaloresdelavirtualmente
generacdigoenunaconstantes.Estadirectivasedebeutilizardespusdelcdigoquesecarga
peroantesdequeelbloquevirtualtermina,porqueslopuedecargarlosvaloresdelamisma
espaciodedireccionamiento.Porejemplo:
virtualen0
xoreax,eax
yedx,eax
cargazeroqdwordde0
terminarvirtuales
Pgina83
2.2.DIRECTIVASDECONTROL
Lapiezadecdigoanteriordefinirlaconstantezeroqcontienecuatrobytesdela
cdigodelamquinadelasinstruccionesdefinidasdentrodelbloquevirtual.Estemtodopuedeser
Tambinseutilizaparacargarunvalorbinariodearchivoexterno.Porejemplo,estecdigo:
virtualen0
archivo'a.txt':10h,1
83
Charcargade0
terminarvirtuales
cargaelbytede10hdesplazamientoenarchivoa.txtenlaconstantedecarbn.
Cualquieradelasdirectricesquesedescribenenlaseccin2.4tambinseiniciaunnuevoespaciodedireccionamiento.
2.2.5Otrasdirectivas
alinearDirectivaalineacdigoodatoshastaellmiteespecificado.Sedebeseguirse
porunaexpresinnumricaqueespecificaelnmerodebytes,alamultiplicacindeloscualesel
direccinactualtienequeseralineado.Elvalorlmitetienequeserlapotenciadedos.
Ladirectivaalignllenalosbytesquetuvieronqueseromitidospararealizarlaalineacin
conlasinstruccionesNOPyalmismotiempomarcaestareacomodatosnoinicializados,porlo
sisecolocaentreotrosdatossininicializarquenotomaranelespacioenelarchivodesalida,
losbytesdealineacinactuarndelamismamanera.Siustednecesitaparallenarelreadealineacincon
algunosotrosvalores,sepuedecombinarconalignvirtualparaobtenereltamaodelaalineacin
esnecesarioyluegocrearlaalineacinatimismo,como:
virtual
alinear16
a=$$$
terminarvirtuales
dbundup0
Laconstantesedefinecomoladiferenciaentreladireccindespusdelaalineaciny
direccindelbloquevirtual(verseccinanterior),loqueesigualaltamaodelanecesaria
espaciodealineacin.
Directivapantallamuestraelmensajeeneltiempodemontaje.Sedebeseguirse
porlascadenasentrecomillasovaloresdebytes,separadosporcomas.Sepuedeutilizarparamostrar
valoresdealgunasconstantes,porejemplo:
losbits=16
display'desplazamientoactuales0x'
bitsderepeticin/4
d='0'+$shr(bits%*4)y0Fh
sid>'9'
d=d+'A''9'1
endif
Pgina84
84
CAPTULO2.delconjuntodeinstrucciones
pantallad
finalderepeticin
pantalla13,10
Estebloquededirectivascalculaloscuatrodgitoshexadecimalesdevalorde16bitsycon
lesVertsenpersonajesparamostrar.Tengaencuentaqueestonofuncionarsilasdireccionesen
espaciodedireccionamientoactualsonreubicable(comopodraocurrirconPEosalidaobjeto
formatos),yaqueslovaloresabsolutossepuedenutilizardeestamanera.Elvalorabsolutopuedeser
obtenidomedianteelclculodeladireccinrelativa,como$$$,orva$enelcasodeformatoPE.
Ladirectivaerrterminainmediatamenteelprocesodemontajecuandoseencuen
cadosporelensamblador.
Laspruebasdirectivosafirmansilaexpresinlgicaquesigueescierto,y
sino,sesealaelerror.
2.2.6pasesmltiples
Debidoaqueelensambladorpermitehacerreferenciaaalgunasdelasetiquetasoconstantesantesdequese
conseguirrealmentedefinido,tienequepredecirlosvaloresdetalesetiquetasysihayinclusouna
sospechaquelaprediccinfallenalmenosuncaso,lohaceunomspase,montaje
todalafuente,estavezhaciendomejorprediccinbasadaenlosvaloresdelasetiquetasrecibieron
enlapasadaanterior.
Losvalorescambiantesdeetiquetaspuedencausaralgunasinstruccionesparatenercodificacionesde
diferentelongitud,yestopuedecausarelcambioenlosvaloresdelasetiquetasdenuevo.Ypuestoquela
etiquetasyconstantestambinsepuedenusardentrodelasexpresionesqueafectanalcomportamiento
delasdirectivasdecontrol,todoelbloquedefuentepuedeserprocesadocompletamentediferente
duranteelnuevopase.As,elensambladorhacemsymspases,cadaveztratando
hacermejoresprediccionesparaacercarsealasolucinfinal,cuandotodoslosvaloresquedanpredijeron
correctamente.Seutilizadiversosmtodosparapredecirlosvalores,quehasidoelegidopara
permitirencontrarenalgunospaseslasolucindelongitudposiblementemspequeaparalamayoradela
programas.
Algunosdeloserrores,aligualquelosvaloresquenoencajaenloslmitesexigidos,nosesealizan
duranteesospasesintermedios,yaquepuedesucederquecuandoalgunosdelosvalores
sepredicemejor,estoserroresdesaparecern.Sinembargo,siensambladorrenealgunos
laconstruccinilegaldesintaxisoinstruccindesconocida,siempresedetieneinmediatamente.Tambin
definiralgunaetiquetamsdeunavezhacequedichoerror,porquehacequelaspredicciones
fundamento.
Slolosmensajescreadosconladirectivadelapantalladurantelaltimapasadarealizado
conseguirrealmenteaparece.Encasodequeelmontajesehadetenidodebidoaunerror,
estosmensajessiempresonrepresentativasdelosvalorespronosticadosqueannoseresuelvencorrectamente.
Lasolucinavecesnoexistayqueentalescasoselensambladornunca
arreglanparahacerprediccionescorrectasporestaraznhayunlmiteparaunnmerode
pasa,ycuandoensambladoralcanzaestelmite,sedetieneymuestraelmensajedeque
noescapazdegenerarlasalidacorrecta.Considereelsiguienteejemplo:
Pgina85
2.2.DIRECTIVASDECONTROL
85
sialfadefinido
alpha:
endif
Eloperadordefinidodaelverdaderovalorcuandolaexpresinsiguientepodraser
calculadaenestelugar,loqueenestecasosignificaquelaetiquetaalfasedefinealguien
dnde.Peroelbloqueanteriorhacequeestaetiquetadebedefinirseslocuandoelvalordado
poreloperadordefinidoesfalso,loqueconduceaunantynomyyhacequeseaimposiblevolvera
resolverdichocdigo.Alprocesarelcasoensambladordirectivatienequepredecirsiel
etiquetaalfaserdefinidoenalgunaparte(quenotendraquepredecircuandolaetiquetafue
yadefinidoanteriormenteenestepaso),yloquelaprediccines,locontrariosiempre
sucede.As,elmontajefallar,amenosquelaetiquetaalfasedefineenalgnlugar
fuenteanterioralbloqueporencimadelasinstruccionesentalcaso,comoyaseseal,
laprediccinnoesnecesarioyelbloquesloseomita.
Elejemploanteriorpodrahabersidoescritocomounaoportunidadparadefinirlaetiquetaslocuando
annosedefini.Seproduceunerror,porqueeloperadordefinidonocompruebasilaetiqueta
esdefinidoenningunaparte,yestoincluyeladefinicindentrodeestecondicionalmenteprocesado
bloque.Sinembargolaadicindealgunacondicinadicionalpuedehacerqueseaposiblelograrqueseresolvi:
sialfadefinido|fdefinido
alpha:
@@:
endif
Elfessiemprelamismaetiquetaquela@@smbolomscercanoenlafuentequelesigue,
porloquelamuestraanteriorsignificaralomismosicualquiernombreexclusivoseutilizenlugardela
etiquetaannima.Cuandoalfanoestdefinidaencualquierotrolugardeorigen,lanica
solucinposibleescuandoestebloquesedefine,yestavezestonoconduceala
antynomy,acausadelaetiquetaannimaquehacequeestebloquedeautoestablecimiento.
Paraentendermejoresto,miraalosbloquesquetienenadamsqueesteauto
elestablecimientode:
sifdefinido
@@:
endif
Esteesunejemplodefuentequepuedetenermsdeunasolucin,yaqueamboscasos
cuandoestebloqueseprocesaonosonigualmentecorrectos.Culdelosdos
solucionesqueobtenemosdependedelalgoritmoenelensamblador,encasodeensambladorplana
enelalgoritmodepredicciones.Volveralamuestraanterior,cuandoalfanoestdefinido
encualquierotrolugar,lacondicinparaquesielbloquenopuedeserfalsa,porloquenosquedamosconunasola
posiblesolucin,ypodemosesperarqueelensambladorllegarella.Porotraparte,
cuandoalfasedefineenotrolugar,tenemosdossolucionesposiblesdenuevo,pero
unodeellosprovocaalfaquesedefinirendosocasiones,ytalerrorprovocaensamblador
Pgina86
86
CAPTULO2.delconjuntodeinstrucciones
abortarelmontajedeinmediato,yaqueesteeseltipodeerrorqueperturbaprofundamentela
procesoderesolucin.Asquepodemosobtenertalfuentesearesueltocorrectamenteocausaruna
error,yloqueobtenemospuededependerdelaseleccionesinternasrealizadasporelensamblador.
Sinembargo,hayalgunosdatossobreestetipodedecisionesquesonciertas.Cuandoensamblador
tienequecomprobarsisehadefinidoelsmbolodadoyqueyasedefinienel
pasodelacorriente,nosenecesitalaprediccinqueyasesealanteriormente.Ycuandolodado
smbolosehadefinidonuncaantes,incluyendotodoslospasesyaterminados,la
ensambladorpredicequeseanodefinido.Sabiendoesto,podemosesperarquelasimpleauto
bloquedeestablecerlosindicadosarribanoserensambladoenabsolutoyquelamuestraanterior
resolvercorrectamentecuandoalfasedefineantesenalgunapartedenuestrobloquecondicional,
mientrasqueserensdefiniralfacuandonoestyadefinidoantes,portanto,potencialmente
quecausaelerrorporladobledefinicinsielalfatambinsedefineenalgunaparte
mstarde.
Eloperadorqueseutilizasepuedeesperarquesecomportedeunamanerasimilarenanloga
casos,sinembargocualquierotrotipodeprediccionesminosertansimpleyquenuncadebe
confiarenellosdeestamanera.
Ladirectivaseequivocan,porlogeneralutilizaparadetenerlaasambleacuandosecumplaalgunacondicin,
sedetieneelconjuntodeinmediato,independientementedesilapasadaactualesfinaloin
intermedio.Asqueinclusocuandolacondicinquecausestadirectivaparaserinterpretadaes
mispredictedytemporal,yeventualmentedesaparecerenlaspasadasposteriores,la
Asambleasedetienedetodosmodos.
Ladirectivaafirmansealaelerrorslosisuexpresinesfalsa,despusdetodoel
smboloshansidoresueltos.Puedeutilizarafirman0enlugardeerrcuandonolohacen
quierotenerelmontajesedetuvodurantelospasesintermedios.
2.3directivasdelpreprocesador
Todaslasdirectivasdepreprocesadorseprocesanantesqueelprocesodemontajeprincipal,yporlotanto
nosevenafectadosporlasdirectivasdecontrol.Enestetiempotambintodosloscomentariossondespojados
acabo.
2.3.1archivosdeorigenIncluidos
directivadeinclusinincluyeelarchivodeorigenespecificadoenlaposicinenqueseutiliza.Ella
debeserseguidoporelnombredecotizacindearchivoquesedebeincluir,porejemplo:
incluir'macros.inc'
Elarchivoincluidotodoespreprocesadoantesdeprocesamientopreviodelaslneassiguientesalalnea
quecontieneladirectivainclude.Nohaylmitesparaelnmerodearchivosincluidoscomo
siempreycuandoencajenenlamemoria.
Elcaminocitadopuedecontenervariablesdeentornoencerradosdentrode%caracteres,
sernreemplazadosconsusvaloresdentrodelatrayectoria,tantoel\y/personajesson
Pgina87
2.3.Directivasdelpreprocesador
87
permitidacomouncaminoseparadores.Elarchivoestprimerobuscaeneldirectorioquecontiene
archivoqueincluaycuandonoseencuentraall,labsquedasecontinaenel
directoriosespecificadosenlavariabledeentornollamadaINCLUYEN(losmltiplescaminos
separadosconpuntoycomapuededefinirseall,sebuscarnenelmismoorden
comoseespecifica).Sielarchivonoseencuentraenningunodeestoslugares,preprocesadorlobuscaenel
directorioquecontieneelarchivofuenteprincipal(elqueseespecificaenlalneadecomandos).Estos
reglaspreocupacintambinrutasproporcionadasconladirectivadelarchivo.
2.3.2Lasconstantessimblicas
Lasconstantessimblicassondiferentesdelasconstantesnumricas,antesdelaAsamblea
procesobleaquesereemplacenporsusvaloresentodaspartesenlaslneasdecdigodespusdesu
definiciones,ycualquiercosapuedeconvertirseensusvalores.
Ladefinicindeconstantesimblicaconsisteenelnombredelaconstanteseguidoporla
Directivaequ.Todoloquesigueestadirectivaseconvertirenelvalordelaconstante.
Sielvalordelaconstantesimblicacontieneotrasconstantessimblicas,sonreemplazadas
consusvaloresantesdeasignarestevaloralanuevaconstante.Porejemplo:
dequdword
NULLequd0
dequedx
DespusdeestastresdefinicionesdelvalordelaconstanteNULLesDWORD0yelvalordedes
edx.As,porejemplo,empujarNULLsermontadocomoempujedword0yempujedser
ensamblarsecomoempujeedx.Ysientonceslasiguientelneasepuso:
dequd,eax
laconstantedobtendraelnuevovalordeedx,eax.Deestamaneralascrecienteslistasde
smbolospuedenserdefinidos.
restaurarlaDirectivapermiteobtenerelvalordevueltapreviadeconstantesimblicaredefinida.
Debeserseguidoporunomsnombresdeconstantessimblicas,separadosporcomas.
Asrestaurarddespusdelasdefinicionesanterioresdardconstanteireledxvalor,
segundoserrestaurarloavalorDWORD,yunomsvolveradsignificadooriginal
comosinosedefinicomoconstante.Sinohuboconstantedefinidadenombredado,
restauracinnoseproducirunerror,serignorado.
Constantesimblicasepuedeutilizarparaajustarlasintaxisdeensambladorparapreferenciaspersonales
cias.Porejemplo,elsiguienteconjuntodedefinicionesproporcionalosatajostilesparatodos
losoperadoresdetamao:
bbyteequ
palabraequw
dequdword
pequpword
Pgina88
88
CAPTULO2.delconjuntodeinstrucciones
fequfword
qequQWORD
tequtword
xequdqword
yequqqword
Debidoconstantesimblicapuedetenertambinunvalorvaco,puedeserutilizadoparapermitir
lasintaxisconoffsetdepalabraantesdequecualquiervalordedireccin:
equdesplazamiento
Despusdeestadefinicinmovax,chardesplazamientoserlaconstruccinvlidaparacopiarla
desplazamientodevariabledetipocharenelregistrohacha,porquecompensarsesustituyeconunvalorvaco,
yporlotantoseignoran.
Ladirectivadefinirseguidoporelnombredelaconstanteyluegoelvalor,esel
formaalternativadedefinirunaconstantesimblica.Lanicadiferenciaentredefiniry
equesquedefinirasignaelvalorquesea,quenoreemplazaalasconstantessimblicas
consusvaloresdentrodel.
Lasconstantessimblicastambinsepuedendefinirconladirectivaderevisin,quetieneelmismo
sintaxisqueequ,perodefineconstantesdealtaprioridadquesereemplacenporsubolo
valoresbolicinclusoantesdeprocesarlasdirectivasdepreprocesadorymacroinstrucciones,
lanicaexcepcinesladirectivasolucinens,quetienelaprioridadmsaltaposible,porloque
permiteredefinicindeconstantesdefinidasdeestamanera.
Ladirectivafijapuedeserutilizadoparalosajustesdesintaxisrelacionadosconlasdirectivasdepre
procesador,loquenosepuedehacerconladirectivadelaecuacin.Porejemplo:
inclsolucinincluye
defineunnombrecortoparaincluirDirectiva,mientrasqueladefinicinsimilarhaceconequ
Directivanodaracomoresultado,comoconstantessimblicasestndarsesustituyenpor
susvaloresdespusdebuscarlalneadelasdirectivasdepreprocesador.
2.3.3macroinstrucciones
macrodirectivalepermitedefinirsuspropiasinstruccionescomplejas,llamadomacroinstruc
ciones,medianteelcualsepuedesimplificarengranmedidaelprocesodeprogramacin.Ensuformamssimple
queessimilaraladefinicinconstantesimblica.PorejemplolossiguientesdefineDefinicin
unatajoparalacoldeprueba,instrucciones0xFF:
macrotst{pruebaal,0xFF}
Despusdeladirectivamacrohayunnombredemacroinstructionyluegosucontenidopenetre
cerradoentreloscaracteres{y}.Puedeutilizartstinstruccinencualquierlugardespusdeesta
definicinysermontadacomoalensayo,0xFF.Definicintstconstantesimblicade
Pgina89
2.3.Directivasdelpreprocesador
89
queelvalordaraelresultadosimilar,peroladiferenciaesqueelnombredemacroin
construccinslosereconocecomounmnemnicodeinstruccin.Adems,sonmacroinstrucciones
sustituidoporuncdigocorrespondiente,inclusoantesdelasconstantessimblicassonreemplazadospor
susvalores.Asquesiusteddefinemacroinstructionyconstantesimblicadelmismonombre,
yutilizaestenombrecomounmnemnicodeinstruccin,serreemplazadoporelcontenidode
macroinstruction,peroserreemplazadoconvalorsiconstantesimblicasiseusaalguien
dondedentrodelosoperandos.
Ladefinicindemacroinstructionpuedeconstardevariaslneas,porque{y}carac
personajesnotienenqueestarenlamismalneaquelamacroDirectiva.Porejemplo:
macrostos0
{
xoral,al
STOSB
}
Elstos0macroinstructionserreemplazadoconestosdosinstruccionesdemontajeAny
dondeseutiliza.
Aligualquelasinstruccionesquenecesitaunpocodenmerodeoperandos,lamacroinstructionpuede
definiranecesitarunpoconmerodeargumentosseparadosporcomas.Losnombres
deargumentacinnecesariadebeseguirelnombredemacroinstructionenlalneademacro
Directivaydebernserseparadosporcomassihaymsdeuno.Dondequiera
unodeestosnombresseproduceenelcontenidodemacroinstruction,serreemplazadocon
valorcorrespondiente,siempreycuandoseutilizalamacroinstruccin.Heaquunejemplo
deunmacroinstructionquevaahacerlaalineacindedatosparaelformatodesalidabinaria:
valordelamacroalign{rb(valor1)($+valor1)Valormod}
Cuandolainstruccinalign4seencuentradespussedefineestamacroinstruccin,ser
reemplazadoconcontenidodeestamacroinstruccin,yelvalorsehabaconvertidoen4,porlo
elresultadoserRB(41)($+4.1)mod4.
Siunmacroinstructionsedefinequeutilizaunainstruccinconelmismonombrein
ladosudefinicin,seutilizaelsignificadoanteriordeestenombre.Redefinicintilde
macroinstruccionessepuedenhacerdeesamanera,porejemplo:
macromovop1,op2
{ siop1en<ds,es,fs,gs,ss>&op2en<cs,ds,es,fs,gs,ss>
empujeop2
msicapop
op1
ms
mov
op1,op2
endif
}
Pgina90
90
CAPTULO2.delconjuntodeinstrucciones
Estemacroinstructionextiendelasintaxisdelainstruccinmov,permitiendoaambosoperandos
serregistrosdesegmento.Porejemplomovds,essernensambladoscomoesempujeydspop.
Entodoslosdemscasosseutilizarlainstruccinmovestndar.Lasintaxisdeestemovpuede
extendersemsall,definiendojuntomacroinstructiondeesenombre,queutilizarel
macroinstructionanterior:
macromovOP1,OP2,OP3
{
sieqop3
mov
op1,op2
ms
mov
op1,op2
mov
op2,op3
endif
}
Permitequelainstruccinmovtenertresoperandos,perotodavapuedetenerdosoperandos
solamente,porquecuandomacroinstructionsedamenosargumentosdeloquenecesita,elrestode
argumentostendrnvaloresvacos.Cuandotresoperandossedan,estemacroinstruction
seconvertirendosmacroinstruccionesdeladefinicinanterior,porlomoves,ds,dxsern
montadocomodsempuje,espopymovds,dx.
Alcolocarel*despusdelnombredelargumentopuedemarcarelargumentosegnseanecesario
Preprocesadornopermitirquetengaunvalorvaco.Porejemplo,elmacroinanteriormente
construccinpodraserdeclaradacomomacromovop1*,*op2,op3paraasegurarsedequedosprimero
argumentossiempretendrnquedaralgunosvaloresnovacos.
Alternativamente,sepuedeproporcionarelvalorpordefectoparaelargumento,mediantelacolocacindelos=
seguidodevalordespusdelnombredelargumento.Entonces,sielargumentotieneunvalorvaco
proporcionado,elvalorpordefectoserutilizadoensulugar.
Cuandoseanecesarioparaproporcionarmacroinstructionconelargumentodequecontienealgunos
comas,talargumentodebeencerrarseentrecaracteres<y>.Sicontiene
msdeuncarcter<,elmismonmerode>sedebeusarparadecirlequeelvalor
delargumentotermina.
Directivadepurgapermitelaeliminacindelaltimadefinicindemacroinstructionespecificado.Ella
debeserseguidoporunoomsnombresdemacroinstrucciones,separadosporcomas.
Sitalesmacroinstructionnosehadefinido,ustednoconseguirningnerror.Porejem
pledespusdetenerlasintaxisdemovampliadoconlasmacroinstruccionesdefinidasanteriormente,
puededesactivarlasintaxiscontresoperandosespaldautilizandodirectivamovpurga.Siguiente
movpurgadesactivartambinlasintaxisdedosoperandosserregistrosdesegmento,ytodoel
prximostalesdirectivasnoharnnada.
Sidespusdeladirectivamacroseencierraalgngrupodenombresdeargumentos'enlaplaza
soportes,permitirdarmsvaloresparaestegrupodeargumentoscuandoseutilizaque
macroinstruction.Cualquiermsargumentodadodespusdequeelltimoargumentodedichogrupolohar
comenzarelnuevogrupoyseconvertirenelprimerargumentodelamisma.Esporesoquedespusdecerrar
Pgina91
2.3.Directivasdelpreprocesador
91
loscorchetesnomsnombresdeargumentospuedeseguir.Elcontenidodemacroin
construccinserprocesadorespectodecadagrupodeargumentosporseparado.Elmssimple
ejemploesencerrarunargumentodenombreentrecorchetes:
stoscharmacro[Char]
{
moval,char
STOSB
}
Estemacroinstructionaceptaunnmeroilimitadodeargumentos,ycadaunoser
procesadoenestosdosinstruccionesporseparado.Porejemplostoschar1,2,3ser
montadocomolassiguientesinstrucciones:
moval,1
STOSB
moval,2
STOSB
moval,3
STOSB
Hayalgunasdirectivasespecialesdisponiblesslodentrodelasdefinicionesdemacroin
trucciones.Directivalocaldefinenombreslocales,quesernsustituidospornica
valorescadavezqueseutilizalamacroinstruccin.Debeserseguidoporlosnombresdeseparacin
nominalconcomas.Sielnombrequerecibecomoparmetroaladirectivalocal,comienzaconuna
puntoodospuntos,lasetiquetasnicasgeneradasporcadaevaluacindemacroinstructionvoluntad
tienenlasmismaspropiedades.Estadirectivaesgeneralmentenecesariaparalasconstantesoetiquetas
macroinstruccinquedefineyutilizainternamente.Porejemplo:
macromovstr
{
demovimientolocal
mover:
lodsb
STOSB
probaral,al
jnzmovimiento
}
Cadavezqueseutilizaestemacroinstruction,movimientoserotronombrenicoensu
instrucciones,porloquenoobtendrunerrorquenormalmenteseobtienecuandosedefinealgunaetiqueta
msdeunavez.
adelante,atrsydirectivascomunesdividenmacroinstructionenbloques,cadauno
unoprocesados
despusdequesetermineelprocesamientodelosanteriores.Sediferencianenelcomportamientoslo
Pgina92
92
CAPTULO2.delconjuntodeinstrucciones
simacroinstructionpermitequevariosgruposdeargumentos.Bloquedeinstruccionesque
sigueadelanteDirectivaseprocesaparacadagrupodeargumentos,desdeelprimeroalltimo
Exactamenteigualqueelbloquepordefecto(noprecedidaporningunadeestasdirectivas).Bloqueque
sigueDirectivainversaseprocesaparacadagrupodediscusinenelordeninversodesde
ltimoalprimero.BloquearquesigueDirectivacomnseprocesaslounavez,comnmentepara
todoslosgruposdeargumentos.Nombrelocalsedefineenunodelosbloquesestdisponibleentodoel
siguientesbloquesalprocesarelmismogrupodeargumentoscomocuandofuedefinido,
ycuandosedefineenelbloquecomnqueestdisponibleentodoslossiguientesbloquesno
dependiendodelgrupodeargumentosseprocesa.
Heaquunejemplodemacroinstructionquecrearlatabladedireccionespara
cuerdasseguidasporestascadenas:
nombrestrtblmacro,[cadena]
{
comn
nombredelaetiquetadword
adelante
sellolocal
etiquetadd
adelante
cadenadbetiqueta,0
}
Primerargumentodadoaestemacroinstructionseconvertirenlaetiquetaparalatabladeadministracin
vestidos,prximosargumentosdebenserlascuerdas.Primerbloqueseprocesaslounavezy
definelaetiqueta,segundobloqueparacadacadenadeclarasunombrelocalydefinela
entradadelatablaquesostieneladireccindeesacadena.Tercerbloquedefinelosdatosdecada
cadenaconlaetiquetacorrespondiente.
Ladirectivadeiniciarelbloqueenmacroinstructionpuedeserseguidoporlaprimera
instruccindeestebloqueenlamismalnea,comoenelsiguienteejemplo:
macrostdcallproc,[arg]
{
argempujeinverso
procllamadocomn
}
EstemacroinstructionsepuedeutilizarparallamaralosprocedimientosqueutilizanSTDCALLconvencional
cin,quetienetodoslosargumentosempujenlapilaenelordeninverso.Porejemplo
foostdcall,1,2,3sermontadocomo:
empujar3
empujar2
empujar1
foollamada
Pgina93
2.3.Directivasdelpreprocesador
93
Sialgnnombredentromacroinstructiontienevariosvalores(queesunodelosterminales
argumentosencerradosentrecorchetesonombrelocaldefinidosenelbloquesiguiente
avanceoretrocesoDirectiva)yseutilizaenelbloquesiguienteladirectivacomn,
serreemplazadocontodossusvalores,separadosporcomas.Porejemplo,la
siguientemacroinstructionpasartodoslosargumentosadicionalesalaanteriormente
macroinstructionstdcalldefinido:
macroinvokeproc,[arg]
{Stdcallcomn[proc],argumento}
Sepuedeutilizarparallamarindirectamente(porelpunteroalmacenadoenlamemoria)elprocedimientoutilizando
ConvencinSTDCALL.
Macroinstructioninteriortambinoperadorespecial#puedenserutilizados.Esteoperadorcausas
dosnombresqueseconcatenanenunsolonombre.Puedesertil,porquesehace
despusdelosargumentosylosnombreslocalessesustituyenporsusvalores.Lasiguiente
macroinstructiongenerarelsaltocondicionaldeacuerdoconelargumentocond:
macrojifop1,cond,op2,etiqueta
{
cmpop1,op2
jetiqueta#cond
}
Porejemplohachajif,ae,10h,salidasermontadocomocmpax,10hysalidajaein
trucciones.
Eloperador#tambinsepuedeutilizarparaconcatenardoscadenasentrecomillasenunasola.Tambin
conversindelnombreenunacadenaentrecomillasesposible,conlaoperador,queigualmente
sepuedeutilizardentrodelamacroinstruction.Seconvierteelnombrequelesigueenuna
cadenaentrecomillasperotengaencuenta,quecuandoesseguidaporunargumentomacroqueseest
reemplazadoconelvalorquecontienemsdeunsmbolo,sloelprimerodeellosser
convertido,comoel"operadorconvierteslounsmboloquesigueinmediatamente.
Heaquunejemplodelautilizacindeesasdoscaractersticas:
nombredelaetiquetamacro
{
nombredelaetiqueta
sielnombreutilizado
display'nombre#"estdefinido,peronoseutiliza.",13,10
endif
}
Cuandoetiquetadefinidacontantamacronoseutilizaenlafuente,macroleadvertircon
elmensaje,informandoaquetiquetaseaplica.
Parahacermacroinstructioncomportarsedemaneradiferentecuandoalgunosdelosargumentosson
dealgntipoespecial,porejemplounascadenasentrecomillas,puedeutilizareqtypecomparacin
Pgina94
94
CAPTULO2.delconjuntodeinstrucciones
operador.Heaquunejemplodeutilizarlaparadistinguirunacadenaentrecomilladadeotro
argumento.
mensajeargmacro
{
sieqtypearg""
strlocales
jmp
f
str
argdb,0Dh,0Ah,24h
@@:
mov
dx,str
ms
mov
dx,arg
endif
mov
ah,9
int
21h
}
LamacroanteriorestdiseadoparalavisualizacindelosmensajesenlosprogramasdeDOS.Cuandoel
argumentodeestamacroesalgnnmero,etiqueta,ovariable,lacadenadeesadireccin
semuestra,perocuandoelargumentoesunacadenaentrecomillas,elcdigocreadomostrar
esacadenaseguidoporelretornodecarroyavancedelnea.
Tambinesposibleponerunadeclaracindemacroinstructiondentrodeotromacroin
construccin,porloqueunamacrosepuededefinirotro,perohayunproblemacontalesdefiniciones
causadoporelhechodeque}personajenopuedeocurrirdentrodelamacroinstruccin,yaque
siempresignificaelfindeladefinicin.Parasuperaresteproblema,elescapedelossmbolos
macroinstructioninteriorpuedeserutilizado.Estoserealizamediantelacolocacindeunaomsbarrasinvertidasen
frenteacualquierotrosmbolo(inclusoelcarcterespecial).Preprocessorvetalsecuencia
comounsolosmbolo,perocadavezquecumpleconesesmboloduranteelpromacroinstruction
procesamiento,secortalabarrainvertidadesdeelfrentedelamisma.Porejemplo\}setratacomo
solosmbolo,peroduranteelprocesamientodelamacroinstruccinseconvierteenelsmbolo}.
Estopermiteponerunadefinicindemacroinstructiondentrodeotro:
macroextinstr
{
macroinstrOP1,OP2,OP3
\{
sieqop3
op1instr,op2
ms
op1instr,op2
op2instr,op3
endif
Pgina95
2.3.Directivasdelpreprocesador
\}
95
}
extaadir
subext
Elextmacrosedefinecorrectamente,perocuandoseutiliza,el\{y\}convertirseenel{
y}smbolos.Asquecuandoseprocesaelcomplementoext,elcontenidodemacrosevuelvevlida
definicindeunamacroinstruccinydeestamaneraseconvierteenelmacroadddefinido.Enel
mismasubmaneraextdefineelsubmacro.Elusode\{smbolonoerarealmentenecesario
aqu,peroquesehacedeestamaneraparaqueladefinicinmsclara.
Sisenecesitanalgunasdirectivasespecficasparamacroinstrucciones,comolocalocomunes
dentrodealgunosmacroincluidaestamanera,sepuedeescapardelamismamanera.Escapar
elsmboloconmsdeunabarrainvertidatambinestpermitido,loquepermitemltiplesniveles
deanidacindelasdefinicionesmacroinstruction.
Laotratcnicaparadefinirunamacroinstruccinporotro,esutilizarlasolucin
Directiva,quellegaasertilcuandoalgunosmacroinstructionslocomienzaladefinicin
deotro,sincerrarla.Porejemplo:
macrotmacro[params]
{
paramsmacrocomunes{
}
TmacrofixMACRO
FixENDM}
defineunasintaxisalternativaparamacroinstruccionesquedefinen,queseparece:
CharstoscharMACRO
moval,char
STOSB
ENDM
Tengaencuentaqueelsmboloquehadichadefinicinpersonalizadadebeserdefinidoconladirectivaderevisin,
porqueslolasconstantessimblicaspriorizadosseprocesanantesqueelpreprocesador
buscaelpersonaje},mientrasqueladefinicindelamacro.Estopodraserunproblemasiuno
necesariapararealizaralgunastareasadicionalesunoalfinaldedichadefinicin,perohay
Unacaractersticamsqueayudaenestoscasos.Esdecirqueesposibleponercualquierdirectiva,
instruccinomacroinstructionjustodespusdelcarcter}queterminalamacroinstruction
yseprocesadelamismamaneracomosisepusoenlasiguientelnea.
Pgina96
96
CAPTULO2.delconjuntodeinstrucciones
2.3.4Estructuras
Directivaestrucesunavarianteespecialdemacrodirectivaqueseutilizaparadefinirestructuradedatos
turas.Macroinstructiondefineusandoladirectivaestrucdebeirprecedidadeunaetiqueta
(Comoladirectivadedefinicindedatos)cuandoseutiliza.Estaetiquetaseatribuyetambina
alprincipiodecadanombrequeempiezaconelpuntoenelcontenidodemacroinstruccin.La
macroinstructiondefineusandoladirectivaestrucpuedetenerelmismonombrequealgunos
otramacroinstructiondefineusandoladirectivamacro,estructuramacroinstruction
noimpedirqueelmacroinstructionnormaseaprocesadacuandonohay
etiquetaantesdelyviceversa.Todaslasreglasycaractersticasrelativasmacroinestndar
construccionesseaplicanaestructurarmacroinstrucciones.
Aquestlamuestradeestructuramacroinstruction:
estrucpuntox,y
{
.xdwx
.ydwy
}
Porejemplomipunto7,11definirestructuraetiquetadami,queconstadedosvariables:
my.xconvalorde7ymy.yconvalor11.
Sienalgnlugardentrodeladefinicindelaestructuradelnombrequeconstadeunsolopuntoque
seencuentra,sesustituyeporelnombredelaetiquetaparaelejemplodadodelaestructurayeste
etiquetanosedefinirautomticamenteentalcaso,loquepermitepersonalizarcompletamente
ladefinicin.Elsiguienteejemploutilizaestafuncinparaampliarladefinicindedatos
directivadbconlacapacidadparacalculareltamaodelosdatosdefinidos:
dbestruc[Datos]
{
comn
.datosdb
.size=$.
}
Contaldbdefinicinmsg'Hola!',13,10definirtambinmsg.sizeconstante,igual
coneltamaodelosdatosdefinidosenbytes.
Estructurasdedatosquedefinenabordadosporregistrosovaloresabsolutossedebehacer
usandoladirectivavirtualconestructuramacroinstruction(vase2.2.5).
Directivatructuracineliminalaltimadefinicindelaestructura,aligualquelohacelapurga
conmacroinstruccionesyrestaurarconconstantessimblicas.Tambintieneelmismosn
impuestodebeserseguidoporunoomsnombresdeestructuramacroinstrucciones,separado
porcomas.
Pgina97
2.3.Directivasdelpreprocesador
97
2.3.5macroinstruccionesrepetitivos
Ladirectivareptesuntipoespecialdemacroinstruction,loquehacedeterminadacantidadde
duplicadosdelamanzanacerradaconllaves.LasintaxisbsicaesseguidaDirectivarept
pornmeroyluegoelbloquedefuenteencerradaentreloscaracteres{y}.La
ejemplomssimple:
rept5{enotros,dx}
harcincoduplicadosdeladeAl,lneadx.Elbloquedeinstruccionessedefineenel
mismamaneraqueparalamacroinstruccinestndarycualquieroperadoresydirectivasespeciales
quepuedeserutilizadosloenelinteriormacroinstruccionestambinestnpermitidosaqu.Cuandoeldado
countescero,elbloqueessimplementesalt,comosidefinimacroinstructionperonunca
usado.Elnmeroderepeticionespuedeserseguidoporelnombredesmbolomostrador,
queobtendrreemplazadosimblicamenteconelnmerodeduplicadosactualmentegenerada.
Asqueeste:
rept3counter
{
byte#dbcontadorcontador
}
generarlneas:
byte1db1
Byte2db2
byte3db3
Elmecanismoderepeticinaplicadaabloquesrepteslamismaquelautilizadaparaprocesar
variosgruposdeargumentosparamacroinstrucciones,ascomolasdirectivasdeavance,comn
yinversasepuedeutilizarensusignificadohabitual.Ascomomacroinstruction:
rept7num{revertirpantalla'num}
mostrarlosdgitos71comotexto.Ladirectivalocaldecomportadelamismamaneraque
macroinstructioninteriorconmltiplesgruposdeargumentos,porloque:
rept21
{
sellolocal
etiqueta:etiquetabucle
}
generaretiquetanicaparacadaduplicado.
Elsmbolodelcontadorporelrecuentodedefectode1,perosepuededeclararbasediferente
valor,colocandoelnmeroprecedidopordospuntosinmediatamentedespusdelnombredelcontador.
Porejemplo:
Pgina98
98
CAPTULO2.delconjuntodeinstrucciones
rept8n:0{pxorXMM#n,XMM#n}
generarcdigoqueborrarelcontenidodeochoregistrosdeSSE.Puededefinir
varioscontadoresseparadosporcomas,ycadaunopuedetenerdiferentesbase.
Elnmeroderepeticionesylosvaloresdebaseparaloscontadoressepuedeespecificarutilizando
lasexpresionesnumricasconoperadorreglasidnticascomoenelcasodeensamblador.
Sinembargo,cadavalorutilizadoendichaexpresindebeserunnmeroespecificadodirectamente,
ounaconstantesimblicaconvalortambinserunaexpresinquesepuedecalcularpor
preprocesador(entalcasoelvalordelaexpresinasociadaconconstantesimblicaes
calculadoprimero,yluegosustituidoenlaexpresinexternaenlugardelaconstante).
Sinecesitarepeticionesbasadaenvaloresqueslosepuedencalcularentiempodemontaje,
utilizarunadelasdirectivasdecdigorepitiendoquesonprocesados
porelensamblador,vaselaseccin
2.2.3.
LadirectivaIRPiteraelnicoargumentoatravsdelalistadadadeparmetros.
LasintaxisseIRPseguidoporelnombredeargumento,luegodelacomayluegolalista
delosparmetros.Losparmetrosseespecificanenlamismaformacomoenlainvocacinde
macroinstructionestndar,porloquetienenqueserseparadosporcomasycadaunopuede
sercerradoconloscaracteres<y>.Tambinelnombredeargumentopuedeserseguido
por*paramarcarquenosepuedeobtenerunvalorvaco.Talbloque:
valorIRP,2,3,5
{Valordb}
generarlneas:
db2
db3
db5
LositeradirectivaIRPatravsdelalistadadadesmbolos,quedebenserseguidosporel
Nombredelargumento,entonceslacomayluegolasecuenciadelossmbolos.Cadasmbolo
enestasecuencia,noimportasieselnombredesmbolo,carcterdesmboloocotizar
cadena,seconvierteenunvalordeargumentoparaunaiteracin.Sinohaysmbolossiguientes
lacoma,siniteracinsehaceenabsoluto.Enesteejemplo:
IRPreg,albxecx
{Xorreg,reg}
generarlneas:
xoral,al
bxxor,bx
ecxxor,ecx
LosbloquesdefinidosporlasdirectivasdelIRPyIRPtambinseprocesandelamismamanera
comocualquiermacroinstrucciones,porloquelosoperadoresydirectivasespecficasparamacroinstruccionesmayo
serlibrementeutilizadostambinenestecaso.
Pgina99
2.3.Directivasdelpreprocesador
99
2.3.6preprocesamientocondicional
Directivapartidohacequealgunosbloquesdelafuentequesepreprocesaysepasaalensamblador
slocuandolasecuenciadadadesmboloscoincideconelpatrnespecificado.Elpatrn
esloprimero,terminconunacoma,entonceslossmbolosquetienenqueserigualadaconla
patrn,y,finalmente,elbloquedelafuente,encerradaentrellavescomomacroinstruccin.
Haylaspocasreglasparalaconstruccindelaexpresinparalacoincidencia,enprimerlugaresquecualquier
decaracteresdesmbolosycualquiercadenaentrecomillasdebecorresponderexactamentecomoes.Eneste
ejemplo:
partido+,+{include'first.inc'}
partido+,{include'second.inc'}
elprimerarchivoconseguirincluido,desde+despusdecomaajustaconel+enelpatrn,yla
segundoarchivonoserincluida,yaquenohayningunacoincidencia.
Paraquecoincidaconcualquierotrosmbolo,literalmente,tienequeestarprecedidapor=carcterenel
patrn.Tambinparaquecoincidaconelcarcter=s,olacoma,el==y=,construcciones
tienenqueserutilizados.Porejemplo,los=unpatrn==coincidirconela=secuencia.
Sialgnsmbolonombresecolocaenelpatrn,quecoincideconcualquiersecuenciaqueconsiste
dealmenosunsmboloyluegoestenombresesustituyeconlasecuenciacoincidenteEV
erywheredentrodelsiguientebloque,deformaanlogaalosparmetrosdemacroinstruccin.
Porejemplo:
MatchAB,07
{Dwa,ba}
generareldw0,70instruccin.Cadanombresiempresecorrespondecontanslo
smboloscomoseaposible,dejandoelrestoparalossiguientes,porloqueenestecaso:
MatchAB,1+2+3{dba}
elnombrecoincidirconelsmbolo1,dejandolasecuencia+2+3paraseremparejadoconb.
Peroenestecaso:
MatchAB,1{dba}
nohabrnadaparabalaaltura,porloqueelbloquenoconseguirprocesadoenabsoluto.
Elbloquedelafuentedefinidaporpartidoseprocesadelamismamaneracomocualquiermacroin
cons,porloquecualquieroperadoresespecficosparamacroinstruccionessepuedenutilizartambinenestecaso.
Quhace"partido"directivamstileselhecho,quesustituyealasimblica
constantesconsusvaloresenlasecuenciaajustadadesmbolos(esdecirtodaspartesdespus
lacomahastaelcomienzodelbloquedefuente)antesderealizarelpartido.Gracias
Aestosepuedeutilizarporejemploparaprocesaralgunosbloquesdelafuentebajolacondicin
quealgunaconstantesimblicatieneelvalor,comoseindica:
partido=TRUE,DEBUG{include'debug.inc'}
queincluirelarchivoslocuandoelDEBUGconstantesimblicasedefineconvalor
TRUE.
Pgina100
100
CAPTULO2.delconjuntodeinstrucciones
2.3.7Ordendeprocesamiento
Cuandosecombinanvariascaractersticasdelpreprocesador,esimportantesaberelorden
enelqueseprocesan.Comoyaseseal,laprioridadmsaltatienelasolucin
Directivaylosreemplazosdefinidosconl.Estosehacecompletamenteantesdehacer
cualquierotroprocesamientoprevio,porlotanto,estapiezadelafuente:
Vfix{
macrovaca
V
Vfix}
V
seconvierteenunadefinicinvlidadeunmacroinstructionvaca.Sepuedeinterpretarqueel
fijardirectivaypriorizadoconstantessimblicassonprocesados
enunaetapaseparada,y
todoslosdemspreprocesamientoserealizadespusdelafuenteresultante.
Elpreprocesamientoestndarquevienedespus,encadalneacomienzaconelreconocimientode
elprimersmbolo.Seiniciaconlacomprobacindelasdirectivasdelpreprocesador,ycuandoninguno
deellossedetecta,chequespreprocesadorsielprimersmboloesmacroinstruction.
Sinoseencuentraunamacroinstruccin,semuevealasegundasmbolodelnea,ycomienzadenuevo
conlacomprobacindedirectivas,queenestecasoessloladirectivaequ,yaqueesla
nicaqueseproducecuandoelsegundosmboloenlnea.Sinohayunadirectiva,elsegundo
smboloestmarcadaparaelcasodelaestructuramacroinstructionycuandoningunodelos
chequesdaresultadopositivo,lasconstantessimblicassonreemplazadosporsusvalores
ydichalneasepasaalensamblador.
Paraverenelejemplo,supongamosqueestdefinidalamacroinstructionllamada
fooyelmacroinstructionestructurallamadabar.Esaslneas:
equfoo
foobar
seraentoncesambosinterpretadocomoinvocacionesdefoomacroinstruction,yaqueelsignificado
ingdelprimersmboloanulaelsignificadodeunsegundo.
Cuandoelmacroinstructiongeneralasnuevaslneasdesubloquededefinicin,encada
alinearlaprimeraexploracionesdedirectivasmacroinstruction,yellosIntrpretesenconsecuencia.Todos
elotrocontenidoenelbloquededefinicinseutilizaparaprepararlasnuevaslneas,ensustitucindela
parmetrosconsusvaloresyluegoprocesarelsmboloescapary#y'
operadores.Eloperadordeconversintienelaprioridadmsaltaquelaconcatenacinysi
cualquieradeellosoperaenelsmboloescapado,elescapesecancelaantesdeterminarel
operacin.Despusdeestosecompleta,lalnearecingeneradopasaatravsdelanorma
preprocesamiento,comosedescribianteriormente.
Aunquelasconstantessimblicasengeneralslosesustituyenenlaslneas,cuandonopre
sehaencontradodirectivasdeprocesadornimacroinstrucciones,hayalgunoscasosespeciales
dondelosreemplazosserealizanenlaspartesdelaslneasquecontienenlasdirectivas.Primero
Pgina101
2.3.Directivasdelpreprocesador
101
unoesladefinicindeconstantesimblica,dondelassustitucionesserealizanentodaspartes
despusdeentoncesseleasignalapalabraclaveequyelvalorresultantedelanuevaconstante(ver
2.3.2).ElsegundodeestoscasoseslaDirectivapartido,dondelassustitucionessehacenen
lossmbolossiguientescomadelantedeellosajuegoconelpatrn.Estascaractersticaspueden
serusadoporejemploparamantenerlaslistas,comoesteconjuntodedefiniciones:
listaequ
elementoappendmacro
{
Coincidircualquiera,lista\{listlistaequ,elemento\}
partido,lista\{itemequlista\}
}
Lalistaesconstanteaquinicializaconvalorvaco,yelmacroinstructionappend
sepuedeutilizarparaagregarlosnuevoselementosenestalista,separadosporcomas.La
primerpartidoenestemacroinstructionsloseproducecuandoelvalordelalistanoestvaca(ver
2.3.6),entalcasoelnuevovalordelalistaeslaanteriorconlacomay
elnuevoartculoaadealfinal.Elsegundopartidosloocurrecuandolalistaestodava
vaco,yentalcasosedefinelalistaparacontenersloelnuevoelemento.Asapartirde
lalistavaca,elappend1definiralistaequ1yel2appendsiguindolo
definiralistaequ1,2.Unopodranecesitarusarestalistacomolosparmetrosa
algunosmacroinstruction.Peronosepuedehacerdirectamentesifooeslamacroinstruccin,
acontinuacin,lalistadefooseraslotienequepasarelsmbololistacomoparmetroalmacro,yasimblica
constantesnosedesenrollanenestaetapa.ParaestepropsitounavezmscoincideDirectivaviene
muytil:
paramspartidos,lista{paramsfoo}
Elvalordelalista,sinoestvaco,coincideconlapalabraclaveparams,quesesustituyeacontinuacin
convalorcoincidentecuandosegeneranlasnuevaslneasdefinidasporelbloquecerradocon
apoyos.Asquesilalistatenaunvalorde1,2,lalneaanteriorgeneraralalneaquecontiene
foo1,2,queluegopasarporelpreprocesamientoestndar.
Elotrocasoespecialesenlosparmetrosdeladirectivarept.Lacantidadderepeticin
cionesylabasedevalorparaelcontadorsepuedeespecificarmedianteexpresionesnumricas,ysi
hayunaconstantesimblicaconelnombrenonumricoutilizadoentalexpresin,pre
procesadorintentaevaluarsuvalorcomounaexpresinnumricaysitienexito,reemplaza
laconstantesimblicaconelresultadodequeelclculoycontinaparaevaluarla
expresinprimaria.Silaexpresindentrodequelasconstantessimblicastambincontienealgunos
constantessimblicas,preprocesadortratarndecalculartodoslosvaloresnecesariosdeformarecursiva.
Estopermiterealizaralgunosclculosenelmomentodepreprocesamiento,siempreycuandotodos
losvaloresutilizadossonlosnmerosconocidosenlaetapadepreprocesamiento.Unasolarepeticin
conreptpuedeserutilizadoparaelnicopropsitodecalcularunciertovalor,comoenesteejemplo:
Pgina102
102
CAPTULO2.delconjuntodeinstrucciones
definirunb+4
definirb3
rept1resultado:a*b+2{definirresultadoc}
Paracalcularelvalorbaseparaelcontadorresultado,preprocesadorsustituyealabconsuvalor
ycalculadeformarecursivaelvalordeuna,obteniendo7comoresultado,entoncessecalcula
laprincipalexpresinconelresultadode23.Elccontinuacin,sedefineconlaprimera
valordecontador(debidoaqueelbloqueseprocesaslounavez),queeselresultadodela
elclculo,porloqueelvalordecessimple23smbolo.Tengaencuentaquesibesposteriormenteredefinidocon
algnotrovalornumrico,laprximavezydeexpresinquecontieneunasecalcula,la
valordeunreflejarelnuevovalordeb,porquelaconstantesimblicacontieneslo
eltextodelaexpresin.
Hayotrocasoespecialcuandopreprocesadorvaacomprobarelsegundo
smboloenlalneaypasaaserelcarcterdedospuntos(loqueseinterpretaentoncespor
ensambladorcomodefinicindeunaetiqueta),sedetieneenestelugaryterminaelprocesamientopreviode
elprimersmbolo(asquesieslaconstantesimblicaquesedesenrolla)ysitodavaaparece
paraserlaetiqueta,serealizaelprocesamientoprevioestndarapartirdeellugardespusde
laetiqueta.Estopermitecolocarlasdirectivasdepreprocesadorymacroinstruccionesdespusdela
etiquetas,deformaanlogaalasinstruccionesydirectriceselaboradosporelensamblador,como:
empezar:include'start.inc'
Sinembargo,silaetiquetaserompenduranteelprocesamientoprevio(porejemplo,cuandoesel
constantesimblicaconvalorvaco),slolasustitucindelasconstantessimblicasescon
continuporelrestodelalnea.
Caberecordar,quelostrabajosrealizadosporelpreprocesadorsonprelimi
operacionesriassobrelossmbolosdelostextos,queserealizanenunsolopasosencilloantesdela
principalprocesodemontaje.EltextoqueeselresultadodepreprocesamientosepasaaAS
sembler,yluegohacesusmltiplespasesenl.As,lasdirectivasdecontrol,que
sonreconocidosyprocesados
sloporelensambladoryaquedependendela
valoresnumricosquepuedeninclusovariarentrepasadasnosereconocenenmodoalgunopor
elpreprocesadorynotienenningnefectosobreelprocesamientoprevio.Considereesteejemplolafuente:
si0
a=1
bequ2
endif
ddb
Cuandosepreprocesa,slodirectivaqueesreconocidoporelpreprocesadoresla
equ,quedefinesimblicaconstanteb,porloquemstardeenlafuentedelsmbolobsesustituye
conelvalor2.Aexcepcindeestasustitucin,lasotraslneassonpasessincambiosa
elensamblador.Asquedespusdeprocesamientopreviodelafuenteanteriorseconvierteen:
Pgina103
2.4.DIRECTIVASformateador
103
si0
a=1
endif
dd2
Ahora,cuandoelensambladorprocesa,lacondicinparaelcasodequeesfalso,ylaconstante
nosedejedefinido.Sinembargosimblicaconstantebseprocesconnormalidad,apesardeque
sudefinicinsepusojustoalladodeladea.Asquedebidoalaposibleconfusin
usteddebetenermuchocuidadocadavezquealmezclarlascaractersticasdepreprocesadory
ensambladorenestoscasos,esimportantedarsecuentadeloquelafuenteseconvertirdespusdela
procesamientoprevio,yporlotantoloqueelensambladorveryhacersusmltiplespasesen.
2.4directivasFormatter
Estasdirectivassonenrealidadtambinunaespeciededirectivasdecontrol,conelfindecon
curricnelformatodelcdigogenerado.
Directivaformatoseguidoporelidentificadordeformatopermiteseleccionarelformatodesalida.
Estadirectivadebeserpuestoalprincipiodelafuente.Formatodesalidapordefecto
esunarchivobinarioplana,quetambinsepuedeseleccionarmedianteelusodeformatobinarioDirectiva.Este
Directivapuedeirseguidodelapalabraclaveycomolacitadacadenaqueespecificaelvalorpordefecto
extensindearchivoparaelarchivodesalida.Amenosqueseespecifiqueelnombredelarchivodesalidadela
lneadecomandos,ensambladorutilizarestaextensinalgenerarelarchivodesalida.
directivasUSE16yUSE32fuerzanelensambladorparagenerar16bitso32bitsdecdigo,
omitiendoelajustepredeterminadoparaelformatodesalidaseleccionado.use64permitelageneracindela
Cdigoparaellargomododeprocesadoresx8664.
Acontinuacinsedescribenlosdiferentesformatosdesalidaconlasdirectivasespecficasparaestos
formatos.
2.4.1MZejecutable
ParaseleccionarelformatodesalidaMZ,utiliceformatoDirectivaMZ.Elajustedecdigopordefecto
esteformatoes16bits.
Directivasegmentodefineunnuevosegmento,quedebeserseguidoporlaetiqueta,cuyovalor
serelnmerodesegmentodefinido,opcionalmenteUSE16oUSE32palabrapuedeseguirpara
especificarsielcdigodeestesegmentodebeserde16bitso32bits.Elorigendelsegmento
estalineadoconelprrafo(16bytes).Todaslasetiquetasdefinidasacontinuacin,tendrnvaloresrelativos
alprincipiodeestesegmento.
DirectivaentradaestableceelpuntodeentradaparaMZejecutable,debeserseguidopor
ladireccindelafecha(nombredelsegmento,elcolonyeldesplazamientodentrodelsegmento)deentradadeseada
punto.
DirectivapilaconfiguralapilaparaMZejecutable.Puedeserseguidopornumrica
expresinqueespecificaeltamaodelapilaquesecreardeformaautomticaoporladireccindelamedida
Pgina104
104
CAPTULO2.delconjuntodeinstrucciones
delmarcoinicialdelapilacuandosequiereconfigurarlapiladeformamanual.Cuandonoespila
definido,lapiladetamaopredeterminadosecrear4.096bytes.
Directivamontndebeserseguidoporunvalorde16bitsquedefineeltamaomximodeAdems
montncionalenlosprrafos(estoesdelmontn,ademsdeapilarydatosnodefinidos).Uso
amontonarn0aasignarsiemprenicoprogramadelamemoriarealmentenecesita.Fuentepredeterminadadelmontnes
65535.
2.4.2PortableExecutable
ParaseleccionarelformatodesalidaPortableExecutable,utiliceformatodirectivaPE,puedeser
seguidoporajustesdeformatoadicionales:primeroelajustesubsistemaobjetivo,quepuedenser
consolaoGUIparaaplicacionesWindows,nativodecontroladoresdeWindows,EFI,EFIboot
oEFIruntimeparaelUEFI,puedeserseguidoporlaversinmnimadelsistema
queelejecutableestdirigidoa(especificarenformadevalordepuntoflotante).Opcional
DLLyWDMpalabrasclavemarcanelarchivodesalidacomounalibreradeenlacedinmicoycontroladorWDM
respectivamente,ylapalabraclavegrandemarcaelejecutablecomocapazdemanejardirecciones
msde2GB.
Despusdeestosajustespuedenseguireloperadoryenlaexpresinnumricaespec
ifyinglabasedelaimagendePEyluegoopcionalmenteeneloperadorseguidoporelcitado
cadenaquecontieneelnombredelarchivoseleccionaMZcostumbrederivadaparaprogramadeeducacinfsica(archivocuandoseespecifique
noesunejecutableMZ,setratacomounarchivobinarioejecutableplanayseconvirtien
FormatoMZ).Elajustedeesteformatodecdigopordefectoesde32bits.Elejemplodetotalmente
declaracinofrecidaformatoPE:
formatoPEGUI4.0DLLen7000000hen'stub.exe'
ParacrearelarchivoPEparalaarquitecturax8664,utilicePE64palabraclaveenlugardelaeducacinfsicaenla
Declaracindeformato,entalcasoelcdigodemodolargosegeneradeformapredeterminada.
Directivaseccindefineunanuevaseccin,quedebeserseguidoporcadenaentrecomillas
definirelnombredelaseccin,acontinuacin,unaomsbanderasdeseccinpuedenseguir.Disponible
banderasson:cdigo,datosdelectura,escritura,ejecutable,compartible,descartables,
notpageable.Elorigendelaseccinestalineadoalapgina(4096bytes).Ejemplodedeclaracin
delaseccinPE:
seccin'.text'ejecutablelegiblecdigo
EntreconbanderastambindeidentificadoresdedatosPEespecialessepuedeespecificarparamarcarel
todalaseccincomounespecialdedatos,posiblesidentificadoressondeexportacin,importacin,recursosy
composturas.Silaseccinestmarcadaparacontenerfixups,quesegenerandeformaautomticay
nohaymsdatosnecesitaserdefinidoenestaseccin.Tambinlosdatosderecursossepuedengenerar
automticamentedesdeelarchivoderecursos,sepuedelograrescribiendoeloperadorde
yelnombredelarchivocitadodespusdequeelidentificadorderecursos.Acontinuacinsepresentanlosejemplosdelassecciones
quecontieneciertosdatosPE:
Pgina105
2.4.DIRECTIVASformateador
105
fixupsdescartablesdatosseccin'.reloc'legibles
seccindedatos''.rsrcrecursolegibledesde'my.res'
DirectivaentradaestableceelpuntodeentradaparaPortableExecutable,elvalordelpuntodeentrada
despusdeellas.
DirectivapilaestableceeltamaodelapilaparaobtenerPortableExecutable,elvalordelapila
tamaodelareservadebenseguir,opcionalmentevalordepilacommitseparadosconcomaspuede
siga.Cuandolapilanoestdefinido,seestablecedeformapredeterminadaaltamaode4.096bytes.
DirectivamontneligeeltamaodealmacenamientodinmicoparaPortableExecutable,elvalordelareservamontn
tamaodebeseguir,opcionalmentevalordelmontncometerseparadosporcomaspuedeseguir.
Cuandosedefineningnmontn,queestconfiguradopordefectoparaeltamaode65536bytes,cuandoeltamaodelmontn
cometeresnoespecificado,esdeformapredeterminadaseestableceencero.
DirectivadedatoscomienzaladefinicindedatosespecialPE,debeirseguidodeuno
delosidentificadoresdedatos(exportacin,importacin,derecursosocomposturas)oporelnmerodedatos
entradaenlacabeceraPE.Losdatosdebenserdefinidosenprximaslneas,terminaronconlosdatosfinales
Directiva.Cuandoseeligededefinicindedatoscomposturas,segeneranautomticamentey
nohaymsdatosnecesitaserdefinidoall.Lomismoseaplicaalosdatosderecursoscuando
elidentificadorderecursosesseguidopordeloperadorycitelnombredearchivoentalcaso
losdatossetomadelarchivoderecursosdado.
EloperadorrvasepuedeutilizardentrodelasexpresionesnumricasparaobtenerelRVA
delelementoabordadoporelvalorqueseaplicaa,queeseldesfaserelativoalabase
deimagenPE.
2.4.3CommonObjectFileFormat
ParaseleccionarCommonObjectFileFormat,utiliceformatoCOFFoformatoDirectivaMSCOFF,
dependiendodesideseacrearclsico(DJGPP)ovariantedeCOFFdeMicrosoft
presentar.Elajustedeesteformatodecdigopordefectoesde32bits.ParacrearelarchivodeMicrosoftde
FormatoCOFFparalaarquitecturax8664,formatoutilizacinajusteMS64COFF,entalcaso,
cdigodemodomuchosegeneradeformapredeterminada.
Directivaseccindefineunanuevaseccin,quedebeserseguidoporcadenaentrecomilladadefinible
ingelnombredelaseccin,acontinuacin,unaomsbanderasdeseccinpuedenseguir.Seccinbanderasdisponibles
capazparaambasvariantesCOFFsondecdigoydatos,mientrasquelasbanderasdelectura,escritura,
ejecutable,compartible,descartable,notpageable,linkremoveylinkinfoson
disponiblesloconlavarianteCOFFdeMicrosoft.
Pordefectoseccinsealineaconlapalabradoble(cuatrobytes),enelcasodeMicrosoftCOFF
varianteotraalineacinpuedeserespecificadoporeloperadorproporcionaralignseguidode
valordealineacin(cualquierpotenciadedoshasta8192),entrelasbanderasdeseccin.
Directivaextrndefineelsmboloexterno,debeserseguidoporelnombrede
smboloy,opcionalmente,eloperadordetamaoqueespecificaeltamaodelosdatosetiquetadosporestesmbolo.
Elnombredelsmbolosepuedetambinprecedidadecadenaentrecomillasquecontieneelnombredela
smboloexternoyeloperadoras.Algunosejemplosdedeclaracionesdesmbolosexternos:
Pgina106
106
CAPTULO2.delconjuntodeinstrucciones
salidaextrn
extrn'__imp__MessageBoxA@16'comoMessageBox:dword
Directivapblicadeclaraelsmboloexistentecomopblico,quedebeserseguidoporla
nombredelsmbolo,opcionalmentepuedeserseguidoporeloperadorasylacadenaentrecomillas
quecontieneelnombrebajoelcualsmbolodebeestardisponiblecomopblico.Algunosejemplosde
smbolospblicasdeclaraciones:
principalpblico
iniciopblicocomo'_start'
Adems,conformatoCOFFesposibleespecificarsmboloexportadocomoesttica,es
hechoprecediendoelnombredelsmboloconlapalabraclavestatic.
AlutilizarelformatoCOFFdelaMicrosoft,eloperadorrvasepuedeutilizardentrodela
expresionesnumricasparaobtenerlaRVAdeltematratadoporelvalorqueseaplica
a.
2.4.4FormatoEjecutableyLinkable
ParaseleccionarelformatodesalidaELF,utiliceformatoDirectivaELF.Elajustedecdigopordefecto
esteformatoesde32bits.ParacrearelarchivoELFparalaarquitecturax8664,ELF64formatodeuso
Directiva,entalcaso,elcdigodemododetiemposegeneraporomisin.
Directivaseccindefineunanuevaseccin,quedebeserseguidoporcadenaentrecomilladadefinible
ingelnombredelaseccin,acontinuacin,puedeseguirunooambosdelejecutableyescribible
banderas,opcionalmentetambinsealineanoperadorseguidoporelnmeroqueespecificalaalineacin
deseccin(quetienequeserlapotenciadedos),sinoseespecificalaalineacin,elvalorpordefecto
seutiliza,quees4u8,dependiendodequformatovariantehasidoelegido.
extrnydirectivaspblicastienenelmismosignificadoylasintaxiscomocuandoelCOFF
formatodesalidaseselecciona(descritoenelapartadoanterior).
Eloperadorrvapuedenocuandoseutilizatambinenelcasodeesteformato(sinembargo
arquitecturaobjetivoesx8664),convierteladireccineneldesplazamientoconrespectoala
GOTmesa,porloquepuedesertilparacrearcdigoindependientedelaposicin.Tambinhayuna
operadorpltespecial,quepermitellamaralasfuncionesexternasatravsdelProcedimiento
TablaVinculacin.Inclusopuedecrearunaliasparalafuncinexternaquehar
siempreserllamadoatravsdePLT,conelcdigocomo:
extrn'printf'como_printf
printf=PLT_printf
Paracrearelarchivoejecutable,sigaladirectivaeleccinformatoconelejecutable
palabraclavey,opcionalmente,elnmeroqueespecificalamarcadelsistemaoperativodedestino
(Porejemploelvalor3marcaraelejecutableparasistemasLinux).Conesteformato
EscogimosestehotelsepermiteutilizarDirectivaentradaseguidoporelvalorparaestablecercomopuntodeentrada
deprograma.Porotraparte,sehaceextrnydirectivaspblicasnodisponibles,y
Pgina107
2.4.DIRECTIVASformateador
107
enlugardelaseccinnodebehaberladirectivasegmentoutilizado,seguidoporunooms
permisosegmentodebanderasyopcionalmenteunmarcadordesegmentoejecutableELFespecial,
quepuedeserintrprete,dinmicoonota.Elorigendesegmentoestalineadoalapgina
(4096bytes),ylasbanderasdepermisosdisponiblesson:lectura,escriturayejecucin.
Pgina108
108
CAPTULO2.delconjuntodeinstrucciones
Pgina109
Captulo3
ProgramacindeWindows
ConlaversindeWindowsdeensambladorplana,queincluyeelpaquetedeestndarincluye
diseadoparaayudaraescribirlosprogramasparaelentornoWindows.
Elpaqueteincluyecontienelascabecerasde32bity64bitdeWindowsprogramacin
mingenlacarpetarazylaespecializadaincluyenenlassubcarpetas.Engeneral,la
cabecerasincluyenlosarchivosespecializadosnecesariosparaque,aunqueavecesesposiblequeprefiera
paraincluiralgunosdelosmacroinstructionpaquetesporsmismo(yaquealgunosdeellosnoson
incluidoporalgunosoinclusolatotalidaddelascabeceras).
HayseiscabecerasparaWindowsde32bitsquesepuedenelegir,connombres
comenzandoconwin32seguidodeunaletradeunaparautilizarlacodificacinASCII,ouna
letrawparalacodificacinWideChar.Elwin32a.incywin32w.incsonlosbsicos
cabeceras,lawin32ax.incywin32wx.incsonlosencabezadosextendidos,proporcionan
macroinstruccionesmsavanzados,esasextensionessediscutirnporseparado.Finalmente
lawin32axp.incywin32wxp.incsonlosmismosencabezadosextendidosconcaractersticahabilitada
turadeverificarelrecuentodelosparmetrosenlasllamadasaprocedimiento.
HayanlogasseispaquetesparaelWindowsde64bits,connombresquecomienzancon
win64.OfrecenengenerallamismafuncionalidadquelosdeWindowsde32bits,
conslounaspocasdiferenciasexplicanmsadelante.
Puedeincluirlosencabezadosdelaformaqueprefieras,proporcionandolarutacompletaousar
lavariabledeentornopersonalizado,peroelmtodomssimpleesdefinirlaINCLUYEN
variabledeentornocorrectamenteapuntandoaldirectorioquecontienelascabecerasydespus
incluirlosaligualque:
incluir'win32a.inc'
Esimportantesealarquetodaslasmacroinstrucciones,comparadosconlasdirectivasinternasde
ensambladorplana,sonmaysculasyminsculasylacajainferiorseutilizaparalamayoradeellos.Sidesea
prefierenutilizarelotrocasodedefecto,usteddebehacerlosajustesapropiados
conladirectivafija.
109
Pgina110
110
CAPTULO3.VENTANASDEPROGRAMACIN
3.1encabezadosbsicos
Losencabezadosbsicoswin32a.inc,win32w.inc,win64a.incywin64w.incincluyenla
declaracionesdeWindowsconvierteyestructurasyproporcionanelconjuntoestndardemacroin
trucciones.
3.1.1Estructuras
Todaslascabeceraspermitenlamacroinstruccinstruct,quepermitedefinirestructurasenlas
unaformamssimilaraotrosensambladoresqueladirectivaestruc.Ladefinicinde
estructuradebeiniciarseconstructmacroinstructionseguidodelnombre,y
terminconextremosmacroinstruction.Enlneasentrelasdirectivasdedefinicindedatossloson
permitido,conlasetiquetasdeserlosnombrespurosparaloscamposdelaestructura:
structPUNTO
xdd?
ydd?
extremos
Contaldefinicindeestalnea:
point1PUNTO
declararlaestructurapoint1conloscampospoint1.xypoint1.y,dndoles
losvalorespordefectolosmismosconformealodispuestoenladefinicindelaestructura(enestecaso
losvalorespredeterminadossonambosvaloressininicializar).Peroladeclaracindeestructuratambinacepta
losparmetros,enelmismonmerocomoelnmerodecamposenlaestructura,yaquellos
parmetros,cuandoseespecifica,anulanlosvalorespredeterminadosparaloscampos.Porejemplo:
punto2PUNTO10,20
inicializaelcampopoint2.xconelvalor10,ylapoint2.yconvalor20.
Lamacroestructuranoslopermitedeclararlasestructurasdetipodado,sinotambin
definelasetiquetasdelosdesplazamientosdeloscamposdentrodelaestructuraylasconstantesdetamaodecadacampo
ytodalaestructura.Porejemplo,ladefinicinanteriordelaestructuraPOINTdefine
lasetiquetaspunto.xyPunto.yseanlosdesplazamientosdeloscamposdentrodelaestructura,y
sizeof.POINT.x,sizeof.POINT.yysizeof.POINTcomotamaosdelacorrespondiente
camposydetodalaestructura.Lasetiquetasdecompensacinsepuedenusarparaaccederala
estructurasdirigidasindirectamente,como:
moveax,[ebx+punto.x]
cuandoelregistroebxcontieneelpunteroaestructuraPOINT.Tengaencuentaqueeltamaodelcampo
lacomprobacinsellevaacabocondichoaccesotambin.
Lasestructurasenstambinsepermitendentrodelasdefinicionesdelaestructura,porloquelasestructuras
puedeteneralgunasotrasestructurascomoaloscampos:
Pgina111
3.1.ENCABEZADOSBSICOS
111
structLNEA
Puntodeinicio
fin
PUNTO
extremos
Cuandonoseespecificanlosvalorespredeterminadosparaloscamposdelasubestructura,comoenesteejemplo,la
incumplimientosdeladefinicindeltipodesubestructuraseaplican.
Comoelvalordecadacampoesunsoloparmetroenladeclaracindelaestructura,
parainicializarlassubestructurasconvalorespersonalizadosdelosparmetrosparacadasubestructura
debenagruparseenunnicoparmetroparalaestructura:
line1LNEA<0,0>,<100100>
Estadeclaracininicializacadaunodeloscamposline1.start.xyline1.start.ycon
0,ycadaunodelosline1.end.xyline1.end.ycon100.
Cuandoeltamaodelosdatosdefinidosporalgnvalorpasaalaestructuradeclaracines
mspequeoqueeltamaodecampocorrespondiente,serellenaparaqueeltamaonodefinidocon
bytes(ycuandoesmsgrande,ocurreelerror).Porejemplo:
structFOO
dbdatosde256dup(?)
extremos
algunosFOO<"ABC",0>
llenaloscuatroprimerosbytesdesome.dataconvaloresdefinidosysereservaelresto.
Dentrodelasestructurastambinsindicatosysubestructurasnoidentificadassepuedendefinir.La
definicindeunindebecomenzarconelsindicatoyterminarconextremos,comoenesteejemplo:
structBAR
ddfield_1?
unin
ddfield_2?
dbfield_2b?
extremos
extremos
Cadaunodeloscamposdefinidosenelinteriordelaunintieneelmismodesplazamientoycompartenlamisma
lamemoria.Sloelprimercampodelauninseinicializaconelvalordado,losvaloresde
elrestodeloscamposseignoran(sinembargo,siunodelosotroscamposrequieremsmemoria
queelprimero,elsindicatoserellenaconeltamaorequeridoconbytesindefinido).La
todosindicatoesinicializadoporelparmetrosolorecogidaenladeclaracinestructura,y
esteparmetrodavaloralprimercampodelaunin.
Lasubestructurasinnombresedefinedeunamanerasimilaralaunin,sloseiniciacon
lalneastructlugardeunin,como:
Pgina112
112
CAPTULO3.VENTANASDEPROGRAMACIN
structWBB
dwpalabra?
struct
dbbyte1?
dbByte2?
extremos
extremos
Talsubestructuraslotomaunparmetroenladeclaracindetodalaestructurade
definirsusvalores,yesteparmetropuedeserensmismoelgrupodeparmetrosquedefinencada
Campodelasubestructura.Asqueeltipoanteriordelaestructurapuedequedardeclaradocomo:
miWBB1,<2,3>
Loscamposdentrodelossindicatosysubestructurasnoidentificadasseaccedecomosielfuera
directamenteloscamposdelaestructuradelospadres.Porejemploconmy.byte1declaracinanterior
ymy.byte2sonetiquetascorrectasdeloscamposdelasubestructura.
Lassubestructurasylossindicatospuedenanidarsesinlmitesparalaprofundidaddeanidamiento:
structLNEA
unin
Puntodeinicio
struct
ddx1?
ddy1?
extremos
extremos
unin
fin
PUNTO
struct
ddx2?
ddy2?
extremos
extremos
extremos
Ladefinicindelaestructuratambinsepuedebasarenpartedelaestructurayadefinida
tiposyheredatodosloscamposdeesaestructura,porejemplo:
PUNTOstructPuntoC
ddcolor?
extremos
definelamismaestructuraque:
Pgina113
3.1.ENCABEZADOSBSICOS
113
structPuntoC
x
dd?
y
dd?
ddcolor?
extremos
TodaslascabecerasdefineneltipodedatosCHAR,quesepuedeutilizarparadefinirlascadenasdecaracteres
enlasestructurasdedatos.
3.1.2Importaciones
LasmacroinstruccionesimportacinayudanaconstruirlosdatosdeimportacindearchivosPE(generalmentepuestoen
laseccinseparada).Haydosmacroinstruccionesparaestepropsito.Elprimero
sellamabiblioteca,debesercolocadodirectamenteeneliniciodelosdatosdeimportacinyque
definedequbibliotecaslasfuncionessernimportados.Debeserseguidoporcualquier
cantidaddelosparesdeparmetros,cadaparlaetiquetaparaelcuadrodeimportacionesde
labibliotecadada,ylacadenacitadodefinirelnombredelabiblioteca.Porejemplo:
kernel32biblioteca,'KERNEL32.DLL',\
user32,'USER32.DLL'
declaraaimportardelasdosbibliotecas.Paracadaunadelasbibliotecas,latabladeimportaciones
debeentoncesdeclaradoenalgunapartedentrodelosdatosdeimportacin.Estosehaceconlaimportacin
macroinstruction,quenecesitaprimeroparmetroparadefinirlaetiquetadelamesa(la
mismoscomodeclaradoanteriormentealabibliotecademacros),yluegolosparesdeparmetrosdecadauno
quecontienelaetiquetadepunteroimportadoylacadenaentrecomillasdefinirelnombrede
funcionarexactamentecomoexportadoporlabiblioteca.Porejemplo,ladeclaracindelabibliotecadearriba
Puedecompletarseconlasdeclaracionesdeimportacinsiguientes:
kernel32importacin,\
ExitProcess,'ExitProcess'
user32importacin,\
MessageBeep,'MessageBeep',\
MessageBox,'MessageBoxA'
Lasetiquetasdefinidasporprimeraparmetrosencadaparpasanaladireccindemacroimportacin
lospunterosdepalabrasdobles,quedespusdecargarelPEestnllenosdelasdireccionesalas
procedimientosexportados.
Enlugardecadenaentrecomillasparaelnombredelprocedimientoparaimportar,elnmeropuedeser
dadoadefinirimportacinporordinal,como:
aduanadelaimportacin,\
ByName,'nombrefuncin',\
ByOrdinal,17
Pgina114
114
CAPTULO3.VENTANASDEPROGRAMACIN
Lasmacrosdeimportacinoptimizarlosdatosdeimportacin,porloqueslolasimportacionesparalasfuncionesque
seutilizanenalgunaparteenelprogramasecolocanenlastablasdeimportacin,ysialgunosdeimportaciones
mesaestaravacodeestamanera,todalabibliotecanosehacereferenciaatodos.Paraesto
raznporlaqueestiltenerlatablacompletadeimportacinparacadabibliotecaelpaquete
contienetalestablasparaalgunasdelasbibliotecasestndar,sealmacenanenelAPIAy
SubdirectoriosyAPIWimportarlasvariantesASCIIyWideChardelasfuncionesdelaAPI.
Cadaarchivocontieneunatabladeimportacin,conlaetiquetaminsculaelmismoqueelnombredelarchivo.
AsquelastablascompletasparaimportardelasbibliotecasKernel32.dllyUSER32.DLL
sepuededefinirdeestamanera(asumiendoquesufiguranelmedioambientevariableapuntaala
directorioquecontieneelpaqueteincluye):
kernel32biblioteca,'KERNEL32.DLL',\
user32,'USER32.DLL'
incluir"apia\kernel32.inc'
incluir'apiw\user32.inc'
3.1.3Procedimientos(32bit)
EncabezadosparaWindowsde32bitsproporcionancuatromacroinstruccionesparallamarprocedimientoscon
parmetrospasados
enlapila.Elstdcallllamadirectamenteelprocedimientoespecificadoporel
primerargumentomedianteelconveniodellamadaSTDCALL.Elrestodeargumentospasados
a
macrodefinenlosparmetrosaprocedimientosysealmacenanenlapilaenordeninverso.
Lamacrodeinvocacinhacelomismo,sinembargo,llamaalprocedimientoindirectamente,atravsdela
punteromarcadoporelprimerargumento.Asinvocarsepuedeutilizarparallamaralosprocedimientos
atravsdepunterosdefinidosenlastablasdeimportacin.Estalnea:
invocarMessageBox,0,szText,szCaption,MB_OK
esequivalentea:
stdcall[MessageBox],0,szText,szCaption,MB_OK
yambosgeneranestecdigo:
empujarMB_OK
empujarszCaption
empujarszText
empujar0
llamar[MessageBox]
Elccallycinvokesonanlogasalastdcalleinvocar,perodeberan
utilizarseparallamaralosprocedimientosqueutilizanlaconvencindellamadaC,dondeelmarcodepila
tienequeserrestauradoporlapersonaquellama.
Paradefinirelprocedimientoqueutilizalapiladeparmetrosyvariableslocales,se
debeutilizarelmacroinstructionproc.Ensuformamssimple,tienequeserseguidoporla
nombraralosnombresdeprocedimientoyluegoporlostodoslosparmetrosquesenecesitan,como:
Pgina115
3.1.ENCABEZADOSBSICOS
115
procWindowProc,hwnd,WMSG,wparam,lparam
Elcomaentreelnombredelprocedimientoyelprimerparmetroesopcional.La
instruccionesdelprocedimientodebenseguirenlasprximaslneas,queterminaronconlaendpmacroin
construccin.Elmarcodepilaseconfiguraautomticamenteenlaentradaalprocedimiento,laEBP
registroseutilizacomobaseparaaccederalosparmetros,porloquedebeevitarelusodeesteregistro
paraotrosfines.BasanEBPLosnombresdelosparmetrosconfiguradosseutilizanparadefinir
etiquetas,quesepuedenutilizarparaaccederalosparmetroscomovariablesregulares.Porejemplo
elmoveax,[hwnd]instruccindentrodelprocedimientodefinidocomoenelejemploanterior,es
equivalenteamoveax,[ebp+8].Elalcancedeesasetiquetasselimitaalprocedimiento,
porloquepuedeutilizarlosmismosnombresparaotrosfinesfueradelprocedimientodado.
Desdecualquierparmetroseempujanenlapilacomodoblespalabrasalllamartales
procedimientos,lasetiquetasdelosparmetrossedefinenparamarcarlosdatosdepalabrasdoblespor
pordefecto,sinembargoustedpuedeespecificarlostamaosparalosparmetrossilodesea,siguiendo
elnombredeparmetrocondospuntosyeloperadordetamao.Elejemploanteriorpuedeser
reescritoestamanera,queesdenuevoequivalente:
procWindowProc,hwnd:DWORD,WMSG:DWORD,wparam:DWORD,lparam:DWORD
Siespecificauntamaomenorqueeldoblepalabra,laetiquetadadaseaplicaalmenor
partedetodalapalabradoblealmacenadoenlapila.Siseespecificauntamaomsgrande,aligualque
mspunterodepalabraquad,losdosparmetrosdepalabrasdoblessedefinenparamantenerestevalor,
peroseetiquetancomounavariable.
Elnombredelprocedimientopuedeserseguidotambinporcualquieradelastdcallocpalabraclavepara
definirlaconvencindellamadaqueutiliza.Cuandonoseespecificaestetipo,seutilizaelvalorpordefecto,
loqueequivaleaSTDCALL.Luegotambinlapalabraclaveusospuedeseguir,ydespus
quelalistaderegistros(separadosnicamenteporespacios)quesealmacenarautomticamenteen
entradaalprocedimientoyrestauradoenlasalida.Enestecasolacomadespusdelalistaderegistros
yantesdequeserequierequeelprimerparmetro.Asquelasentenciadeprocedimientocontodaslasfunciones
podrateneresteaspecto:
stdcallWindowProcprocutilizaebxesiedi,\
hwnd:DWORD,WMSG:DWORD,wparam:DWORD,lparam:DWORD
Declararlavariablelocalpuedeutilizarelmacroinstructionlocales,seguidode
unaomsdeclaracionesseparadasporcomas,cadaunoqueconsisteenelnombrede
lavariableseguidodedospuntosyeltipodevariableyaseaunodelostiposestndar
(Debeestarenmaysculas)oelnombredeestructuradedatos.Porejemplo:
localeshDC:DWORD,rc:RECT
Paradeclararunarraylocal,puedeseguirelnombredelavariableporeltamaodelamatrizadjunta
entrecorchetes,como:
strlocales[256]:BYTE
Pgina116
116
CAPTULO3.VENTANASDEPROGRAMACIN
Laotramaneradedefinirlasvariableslocalesesdeclararenelinteriordelbloquecomenz
con"locales"macroinstructionytermincon"endl",enestecasopuedenserdefinidos
aligualquelosdatosregulares.Estadeclaracineselequivalentedelamuestraanterior:
gente
ddDCh?
rcRECT
endl
Lasvariableslocalespuedenserdeclaradasencualquierlugardentrodelprocedimiento,conlanicalmites
bilitacindequetienenqueserdeclaradaantesdeserutilizados.Elmbitodeaplicacindeetiquetaspara
lasvariablesdefinidascomolocalesselimitanadentrodelprocedimiento,sepuedeutilizarelmismo
nombresparaotrosfinesajenosalprocedimiento.Siustedledaalgunosvaloresinicializadosa
lasvariablesdeclaradascomolocal,elmacroinstructiongeneralasinstruccionesquele
inicializarestasvariablesconlosvaloresdadosyponeestasinstruccionesalmismo
posicinenelprocedimiento,dondesecolocaladeclaracin.
Laretcolocarseencualquierlugardentrodelprocedimiento,generaelcdigocompletonecesario
parasalircorrectamenteelprocedimiento,larestauracindelaestructuradepilaylosregistrosutilizadospor
procedimiento.Siustednecesitaparagenerarlainstruccinderetornoprima,utilicelatecladeaccesoRETN,
oseguirelretconelparmetrodenmero,loquetambinhacequesepuedeinterpretarcomo
instruccinindividual.
Pararecapitular,ladefinicincompletadelprocedimientopuedeteneresteaspecto:
procWindowProcutilizaebxesiedi,hwnd,WMSG,wparam,lparam
localeshDC:DWORD,rc:RECT
lasinstrucciones
enriar
endp
3.1.4Procedimientos(64bit)
EnWindowsde64bitsslohayunaconvencindellamada,yporlotantoslodosmacroin
Seproporcionanconstruccionesparallamarprocedimientos.Elfastcallllamadirectamenteladimiento
dureespecificadoporelprimerargumentomediantelaconvencinestndardeWindowsde64bits
sistema.Lamacrodeinvocacinhacelomismo,sinoindirectamente,atravsdelpunteromarcado
porelprimerargumento.Parmetrossonproporcionadosporlosargumentosquesiguen,yque
puedeserdecualquiertamaodehasta64bits.LasmacroinstruccionesutilizanregistroRAXcomotemporal
almacenamientocuandoalgnvalordeparmetronosepuedecopiardirectamenteenlapantallautilizandoel
instruccinmov.Sielparmetroestprecedidoconaddrpalabra,setratacomounadireccin
ysecalculaconlainstruccindeleaporloquesiladireccinesabsoluta,seconsigue
calculadocomoRIPrelativo,evitandoaslageneracindeunareubicacinenelcasodelosarchivosde
composturas.
DebidoaqueenWindowsde64bitssepasanlosparmetrosdepuntoflotantedeunamaneradiferente
manera,tienenqueestarmarcadaporanterioracadaunodeellosconlapalabraflotador.Pueden
Pgina117
3.1.ENCABEZADOSBSICOS
117
serodoblepalabraopalabraquadentamao.HeaquunejemplodellamaraalgunosOpenGL
procedimientosconparmetroshagadobledeprecisinodeprecisinsimple:
invocarglVertex3d,flotar0,6,0,6flotar,flotar0.0
invocarglVertex2f,flotardword0.1,flotardword0.2
Elespaciodepilaparaparmetrosseasignanantesdecadallamadayliberinmediatamente
despusdeella.Sinembargo,esposibleasignaresteespacioslounavezportodaslasllamadasenelinterior
algnbloquedadodecdigo,paraestepropsitohaymarcoymacrosendfprevistas.
Debenserutilizadosparaencerrarunbloque,dentrodelacualelregistroRSPnosealtera
entreelprocedimientodellamayqueimpidequecadallamadadelaasignacindeespaciodepilapara
parmetros,yaqueestreservadoslounavezporlamacromarcoyluegoliberadosenelextremopor
lamacroENDF.
marcoasignarespaciodepilaslounavez
invocarTranslateMessage,msg
invocarDispatchMessage,msg
ENDF
LamacroprocparaWindowsde64bitstienelamismasintaxisycaractersticascomode32bitsuno
(AunqueopcionesSTDCALLyCsondeningunautilidadensucaso).Cabesealar,sinembargo
queenlaconvencindellamadautilizadoenWindowsde64bitsprimeroscuatroparmetrossepasanen
registros(RCX,RDX,R8yR9),yporlotanto,apesardequeestreservadounespacio
paraellosenlapilayseetiquetaconelnombreproporcionadoenladefinicindelprocedimiento,
esoscuatroparmetrosnoinicialmenteresidirall.Debenteneraccesoalosdirectamente
lalecturadelosregistros.Perosisenecesitanlosregistrosparaserutilizadoparaalgnotropropsito,
serecomiendaalmacenarelvalordedichoparmetroenlaceldadememoriareservada
paraello.Eliniciodetalprocedimientopuedeser:
procWindowProchwnd,WMSG,wparam,lparam
mov[hwnd],rcx
mov[WMSG],edx
mov[wparam],r8
mov[lparam],r9
ahoraregistrossepuedenutilizarparaotrosfines
ylosparmetrostodavasepuedeaccedermstarde
3.1.5Personalizacindelosprocedimientos
Esposiblecrearuncdigopersonalizadoparaelmarcodeprocedimientocuandoseutilizaprocmacroin
construccin.Haytresvariablessimblicas,prlogo@proc,eplogo@procy
cerca@proc,quedefinenlosnombresdemacroinstruccionesqueprocpidealaentradaen
elprocedimiento,elretornodeprocedimiento(creadoconretmacro)yalfinaldelprocedi
dure(hechoconendpmacro).Estasvariablespuedenserredefinidosparaqueapunteaotro
macroinstrucciones,paraquetodoelcdigogeneradoconprocmacrosepuedenpersonalizar.
Pgina118
118
CAPTULO3.VENTANASDEPROGRAMACIN
Cadaunodeesostresmacroinstruccionestomacincoparmetros.Elprimeroofrece
unaetiquetadepuntodeentradadelprocedimiento,queeselnombredelprocedimientotambin.Elsegundo
esuncampodebitsquecontienealgunasbanderas,enparticularelbit4seestablececuandosesuponequelapersonaquellama
pararestaurarlapila,yseaclarlocontrario.Elterceroesunvalorqueespecifica
elnmerodebytesquelosparmetrosparaelprocedimientodetomaenlapila.Elcuarto
unoesunvalorqueespecificaelnmerodebytesquedebereservarseparaloslocales
variables.Porltimo,elquintounltimoparmetroeslalistaderegistrosseparadosporcomas,
quprocedimientodeclaradoparaserutilizadoyqueporlotantodebesersalvadoporprlogo
yrestauradaporeplogo.
Lamacroprlogoapartedegenerarcdigoqueestableceraelmarcodepila
yelpunteroalasvariableslocalestienequedefinirdosvariablessimblicas,parmbase@proc
ylocalbase@proc.Elprimerodebeproporcionarladireccindebaseparaqueel
parmetrosresiden,yelsegundo,debenproporcionarladireccinpordondelolocal
lasvariablesresidenporlogeneralenrelacinconEBP/registroRBP,peroesposibleutilizarotro
basasipuedegarantizarsequelospunterossernvlidasencualquierpuntodentrodela
procedimientoenelqueseaccedealosparmetrosovariableslocales.Tambineshastaelprlogo
macroparahacercualquieralineacionesnecesariasparalaimplementacinprocedimientovlidoeltamao
delasvariableslocalesprevistoscomocuartoparmetroensmismapuedenoestaralineadoenabsoluto.
Elcomportamientopredeterminadodeprocsedefineporprologuedefyepiloguedefmacros
(Encasodedefectonoesnecesarioparaelcierredelamacro,porloqueelcierre@proctieneunvaco
valor).Siesnecesariovolveralosvalorespredeterminadosdespusseutilizaronalgunaspersonalizaciones,que
sedebehacerconlastreslneassiguientes:
prlogo@procequprologuedef
eplogo@procequepiloguedef
cerca@procequ
Comounejemplodeprlogomodificado,acontinuacineslamacroinstruccinqueimplementa
apilarsondeoprlogoparaWindowsde32bits.Talmtododeasignacinsedebeutilizar
cadavezqueelreadevariableslocalespuedeconseguirmsgrandeque4096bytes.
macrosp_prologueprocname,bandera,parmbytes,localbytes,reglist
{Loclocales
loc=(localbytes+3)y(3)no
parmbase@procequebp+8
localbase@procequebploc
siparmbytes|localbytes
empujeebp
ebpmov,esp
silocalbytes
localbytesrepeticinshr12
bytemov[esp%*4096],0
finalderepeticin
Pgina119
3.1.ENCABEZADOSBSICOS
119
subesp,loc
endif
endif
regIRP,reglist\{empujereg\}}
prlogo@procequsp_prologue
Puedeserfcilmentemodificadoparautilizarcualquierotromtododesondeopiladelprogramadorde
preferencia.
Lascabecerasde64bitsproporcionanunconjuntoadicionaldemacrosprlogo/eplogo,que
permitirdefinirprocedimientoqueutilizaRSPaccederalosparmetrosyvariableslocales(porlo
RegistroRBPeslibredeutilizarparacualquierotroporprocedimiento)ytambinasignalacomn
espacioparatodaslasllamadasaprocedimientosrealizadosenelinterior,porloquefastcalloinvocarmacrosllamados
noesnecesarioasignarcualquierespaciodepilasmismos.Esunefectosimilaralquese
obtenidoponiendoelcdigodentrodelprocedimientoenbloquedebastidor,peroenestecasoel
asignacindeespaciodepiladellamadasaprocedimientosefusionconlaasignacindeespaciopara
variableslocales.ElcdigodentrodedichoprocedimientonodebealterarregistroRSPenmodoalguno.
Paracambiaraestecomportamientode64bitsproc,utilicelassiguientesinstrucciones:
prlogo@procequstatic_rsp_prologue
eplogo@procequstatic_rsp_epilogue
cerca@procequstatic_rsp_close
3.1.6Exportaciones
LaexportacinmacroinstructionconstruyelosdatosdeexportacinparaelarchivoPE(quedeberaser
yaseacolocadoenlaseccinmarcadacomodeexportacin,odentrodelbloquedelaexportacindedatos.Laprimera
argumentodebesercitadocadenaquedefineelnombredelarchivodebiblioteca,yelrestodebe
sercualquiernmerodeparesdeargumentos,primerodecadapareselnombredeprocedimientode
definidaenalgnlugardentrodelafuente,yelsegundoeslacadenaentrecomillascontiene
elnombreconelqueesteprocedimientodebeserexportadoporlabiblioteca.Estamuestra:
exportacin'MYLIB.DLL',\
MyStart,'Inicio',\
MyStop,'Pare'
definelatabladeexportacindedosfunciones,quesedefinenconlosnombresMyStart
yMyStopenlasfuentes,sinoqueserexportadoporlabibliotecaconlosnombresmscortos.La
macroinstruccincuidardelaclasificacinalfabticadelamesa,queesrequeridopor
FormatoPE.
3.1.7Modelodeobjetoscomponentes
LamacrointerfazpermitedeclararlainterfazdeltipodeobjetoCOM,laprimera
parmetroeselnombredelainterfaz,yluegolosnombresconsecutivosdelosmtodos
Pgina120
120
CAPTULO3.VENTANASDEPROGRAMACIN
debeseguir,comoenesteejemplo:
interfazITaskBarList,\
QueryInterface,\
AddRef,\
Suelte,\
HrInit,\
AddTab,\
DeleteTab,\
ActivateTab,\
SetActiveAlt
Lamacrocomcallpuedeentoncesutilizarseparallamaralmtododelobjetodado.La
primerparmetrodeestamacrodebeserlapalancaparaoponerse,elsegundodebeser
nombredelainterfazCOMimplementadaporesteobjeto,ydespuselnombredemtodoy
parmetrosaestemtodo.Porejemplo:
ebxcomcall,ITaskBarList,ActivateTab,[hwnd]
utilizaelcontenidodelregistroEBXcomoasaparaobjetoCOMconelITaskBarList
interfaz,yllamaalmtodoActivateTabdeesteobjetoconelparmetro[hwnd].
TambinpuedeutilizarelnombredelainterfazCOMdelamismamaneracomoelnombredelosdatos
estructura,paradefinirlavariablequecontendrelmangodeobjetardetipodado:
ShellTaskBarITaskBarList
Lalneaanteriordefinelavariable,enlaqueelmangoaobjetoCOMsepuedealmacenar.
Despusdealmacenarallelidentificadordeunobjeto,susmtodospuedenserllamadosconelcominvk.
Estamacroslonecesitaelnombredelavariableconinterfazasignadayelnombre
demtodocomoprimeradosparmetros,yluegoparmetrosparaelmtodo.Asquela
ActivateTabmtododeobjetocuyomangosealmacenaenlavariableShellTaskBar
comosedefineanteriormentepuedeserllamadodeestamanera:
cominvkShellTaskBar,ActivateTab,[hwnd]
quehacelomismoque:
comcall[ShellTaskBar],ITaskBarList,ActivateTab,[hwnd]
3.1.8Recursos
Haydosformasdecrearrecursos,setratadeincluirelarchivoderecursosexternocreado
conalgnotroprograma,y
elotroescrearseccinderecursosmanualmente.
Esteltimomtodo,aunquenonecesitaningnprogramaadicionalparaestarinvolucrado,es
mslaborioso,perolascabecerasestndarproporcionanlaasistenciaelconjuntodeprimaria
macroinstruccionesquesirvencomoladrillosparacomponerlaseccinderecursos.
Pgina121
3.1.ENCABEZADOSBSICOS
Elmacroinstructiondirectoriodebesercolocadodirectamenteeneliniciodecante
aliadoconstruidodatosderecursosydefinequtiposderecursosquecontiene.Debeser
121
seguidoporlosparesdevalores,elprimerodecadapareselidentificadordeltipode
derecursos,ylasegundalaetiquetadesubdirectoriodelosrecursosdeltipodado.
Puedeverseas:
directorioRT_MENU,mens,\
RT_ICON,iconos,\
RT_GROUP_ICON,group_icons
Lossubdirectoriossepuedencolocarencualquierpartedelreaderecursosdespusdeladireccinprincipal
toria,yquetienenqueserdeterminadasconlosmacroinstructionrecursos,loquerequiere
primerparmetroaserlaetiquetadelsubdirectorio(quecorrespondealaentradaenprincipal
directorio)seguidoporlostrosdelosparmetrosencadaunodedichaentradaelprimerparmetro
defineelidentificadorderecurso(estevaloreselegidolibrementeporelprogramadory
seutilizaentoncesparaaccederalrecursodeterminadodelprograma),elsegundoespecificael
ellenguajeylaterceraeslaetiquetaderecursos.Equiparaestndardebenserutilizadospara
crearidentificadoresdeidioma.Porejemplosepuededefinirelsubdirectoriodemensesta
manera:
mensderecursos,\
1,LANG_SPANISH+SUBLANG_DEFAULT,main_menu,\
2,LANG_SPANISH+SUBLANG_DEFAULT,other_menu
Sielrecursoesdetipoparaelqueelidiomanoimporta,ellenguajedeidentificacin
fierLANG_NEUTRALdebeutilizarse.Paradefinirlosrecursosdediversostiposhay
macroinstruccionesespecializados,quedebensercolocadosdentrodelreaderecursos.
LosmapasdebitssonlosrecursosconidentificadordetipoRT_BITMAP.Paradefinirelmapadebits
recursodeutilizarelmacroinstructionmapadebitsconelprimerparmetroeslaetiquetade
derecursos(correspondientealaentradaenelsubdirectoriodemapasdebits)yelsegundo
siendolacitadacadenaquecontienelarutadeaccesoalarchivodemapadebits,como:
program_logomapadebits,'logo.bmp'
Existendostiposderecursosrelacionadosconlosiconos,elRT_GROUP_ICONeseltipode
elrecurso,quetienequeestarrelacionadoconunoomsrecursosdetipoRT_ICON,cadauno
unoquecontieneunasolaimagen.Estopermitedeclararimgenesdediferentestamaosycolores
profundidadesbajoelidentificadorderecursocomn.Esteidentificador,sedaalrecursode
TipoRT_GROUP_ICONpuedeentoncespasaalafuncinLoadIcon,yelegir
laimagendedimensionesadecuadasdelgrupo.Paradefinirelicono,utiliceelicono
macroinstruction,conelprimerparmetroeslaetiquetaderecursosRT_GROUP_ICON,guiente
guidoporlosparesdeparmetrosquedeclaranlasimgenes.Elprimerparmetroencadapar
debeserlaetiquetaderecursoRT_ICON,yelsegundolacadenacitadocontencin
inglarutadeaccesoalarchivodeicono.Enlavariantemssimple,cuandoelgrupodeiconocontieneslo
unaimagen,queseveras:
Pgina122
122
CAPTULO3.VENTANASDEPROGRAMACIN
iconomain_icon,icon_data,'main.ico'
dondeelmain_iconeslaetiquetaparalaentradaenelsubdirectorioderecursosparaRT_GROUP_ICON
tipo,ylaicon_dataeslaetiquetaparalaentradadetipoRT_ICON.
Loscursoressedefinendeunamanerasimilaralosiconos,conelRT_GROUP_CURSORy
RT_CURSORtiposylamacrocursor,quetieneparmetrosanlogosalos
tomadaporeliconomacro.Asqueladefinicindecursorpuedeteneresteaspecto:
cursormy_cursor,cursor_data,'my.cur'
LosmenstieneneltipoRT_MENUderecursosysedefinenconelmenmacroin
construccinseguidoporalgunosotrosquedefinenloselementosdentrodelmen.Elmenensdura
slounparmetrolaetiquetaderecursos.Elelementodemensedefineelelementoenelmen,
setardahastacincoparmetros,peroslodossonnecesarioselprimeroeselcitado
cadenaquecontieneeltextoparaelartculo,yelsegundoeselvalordelidentificador(que
eselvalorqueserdevueltocuandoelusuarioseleccionaelelementodadoenelmen).La
menuseparatordefineunseparadorenelmenynorequiereningnparmetro.
Eltercerparmetroopcionaldemenuitemespecificalasbanderasderecursosmen.YaEst
sondosdeestasbanderasdisponiblesMFR_ENDeslabanderaparaelltimoelementodelalistadada,
ylaMFR_POPUPmarcaqueeltemadadoeselsubmen,ylossiguientesartculos
serpartidasquecomponendichosubmenhastaqueseencuentraelelementoconbanderaMFR_END.La
BanderaMFR_ENDpuedetambindarcomoparmetroalamenuseparatoryeselnico
parmetroestamacroinstructionpuedetomar.Paraladefinicindemenestcompleta,cada
submendebeestarcerradaporelelementoconbanderaMFR_END,ytodoelmendebetambin
sercerradodeestamanera.Heaquunejemplodeladefinicincompletadelmen:
menmain_menu
menuitem'&File',100,MFR_POPUP
menuitem'&Nueva',101
menuseparator
menuitem"&Salir',109,MFR_END
menuitem'&Ayuda',900,MFR_POPUP+MFR_END
menuitem'&Acercade...',901,MFR_END
Elcuartoparmetroopcionaldemenuitemespecificalasbanderasdelestadoparaeldado
artculo,estasbanderassonlosmismosquelosutilizadosporfuncionesdeAPI,comoMFS_CHECKEDo
MFS_DISABLED.Delmismomodo,elquintoparmetropuedeespecificarlasbanderasdetipo.Porejemplo
estodefinirelementoactivadoconunamarcaderadiobotn:
menuitem'Seleccin',102,,MFS_CHECKED,MFT_RADIOCHECK
LoscuadrosdedilogotieneneltipoRT_DIALOGderecursosysedefinenconla
macroinstruccindedilogoseguidodecualquiernmerodeelementosdefinidoscondialogitem
terminconlaEndDialog.
Pgina123
3.1.ENCABEZADOSBSICOS
123
Eldilogopuedetomarhastaparmetrosonce,primerodesietequeserequiera.Primero
parmetro,comodecostumbre,especificalaetiquetadelrecurso,segundoestconteniendolacadenaentrecomillas
elttulodelcuadrodedilogo,lossiguientescuatroparmetrosespecificanlahorizontalyvertical
coordenadas,laanchuraylaalturadelaventanadecuadrodedilogo,respectivamente.La
sptimoparmetroespecificalosindicadoresdeestilodelaventanadecuadrodedilogo,eloctavoopcional
unoespecificalosindicadoresdeestiloprolongados.Elparmetronovenopuedeespecificarelmenpara
ventanadebeserelidentificadorderecursodemen,elmismoqueelespecificadoenel
subdirectoriodelosrecursosconeltipoRT_MENU.Finalmenteelparmetrodcimayundcima
sepuedeutilizarparadefinireltipodeletraparaelcuadrodedilogoprimerodeellosdebeserelcitado
cadenaquecontieneelnombredelafuente,yelsegundounoelnmeroquedefineeltamaode
fuente.Cuandoestosparmetrosopcionalesnoseespecifican,elvalorpordefectodeMSSansSerifde
tamao8seutiliza.
Esteejemplomuestralamacroinstruccindedilogocontodoslosparmetrosexceptopara
elmen(quesequedconvalorenblanco),losopcionalesestnenlasegundalnea:
dilogosobre,"Acercade",50,50,200,100,WS_CAPTION+WS_SYSMENU,\
WS_EX_TOPMOST,'TimesNewRoman',10
Eldialogitemtieneochoparmetrosnecesariosyunoopcional.Enprimerparmetro
debeserlacadenaentrecomillasquecontieneelnombredelaclasedelelemento.Elsegundoparmetro
puedeserlacadenaquecontienetextodelacitaparaelelemento,oidentificadorderecursosen
casocuandoelcontenidodelartculotienequeserdefinidoporalgnrecursoadicional(comoel
elementodeclaseestticaconelestiloSS_BITMAP).Eltercerparmetroeselidentificadorde
elartculo,utilizadoparaidentificarelartculoporlasfuncionesdelaAPI.Prximoscuatroparmetrosespecifican
lascoordenadasverticales,horizontales,laanchuraylaalturadelpuntorespectivamente.La
octavoparmetroespecificaelestiloparaelelemento,yelnovenoopcionalespecificael
indicadoresdeestiloprolongados.Unejemplodedefinicindeelementodedilogo:
'BOTN'dialogitem,'OK',IDOK,8,8,45,15,WS_VISIBLE+WS_TABSTOP
Yunejemplodeelementoestticoquecontienedemapadebits,suponiendoqueexisteunmapadebits
recursodeidentificador7:
dialogitem"esttico",7,0,10,50,50,20,WS_VISIBLE+SS_BITMAP
Ladefinicindelosrecursosdedilogopuedecontenercualquiercantidaddeartculosoningunoenabsoluto,y
hayquesiempreterminabaconmacroinstructionEndDialog.
LosrecursosdetipoRT_ACCELERATORsecreanconmacroinstrucacelerador
cin.Despusdelprimerparmetrosiendotradicionalmentelaetiquetaderecurso,debeseguir
lostrosdeparmetroslasbanderasdeaceleracinseguidoporelcdigodeteclavirtualoASCII
carcteryelvalordelidentificador(queescomoelidentificadordelelementodemen).La
definicinaceleradorsimplepuedeteneresteaspecto:
main_keysacelerador,\
FVIRTKEY+FNOINVERT,VK_F1,901,\
FVIRTKEY+FNOINVERT,VK_F10,109
Pgina124
124
CAPTULO3.VENTANASDEPROGRAMACIN
LainformacindeversineselrecursodetipoRT_VERSIONysecreaconel
versionInfomacroinstruction.Despusdelaetiquetadelrecurso,elsegundoparmetro
EspecificaelsistemaoperativodelarchivodePE(porlogeneraldeberaserVOS__WINDOWS32),tercera
parmetroeltipodearchivo(losmscomunessonVFT_APPparaelprogramayparaVFT_DLL
biblioteca),cuartosubtipo(generalmenteVFT2_UNKNOWN),elidentificadordeidiomaquinto,sexto
lapginadecdigosyluegolosparmetrosdecadenacitados,siendolosparesdenombredelapropiedad
yelvalorcorrespondiente.Lainformacindelaversinmssimplesepuededefinircomo:
versionInfovinfo,VOS__WINDOWS32,VFT_APP,VFT2_UNKNOWN,\
LANG_SPANISH+SUBLANG_DEFAULT,0,\
'DescripcionArchivo","Descripcindelprograma',\
'LegalCopyright","Derechodeautor,etctera',\
'FileVersion','1.0',\
'ProductVersion','1.0'
OtrostiposderecursossepuedendefinirconmacroinstructionresDatos,quetoma
slounparmetrolaetiquetadelosrecursos,ypuedeserseguidoporcualquierinstruccin
ladefinicindelosdatos,terminconEndresmacroinstruction,como:
manifiestaresDatos
archivo'manifest.xml'
Endres
Codificacin3.1.9Texto
LasmacroinstruccionesrecursosutilizanladirectivadudefinircualquiercadenaUnicodeenelinterior
recursosyaqueestadirectivasimplementeceroseextiendealospersonajesalosvaloresde16bits,para
lascadenasquecontienealgunoscaracteresnoASCII,eldupuedennecesitarserredefinida.Para
algunasdelascodificacionesdelasmacroinstruccionesredefinirelduagenerarelUnicode
textoscorrectamenteseproporcionanenelsubdirectoriodecodificacin.Porejemplo,silafuente
textoestcodificadoconWindows1250pginadecdigos,tallneasedebeponerenalgnlugar
elprincipiodelafuente:
incluir"codificacin\win1250.inc'
3.2encabezadosextendidos
Elarchivoswin32ax.inc,win32wx.inc,win64ax.incywin64wx.incproporcionantodala
funcionalidaddelascabecerasdebaseeincluyealgunascaractersticasmsqueparticiparonmscomplejo
macroinstrucciones.Adems,sihayunformatoPEsedeclaraantesdeincluirlaextensin
cabeceras,losencabezadosdeclaranautomticamente.Elarchivoswin32axp.inc,win32wxp.inc,
win64axp.incywin64wxp.incsonlasvariantesdeencabezadosextendidosqueadicionalmente
aliadorealizarcomprobandoelnmerodeparmetrosallamadasdeprocedimiento.
Pgina125
3.2.ENCABEZADOSEXTENDIDA
125
3.2.1Parmetrosdelprocedimiento
Conlosencabezadosextendidoslosmacroinstruccionesparallamarprocedimientospermitenms
tiposdeparmetrosqueslolosvaloresdoblesdepalabrascomoconencabezadosbsicos.Antetodo,
cuandolacitadacadenasepasacomounparmetroparaelprocedimiento,queseutilizaparadefinirstring
datosindicabanqueentreelcdigoypasaalprocedimientoelpunteropalabradobleaesta
cadena.Estopermitedefinirfcilmentelascadenasquenotienenqueserreutilizado,sloenel
lneadellamaralprocedimientoquerequierepunterosaesascadenas,como:
invocarMessageBox,HWND_DESKTOP,"Mensaje","Leyenda",MB_OK
Sielparmetroeselgrupoquecontienealgunosvaloresseparadosporcomas,setrata
delamismamaneratansimplecitadoparmetrodecadena.
Sielparmetroestprecedidoporlapalabraaddr,significaqueestevaloresunadireccin
yestadireccinsedebepasaraprocedimiento,inclusosinosepuedehacerdirectamentecomo
enelcasodelasvariableslocales,quetienendireccionesrelativasalregistroEBP/RBP.En
Caso32bitsdelregistroEDXseutilizatemporalmenteparacalcularelvalordeladirecciny
pasarloalprocedimiento.Porejemplo:
invocarRegisterClass,addrwc
encasodequeelwceslavariablelocalconladireccinebp100h,generareste
secuenciadeinstrucciones:
edxlea,[ebp100h]
empujeedx
llamar[RegisterClass]
Sinembargo,cuandoladireccinindicadanoesrelativoacualquierregistro,sealmacenadirectamente.
Enelcasode64bitssepermiteelprefijoaddrinclusocuandosloseutilizancabecerasestndar,
yaquepuedesertilinclusoencasodelasdireccionesregulares,porqueimponeRIPrelativa
clculodeladireccin.
Concabecerasde32bits,sielparmetroestprecedidoporlapalabradoble,estratado
comovalorde64bitsypasadoalprocedimientocomodosparmetrosde32bits.Porejemplo:
invocarglColor3d,doble1.0,0.1doble,doble0,1
pasarlostresparmetrosde64bitscomoseispalabrasdoblesaprocedimiento.Sielparmetro
siguiendodobleesteloperandodelamemoria,nodebeteneroperadordetamao,eldoble
yaquefuncionacomolaanulacindetamao.
Porltimo,lasllamadasaprocedimientospuedenseranidados,queesllamadoaunsoloprocedimientopuedeser
seutilizacomoelparmetroaotro.Entalcaso,elvalordevueltoenEAX/RAXporel
procedimientoanidadosepasacomoparmetroalprocedimientoqueestanidadoen.A
muestradetalesanidacin:
invocarMessageBox,<invocarGetTopWindow,[hwnd]>,\
"Mensaje","Leyenda",MB_OK
Nohaylmitesparalaprofundidaddeanidacindelasllamadasaprocedimientos.
Pgina126
126
CAPTULO3.VENTANASDEPROGRAMACIN
3.2.2Estructuracindelafuente
Losencabezadosextendidospermitenalgunasmacroinstruccionesqueayudanconfcilestructurarel
programa.El.datay.codesonslolosaccesosdirectosalasdeclaracionesdeseccionespara
dedatosyparaelcdigo.Elmacroinstruction.endsedebeponeralfinaldelprograma,
conunparmetroqueespecificaelpuntodeentradadelprograma,y
tambindeformaautomtica
generalaseccindeimportacinutilizandotodaslastablasglobalesdeimportacin.EnWindowsde64bits
la.endalineaautomticamentelapilaen16byteslmite.
Elmacroinstruction.ifgenerauntrozodecdigoquecompruebaalgunossimples
condicineneltiempodeejecucin,ydependiendodelresultadodelaejecucincontina
siguientebloqueosesalta.Elbloquedebeterminarcon.endif,peroanteriormentetambin
.elseifmacroinstructionpodraserutilizadoparainiciarelcdigoqueseejecutarbajo
algunacondicinadicional,cuandoelanteriornosecumplieron,yel.elsecomoelltimo
antes.endifparaempezarelbloquequesevaaejecutarcuandotodaslascondicioneseran
falsa.
Lacondicinsepuedeespecificarmedianteelusodeoperadordecomparacinunodelos=,<,>,<=,
>=Y<>entrelosdosvalores,primerodeloscualesdebeserobienregistrarseomemoria
operando.Losvaloressecomparancomolossinfirmar,amenosquelaexpresindecomparacin
estprecedidaporlapalabrafirmado.Siustedproporcionavalornicosencillocomocondicin,lohar
probarseasercero,ylacondicinserverdaderaslosinoloes.Porejemplo:
.sieax
enriar
.endif
generalasinstrucciones,quesesaltanlaretcuandoelEAXescero.
Tambinhayalgunossmbolosespecialesreconocidoscomocondiciones:ZERO?escierto
cuandolabanderaZFseestablece,enlamismaformaenqueelCARRY?,REGSTRATE?,DESBORDAMIENTO?ylaparidad?
correspondenalestadodelaFQ,SF,DEybanderasPF.
Lascondicionessimplescomoanteriormentepuedenestarcompuestosencomplejoexcondicional
pressionsutilizandoelY,|operadoresparalaconjuncinylaalternativa,eloperadorde
negacin,yparntesis.Porejemplo:
.sieax<=100y(ecx|edx)
incebx
.endif
generarlasinstruccionesdecomparacinysaltoqueharqueelbloquedadoparallegar
ejecutadoslocuandoEAXesinferioroigual100yalmismotiempoalmenosunadelas
ECXyEDXnoescero.
Elmacroinstruction.whilegeneralasinstruccionesqueserepetirlaejecucin
elbloquedado(terminconmacroinstruction.endw),siempreycuandolacondicinesverdadera.
Lacondicindebeseguirel.whileypuedeserespecificadoenlamismaformaquepara
la.si.Elparde.repeaty.hastamacroinstruccionesdefinirelbloquequelohar
Pgina127
3.2.ENCABEZADOSEXTENDIDA
serejecutadovariasveceshastaquesecumplalacondicindadaestavezlacondicin
debeseguirelmacroinstruction.hasta,colocadoalfinaldelbloque,como:
.repeat
aadirecx,2
.hastaecx>100
127