Table Of ContentProgramaciónenensambladordela
1/198
arquitecturaIA-32
Programación en ensamblador de la arquitectura IA-32
Universidad Carlos III de Madrid
Programaciónenensambladordela
arquitecturaIA-32
2/198
Copyright©2007UniversidadCarlosIIIdeMadrid
Programaciónenensambladordela
arquitecturaIA-32
3/198
COLABORADORES
TÍTULO: REFERENCE :
Programación en ensamblador de la arquitec-
turaIA-32
ACCIÓN NOMBRE FECHA FIRMA
ESCRITOPOR AbelardoPardo 6demayode2008
HISTORIALDEREVISIONES
NÚMERO FECHA MODIFICACIONES NOMBRE
Programaciónenensambladordela
arquitecturaIA-32
4/198
Índice general
1. Ejecucióndeprogramasenunordenador 15
1.1. Perspectivasdeunordenador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.2. Nivelesdeabstracción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
1.2.1. Estudiodeunprocesadoranivellenguajemáquina . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
1.3. Estructuradeunordenador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
1.4. Definicióndeunprograma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
1.5. Ellenguajeensamblador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
1.5.1. Programaciónenlenguajeensamblador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
1.5.2. Ejecucióndeunprogramaenensamblador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
1.6. Ejecucióndeunprograma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
1.7. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
1.8. Bibliografía . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
2. Codificacióndelainformación 29
2.1. Lógicabinaria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
2.1.1. Propiedadesdeunacodificaciónbinaria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
2.2. Representacióndenúmerosendiferentesbases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
2.2.1. Traduccióndeunnúmeroadiferentesbases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
2.3. Codificacióndenúmerosnaturales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
2.4. Codificaciónenbases8y16 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
2.5. Tamañodeunacodificación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
2.6. Codificacióndenúmerosenteros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
2.7. Codificacióndenúmerosreales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
2.7.1. Desbordamientoenlarepresentaciónencomaflotante . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
2.7.2. ElestándarIEEE754 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
2.8. Representacióndeconjuntosdesímbolos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
2.8.1. Codificacióndecaracteres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
2.8.2. Codificacióndeinstrucciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
2.8.3. Descripcióndeunlenguajemáquina . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
2.9. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
2.10.Bibliografía . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
Programaciónenensambladordela
arquitecturaIA-32
5/198
3. Almacenamientodedatosenmemoria 51
3.1. LamemoriaRAM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
3.2. Operacionessobrememoria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
3.3. Conexiónentrememoriayprocesador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
3.4. Almacenamientodedatos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
3.4.1. Almacenamientodebooleanos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
3.4.2. Almacenamientodecaracteres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
3.4.3. Almacenamientodeenterosynaturales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
3.4.4. Almacenamientodeinstrucciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
3.4.5. Tamañodedatosenoperacionesdelecturayescritura . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
3.5. Almacenamientodetablas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
3.5.1. AlmacenamientodetablasenJava . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
3.6. Almacenamientodedireccionesdememoria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
3.6.1. Ejemplosdeindirección . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
3.7. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
4. ArquitecturaIA-32 72
4.1. ElentornodeejecucióndelaarquitecturaIA-32 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
4.1.1. Espaciodedirecciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
4.1.2. Registrosdepropósitogeneral . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
4.1.3. Registrodeestadoycontrol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
4.1.4. Elregistrocontadordeprograma. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
4.1.5. OtrosregistrosdelaarquitecturaIA-32 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
4.1.6. Estadovisibledeunprograma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
4.2. Ciclodeejecucióndeunainstrucción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
4.2.1. Fasedefetch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
4.2.2. Fasededecodificacióninicial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
4.2.3. Fasededecodificaciónfinal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
4.2.4. Fasedeejecución . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
4.2.5. Fasedeescrituraderesultados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
4.2.6. Ejecucióndeunainstrucción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
4.2.7. Ciclodeejecucionesenprocesadoresactuales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
4.3. Lapila . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
4.3.1. Instruccionesdemanejodelapila . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
4.3.2. Elpunterodepila . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
4.3.3. Valoresinicialesdelpunterodepila . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
4.4. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
Programaciónenensambladordela
arquitecturaIA-32
6/198
5. Juegodeinstrucciones 89
5.1. Tiposdejuegosdeinstrucciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
5.2. FormatodeinstruccionesmáquinadelaarquitecturaIA-32 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
5.3. Ellenguajeensamblador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
5.3.1. Formatodeinstrucciónensamblador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
5.3.2. Descripcióndetalladadelasinstrucciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
5.3.3. Tiposdeoperandos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
5.3.4. Elsufijodetamaño . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
5.4. InstruccionesmásrepresentativasdelaarquitecturaIA-32 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
5.4.1. Instruccionesdetransferenciadedatos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
5.4.2. Instruccionesaritméticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
5.4.2.1. Instruccionesdesumayresta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
5.4.2.2. Instruccionesdemultiplicación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
5.4.2.3. Instruccionesdedivisiónentera . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
5.4.3. Instruccioneslógicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
5.4.4. Instruccionesdedesplazamientoyrotación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
5.4.4.1. Instruccionesdedesplazamiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
5.4.4.2. Instruccionesderotación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
5.4.5. Instruccionesdesalto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
5.4.6. Instruccionesdecomparaciónycomprobación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
5.4.7. Instruccionesdellamadayretornodesubrutina . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
5.5. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
6. Elprogramaensamblador 109
6.1. Creacióndeunprogramaejecutableenensamblador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
6.2. Definicióndedatos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
6.2.1. Definicióndebytes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
6.2.2. Definicióndeenteros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
6.2.3. Definicióndestrings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
6.2.4. Definicióndeespacioenblanco . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
6.3. Usodeetiquetas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
6.4. Gestióndelapila . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
6.5. Desarrollodeprogramasenensamblador. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
6.6. Ejemplodeprogramaenensamblador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
6.7. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
Programaciónenensambladordela
arquitecturaIA-32
7/198
7. ModosdeDireccionamiento 120
7.1. Notación. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
7.2. ModosdeldireccionamientodelaarquitecturaIA-32 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
7.2.1. Modoinmediato . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
7.2.2. Modoregistro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
7.2.3. Modoabsoluto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
7.2.4. Modoregistroindirecto. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
7.2.5. Modoauto-incremento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
7.2.6. Modoauto-decremento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
7.2.7. Modobase+desplazamiento. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
7.2.8. Modobase+índice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
7.2.9. Modoíndiceescalado+desplazamiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
7.2.10. Modobase+índiceescalado+desplazamiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
7.2.11. Utilizacióndelosmodosdedireccionamiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
7.3. Hardwareparaelcálculodeladirecciónefectiva . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
7.4. Resumendelosmodosdedireccionamiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
7.5. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
8. Construccionesdealtonivel 141
8.1. Desarrollodeaplicacionesenmúltiplesficheros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
8.2. Programasenmúltiplesficheros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
8.3. Traduccióndeconstruccionesdealtonivelaensamblador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
8.3.1. Traduccióndeunif/then/else . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
8.3.2. Traduccióndeunswitch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
8.3.3. Traduccióndeunbuclewhile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
8.3.4. Traduccióndeunbuclefor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
8.4. Ejecucióndesubrutinas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
8.4.1. Lasinstruccionesdellamadayretornodeunasubrutina . . . . . . . . . . . . . . . . . . . . . . . . . . 152
8.4.2. Pasodeparámetrosydevoluciónderesultados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
8.4.2.1. Pasodeparámetrosatravésderegistro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
8.4.2.2. Pasodeparámetrosatravésdememoria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
8.4.2.3. Pasodeparámetrosatravésdelapila . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
8.4.2.4. Almacenamientodevariableslocalesaunasubrutina . . . . . . . . . . . . . . . . . . . . . . 157
8.5. Gestióndelbloquedeactivación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
8.6. Ejemplodeevolucióndelbloquedeactivación. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
8.7. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
Programaciónenensambladordela
arquitecturaIA-32
8/198
A. SubconjuntodeinstruccionesdelaarquitecturaIA-32 165
A.1. Nomenclatura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
A.2. Instruccionesdemovimientodedatos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
A.2.1. MOV:Movimientodedatos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
A.2.2. PUSH:Instruccióndecargasobrelapila . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
A.2.3. POP:Instruccióndedescargadelapila . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
A.2.4. XCHG:Instruccióndeintercabmio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
A.3. Instruccionesaritméticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
A.3.1. ADD:Instruccióndesuma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
A.3.2. SUB:Instrucciónderesta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
A.3.3. INC:Instruccióndeincremento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
A.3.4. DEC:Instruccióndedecremento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
A.3.5. NEG:Instruccióndecambiodesigno . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
A.3.6. MUL:Instruccióndemultiplicaciónsinsigno . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
A.3.7. DIV:Instruccióndedivisiónsinsigno . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170
A.3.8. IMUL:Instruccióndemultiplicaciónconsigno . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170
A.3.9. IDIV:Instruccióndedivisiónconsigno . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
A.4. Instruccioneslógicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172
A.4.1. AND:Instruccióndeconjunción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172
A.4.2. OR:Instruccióndedisyunción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
A.4.3. XOR:Instruccióndedisyunciónexclusiva . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
A.4.4. NOT:Instruccióndenegación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
A.5. Instruccionesdedesplazamiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
A.5.1. SAL/SAR:Desplazamientoaritmético . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
A.5.2. SHL/SHR:Desplazamientológico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
A.5.3. RCL/RCR:Instrucciónderotaciónconacarreo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176
A.5.4. ROR/ROL:Instrucciónderotaciónsinacarreo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
A.6. Instruccionesdesalto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
A.6.1. JMP:Instruccióndesaltoincondicional . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
A.6.2. Jcc:Instruccionesdesaltocondicional . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
A.6.3. CALL:Instruccióndellamadaasubrutina . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
A.6.4. RET:Instrucciónderetornodesubrutina . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
A.7. Instruccionesdecomparaciónycomprobación. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
A.7.1. CMP:Instruccióndecomparación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
A.7.2. TEST:Instruccióndecomprobación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
Programaciónenensambladordela
arquitecturaIA-32
9/198
B. Eldepurador 182
B.1. Arranqueyparadadeldepurador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
B.2. Visualizacióndecódigo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186
B.3. Ejecucióncontroladadeunprograma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186
B.4. Visualizacióndedatos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
B.5. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192
B.6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193
C. LicenciaCreativeCommons 194
Programaciónenensambladordela
arquitecturaIA-32
10/198
Índice de figuras
1.1. Perspectivadelprogramador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
1.2. Perspectivadeldiseñador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
1.3. Diferentesperspectivasdeunordenador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
1.4. Relaciónentrelosnivelesdeabstracción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
1.5. Estructuradeunordenador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
1.6. CreacióndeunejecutableenJava . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
1.7. Creacióndeunejecutableapartirdeunprogramaenlenguajeensamblador . . . . . . . . . . . . . . . . . . . . 24
1.8. Introducciónelcomandoprograma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
1.9. Copiadelejecutabledediscoamemoria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
1.10.Ejecucióndelaprimerainstruccióndeunprograma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
2.1. Rangodeenteroscodificadospor8bitsensignoymagnitud . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
2.2. Rangodeenteroscodificadospor8bitsencomplementoa2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
2.3. Estructuradelarepresentaciónbinariaencomaflotante . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
2.4. Estructuradelasinstruccionesdeual-1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
2.5. Formatodecodificacióndelconjuntoual-1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
2.6. Ejemplodecodificacióndeinstrucción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
2.7. Estructuradelasinstruccionesdeual-2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
2.8. Estructuradelacorrespondenciadeual-2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
2.9. Codificacióndelosoperandosenual-3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
2.10.Formatodelacodificacióndeual-3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
3.1. EstructuradelamemoriaRAM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
3.2. Operacionessobrememoria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
3.3. Señalesqueconectanelprocesadorylamemoria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
3.4. MemoriarealyposibleenunprocesadorconarquitecturaIA-32 . . . . . . . . . . . . . . . . . . . . . . . . . . 56
3.5. Almacenamientodebooleanos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
3.6. Almacenamientodeunstring . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
3.7. Almacenamientodeenterosenmemoria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
3.8. Interpretacióndebytesenlittleendianybigendian . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
3.9. Almacenamientodeinstruccionesenformatofijoyvariable . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
Description:142. 8.3. Traducción de construcciones de alto nivel a ensamblador . Creación de un ejecutable a partir de un programa en lenguaje ensamblador . Para el desarrollo de aplicaciones avanzadas sobre un procesador de estas características sí es preciso tener un conocimiento más profundo de