Está en la página 1de 117

Pgina1

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

También podría gustarte