sistemas electr onicos para el tratamiento de la informaci on 1jesman/bigseti/seti1/protegido/...la...

234
Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1 Jesus M. Hern´ andez Mangas 10 de enero de 2011

Upload: others

Post on 20-Jan-2021

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Sistemas Electronicos para el

Tratamiento de la Informacion 1

Jesus M. Hernandez Mangas

10 de enero de 2011

Page 2: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

2

Copyright c⃝Jesus M. Hernandez Mangas, 2004, 2005, 2006, 2007, 2008,

2009, 2010, 2011

Profesor Titular de Electronica en la Universidad de Valladolid

No esta permitida la reproduccion total o parcial de este libro, ni su tra-

tamiento informatico, ni la transmision de ninguna forma o por cualquier

medio, ya sea electronico, mecanico, por fotocopia, por registro u otros

metodos, sin el permiso previo y por escrito de los titulares del Copyright.

Page 3: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Indice general

Prologo 9

1. Introduccion 13

1.1. Nociones generales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

1.2. ¿Que es un microprocesador? . . . . . . . . . . . . . . . . . . . . . . . . . 15

1.3. Microprocesadores RISC y CISC . . . . . . . . . . . . . . . . . . . . . . . . 19

2. Arquitectura Intel. Nivel aplicacion 31

2.1. Entorno basico de ejecucion . . . . . . . . . . . . . . . . . . . . . . . . . . 31

2.1.1. Modos de operacion . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

2.1.2. Organizacion de la memoria . . . . . . . . . . . . . . . . . . . . . . 32

2.1.3. Registros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

2.1.4. Tipos de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

2.1.5. Modos de direccionamiento . . . . . . . . . . . . . . . . . . . . . . . 39

2.2. Repertorio basico de instrucciones . . . . . . . . . . . . . . . . . . . . . . . 40

2.2.1. Transferencia de datos . . . . . . . . . . . . . . . . . . . . . . . . . 40

2.2.2. Aritmeticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45

2.2.3. Aritmetica BCD . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47

2.2.4. Logicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48

2.2.5. Desplazamientos y rotaciones . . . . . . . . . . . . . . . . . . . . . 48

2.2.6. Manejo de bits o byte . . . . . . . . . . . . . . . . . . . . . . . . . 51

2.2.7. Transferencia de control . . . . . . . . . . . . . . . . . . . . . . . . 52

2.2.8. Manejo de bloques de datos . . . . . . . . . . . . . . . . . . . . . . 56

2.2.9. Control de FLAGS . . . . . . . . . . . . . . . . . . . . . . . . . . . 58

2.2.10. Acceso a registros de segmento . . . . . . . . . . . . . . . . . . . . 59

2.2.11. Miscelanea . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59

3

Page 4: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

4 INDICE GENERAL

3. Unidad de punto flotante (FPU) 61

3.1. Introduccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61

3.2. Tipos de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61

3.2.1. Numeros reales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61

3.2.2. Numeros enteros . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62

3.2.3. Numeros reales especiales . . . . . . . . . . . . . . . . . . . . . . . 63

3.3. Arquitectura de la FPU . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64

3.3.1. Pila de registros de datos . . . . . . . . . . . . . . . . . . . . . . . . 64

3.3.2. Registro de estado (Status Word: SW) . . . . . . . . . . . . . . . . 64

3.3.3. Registro de control (Control Word: CW) . . . . . . . . . . . . . . . 66

3.3.4. Registro de marcas (Tag Word: TW) . . . . . . . . . . . . . . . . . 67

3.3.5. Punteros de operandos e instrucciones . . . . . . . . . . . . . . . . 67

3.4. Repertorio de instrucciones . . . . . . . . . . . . . . . . . . . . . . . . . . . 68

3.4.1. Transferencia de datos . . . . . . . . . . . . . . . . . . . . . . . . . 68

3.4.2. Aritmeticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69

3.4.3. De comparacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71

3.4.4. Funciones trigonometricas . . . . . . . . . . . . . . . . . . . . . . . 71

3.4.5. Otras funciones trascendentales . . . . . . . . . . . . . . . . . . . . 72

3.4.6. Carga de constantes . . . . . . . . . . . . . . . . . . . . . . . . . . 72

3.4.7. Control de la FPU . . . . . . . . . . . . . . . . . . . . . . . . . . . 72

3.4.8. Resumen de instrucciones . . . . . . . . . . . . . . . . . . . . . . . 74

4. Tecnologıa MMX 75

4.1. Introduccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75

4.2. Registros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75

4.3. Tipos de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76

4.4. Modelo de ejecucion SIMD . . . . . . . . . . . . . . . . . . . . . . . . . . . 76

4.5. Formato de los datos en memoria . . . . . . . . . . . . . . . . . . . . . . . 77

4.6. Saturacion y wraparound (enrollamiento) . . . . . . . . . . . . . . . . . . . 77

4.7. Conjunto de instrucciones . . . . . . . . . . . . . . . . . . . . . . . . . . . 78

4.7.1. Transferencia de datos . . . . . . . . . . . . . . . . . . . . . . . . . 78

4.7.2. Aritmeticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78

4.7.3. De comparacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79

4.7.4. De conversion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79

4.7.5. Logicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80

4.7.6. Desplazamiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81

Page 5: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

INDICE GENERAL 5

4.7.7. Instruccion EMMS . . . . . . . . . . . . . . . . . . . . . . . . . . . 81

4.7.8. Resumen de instrucciones . . . . . . . . . . . . . . . . . . . . . . . 82

5. Arquitectura INTEL

(Nivel Sistema) 83

5.1. Introduccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83

5.2. Modos de operacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84

5.3. Entorno de ejecucion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86

5.3.1. Bits del sistema (EFLAGS) . . . . . . . . . . . . . . . . . . . . . . 86

5.3.2. Registros para la gestion de la memoria . . . . . . . . . . . . . . . . 87

5.3.3. Registros de control . . . . . . . . . . . . . . . . . . . . . . . . . . . 88

5.4. Instrucciones a nivel del sistema . . . . . . . . . . . . . . . . . . . . . . . . 91

5.4.1. Carga y almacenamiento en registros del sistema. . . . . . . . . . . 91

5.4.2. Verificacion de los privilegios de acceso . . . . . . . . . . . . . . . . 92

5.4.3. Carga y almacenamiento en registros de depuracion . . . . . . . . . 92

5.4.4. Invalidacion de caches y TLBs . . . . . . . . . . . . . . . . . . . . . 93

5.4.5. Control del procesador . . . . . . . . . . . . . . . . . . . . . . . . . 93

5.4.6. Contadores de Monitorizacion del Rendimiento . . . . . . . . . . . 93

6. La memoria en modo protegido 95

6.1. Introduccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95

6.2. Segmentacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97

6.2.1. Modelos de memoria . . . . . . . . . . . . . . . . . . . . . . . . . . 97

6.2.2. Direcciones logicas, lineales y fısicas . . . . . . . . . . . . . . . . . . 98

6.2.3. Registros selectores de segmento . . . . . . . . . . . . . . . . . . . . 99

6.2.4. Tablas de Descriptores de segmento . . . . . . . . . . . . . . . . . . 100

6.2.5. Descriptores de segmento . . . . . . . . . . . . . . . . . . . . . . . . 100

6.3. Paginacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103

6.3.1. Paginacion normal . . . . . . . . . . . . . . . . . . . . . . . . . . . 103

6.3.2. Extension del direccionamiento fısico . . . . . . . . . . . . . . . . . 107

7. Proteccion en el acceso a memoria 111

7.1. Introduccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111

7.2. Proteccion en la segmentacion . . . . . . . . . . . . . . . . . . . . . . . . . 112

7.2.1. Acceso a segmentos de datos . . . . . . . . . . . . . . . . . . . . . . 113

7.2.2. Acceso a segmentos de codigo . . . . . . . . . . . . . . . . . . . . . 113

7.3. Proteccion en la paginacion . . . . . . . . . . . . . . . . . . . . . . . . . . 118

Page 6: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

6 INDICE GENERAL

8. Gestion de interrupciones y excepciones 121

8.1. Introduccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121

8.1.1. Clasificacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122

8.1.2. Vectores de interrupcion y excepcion . . . . . . . . . . . . . . . . . 123

8.1.3. Prioridades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123

8.2. Gestion en modo real . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124

8.2.1. Tabla de Vectores de Interrupcion . . . . . . . . . . . . . . . . . . . 124

8.2.2. Funcionamiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124

8.2.3. Ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126

8.3. Gestion en modo protegido . . . . . . . . . . . . . . . . . . . . . . . . . . . 127

8.3.1. Tabla de Descriptores de Interrupcion: IDT . . . . . . . . . . . . . 127

8.3.2. Funcionamiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128

8.3.3. Habilitacion y deshabilitacion . . . . . . . . . . . . . . . . . . . . . 130

9. Gestion de tareas 133

9.1. Introduccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133

9.2. Estructuras de datos de una Tarea . . . . . . . . . . . . . . . . . . . . . . 133

9.3. Funcionamiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138

10.Estado inicial y gestion del procesador 141

10.1. Estado inicial del microprocesador . . . . . . . . . . . . . . . . . . . . . . . 141

10.1.1. Introduccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141

10.1.2. Estado inicial de los registros . . . . . . . . . . . . . . . . . . . . . 142

10.2. Gestion del microprocesador . . . . . . . . . . . . . . . . . . . . . . . . . . 144

10.2.1. Conmutacion a modo de funcionamiento protegido . . . . . . . . . . 144

10.2.2. Ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145

10.2.3. Conmutacion a modo real . . . . . . . . . . . . . . . . . . . . . . . 148

11.Depuracion y monitorizacion 149

11.1. Depuracion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149

11.1.1. Registros de depuracion . . . . . . . . . . . . . . . . . . . . . . . . 150

11.1.2. Excepciones de depuracion . . . . . . . . . . . . . . . . . . . . . . . 153

11.1.3. MSRs para depuracion . . . . . . . . . . . . . . . . . . . . . . . . . 154

11.2. Monitorizacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155

11.2.1. Time-stamp counter . . . . . . . . . . . . . . . . . . . . . . . . . . 155

11.2.2. Monitorizacion del sistema . . . . . . . . . . . . . . . . . . . . . . . 156

Page 7: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

INDICE GENERAL 7

A. Sistemas de numeracion 157

A.1. Decimal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157

A.2. Binario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157

A.3. Hexadecimal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158

A.4. Trabajando con enteros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158

A.4.1. Representacion de los enteros . . . . . . . . . . . . . . . . . . . . . 158

B. Codigos ASCII 161

C. Problemas 163

C.1. Aritmetica extendida: producto de 64 bits . . . . . . . . . . . . . . . . . . 163

C.2. Aritmetica extendida: producto de 64 bits, (2) . . . . . . . . . . . . . . . . 165

C.3. Comparacion de cadenas de datos . . . . . . . . . . . . . . . . . . . . . . . 168

C.4. Evaluacion de un polinomio . . . . . . . . . . . . . . . . . . . . . . . . . . 171

C.5. Hallar los ceros de una funcion . . . . . . . . . . . . . . . . . . . . . . . . . 173

C.6. Reloj . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176

D. Problemas FPU 181

D.1. Modulo de un vector . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181

D.2. Funcion exponencial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183

D.3. Toma de decisiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185

D.4. Factorial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186

D.5. Funciones trigonometricas hiperbolicas . . . . . . . . . . . . . . . . . . . . 189

D.6. Polinomios de Legendre . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192

D.7. Velocımetro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195

D.8. Tecnica CORDIC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198

D.9. Calculo del arco tangente . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202

E. 3D Now! 207

F. Extensiones SSE: Streaming SIMD Extensions 209

F.1. Introduccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209

F.2. Conjunto de instrucciones . . . . . . . . . . . . . . . . . . . . . . . . . . . 210

F.2.1. Transferencia de datos . . . . . . . . . . . . . . . . . . . . . . . . . 210

F.2.2. Aritmeticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211

F.2.3. De comparacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211

F.2.4. De entremezclado y empaquetamiento . . . . . . . . . . . . . . . . 212

F.2.5. Logicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212

Page 8: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

8 INDICE GENERAL

F.2.6. De conversion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212

F.2.7. De administracion del registro de estado (MXCSR) . . . . . . . . . 213

F.2.8. Instrucciones con enteros . . . . . . . . . . . . . . . . . . . . . . . . 213

F.2.9. Otras instrucciones . . . . . . . . . . . . . . . . . . . . . . . . . . . 214

G. Extensiones SSE2: Streaming SIMD Extensions 2 215

G.1. Introduccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215

G.2. Conjunto de instrucciones . . . . . . . . . . . . . . . . . . . . . . . . . . . 215

G.2.1. Transferencia de datos . . . . . . . . . . . . . . . . . . . . . . . . . 215

G.2.2. Aritmeticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216

G.2.3. De comparacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216

G.2.4. De entremezclado y empaquetamiento . . . . . . . . . . . . . . . . 216

G.2.5. Logicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217

G.2.6. De conversion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217

G.2.7. Instrucciones con paquetes de datos en punto flotante de simple

precision . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218

G.2.8. Instrucciones con enteros . . . . . . . . . . . . . . . . . . . . . . . . 218

H. Extensiones SSE3: Streaming SIMD Extensions 3 221

H.1. Introduccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221

H.2. Conjunto de instrucciones . . . . . . . . . . . . . . . . . . . . . . . . . . . 221

H.2.1. De carga o de movimiento o de duplicado . . . . . . . . . . . . . . . 221

H.2.2. De suma o resta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221

H.2.3. De suma o resta en procesamiento paralelo . . . . . . . . . . . . . . 222

I. Extensiones SSE3 suplementarias: Supplemental Streaming SIMD Ex-

tensions 3 223

I.1. Introduccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223

J. Extensiones SSE4: Streaming SIMD Extensions 4 225

J.1. Introduccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225

K. Modo de Gestion del Sistema (SMM) 227

K.1. Introduccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227

K.2. Interrupcion de Gestion del Sistema . . . . . . . . . . . . . . . . . . . . . . 227

K.3. Conmutacion de modos de operacion . . . . . . . . . . . . . . . . . . . . . 227

K.4. SMRAM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228

K.5. Entorno de ejecucion de la rutina SMI . . . . . . . . . . . . . . . . . . . . 228

Page 9: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

INDICE GENERAL 9

Indice alfabetico 229

Bibliografıa 233

Page 10: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

10 INDICE GENERAL

Page 11: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Prologo

Proposito

El proposito de este libro es, como el de todos los libros, dar a conocer un tema apa-

sionante. El autor, en su dilatada trayectoria en la Universidad de Valladolid impartiendo

la asignatura de Sistemas Electronicos para el Tratamiento de la Informacion 1, ha re-

copilado sus apuntes de clase y los problemas resueltos en esta obra con el objetivo de

que pueda ser utilizada como obra de referencia en la ensenanza de esta asignatura en la

Titulacion de Ingeniero en Electronica y, con las modificaciones pertinentes, en otras.

Dado que los Ingenieros en su trabajo van a utilizar obligatoriamente referencias bi-

bliograficas escritas en ingles, se ha creıdo conveniente mantener la notacion inglesa en

la mayorıa de las siglas y en algunas descripciones de banderas (flags) de los registros

empleados.

Agradecimientos

El autor quiere agradecer la colaboracion en la redaccion y revision del libro a la

doctora Ruth Pinacho Gomez y al doctor Ignacio Martın Bragado.

Este libro ha sido realizado gracias, en parte, a la financiacion de la Junta de Castilla

y Leon (Ayuda para la Elaboracion de Recursos de Apoyo y Experiencias Innovadoras en

la Ensenanza Universitaria, UV19/03)

Valladolid, 10 de enero de 2011

11

Page 12: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

12 INDICE GENERAL

Page 13: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Capıtulo 1

Introduccion

1.1. Nociones generales

La evolucion actual de la Ciencia y la Tecnologıa esta orientada hacia el Tratamiento

de la Informacion mediante Sistemas Electronicos. El mundo real es un mundo analogico

del que se toma la informacion a traves de los convertidores mas apropiados. Tambien

se toma informacion de otros sistemas digitales. La informacion es tratada digitalmente

mediante el sistema electronico y posteriormente es comunicada a otros sistemas digitales

o mediante los convertidores apropiados pasa al mundo analogico real.

10101010...

Sistema Electronico

Mundo Analogico

Mundo Digital

Entrada Salida

CPU

13

Page 14: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

14 Nociones generales

Tratamiento de la Informacion

Los tipos de tratamiento de la informacion admiten algunas clasificaciones

Atendiendo a la inmediatez del procesado de la informacion pueden ser:

• On-line. Es el procesado realizado en el momento. La salida del procesado

esta disponible un tiempo despues de proporcionarle las entradas al sistema.

Este tiempo de procesado es un tiempo acotado.

• Off-line. Es el procesado realizado cuando no es posible dar una respuesta

inmediata, por carecer de todos los datos o porque el calculo es muy complejo.

Atendiendo al dominio en el que se encuentran los datos:

• En el dominio del tiempo. Los datos son obtenidos al transcurrir el tiempo.

• En el dominio de la frecuencia. Los datos son procesados y convertidos al

dominio de la frecuencia mediante una transformada de Fourier.

• Espacialmente. Los datos son obtenidos en diferentes puntos del espacio.

Sistemas Electronicos

Los sistemas electronicos que se pueden emplear pueden ser:

Microprocesadores de proposito general.

Microcontroladores. Especializados en el control de sistemas.

ASICs (Application Specific Integrated Circuits). Son disenos hechos a la medida del

problema.

DSPs (Digital Signal Processors). Son procesadores especializados en el tratamiento

de senales de forma muy repetitiva.

Procesadores paralelos. Son disenos que usan un conjunto de procesadores funcio-

nando en paralelo. Se usan cuando los tratamientos a realizar son muy costosos. En

ese caso el problema se divide entre un conjunto de procesadores funcionando en

paralelo.

En esta ocasion vamos a estudiar los microprocesadores de proposito general. Existen

varias familias disenadas por distintos fabricantes1: Intel, Motorola, Alpha, MIPS, Sparc,

1Las marcas relacionadas son propiedad de sus respectivos duenos.

Page 15: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Capıtulo 1. Introduccion 15

PowerPC, etc. En particular vamos a estudiar los microprocesadores correspondientes a

la arquitectura Intel de 32 bits2.

1.2. ¿Que es un microprocesador?

Es la parte del ordenador o sistema electronico para el tratamiento de la informacion

que realiza el procesamiento de unos datos que residen en una memoria o que provienen

de puertos de entrada/salida (E/S), es decir, que hace calculos (CPU:Central Process

Unit tambien conocida como Unidad Central de Proceso). Es un circuito programable

que ejecuta un programa almacenado en una memoria.

Bus de Direcciones

Bus de Datos

Bus de Control

Microprocesador

Memoria Entrada/Salida

Digital

Analogico

Unidad de Proceso

Unidad de Control

Regs ALU

Sistema Electronico

El microprocesador esta compuesto de:

Unidad de Proceso (Datapath). Es la parte que realiza las operaciones (ALU:Arithmetic

Logic Unit) y que contiene los registros.

Unidad de Control. Es la parte que implementa el control del microprocesador.

Donde esta definido el comportamiento de las instrucciones, los modos de direccio-

namiento que se pueden emplear y los tipos de datos que se manejan de acuerdo

con la implementacion de la Unidad de Proceso.

2Esta arquitectura (IA32) incluye los microprocesadores de Intel aparecidos hasta el momento inclu-

yendo: Pentium, Pentium II, Pentium III, Pentium 4. La arquitectura Intel de 64 bits (IA64: Itanium,

Itanium 2) mantiene un modo compatible con la Intel Architecture for 32 bits (IA32).

Page 16: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

16 ¿Que es un microprocesador?

Arquitecturas del Sistema

Arquitectura Harvard. Consiste en tener una memoria para almacenar el programa

y otra memoria diferente para almacenar los datos, eso sı accediendo mediante buses

diferenciados. Es una arquitectura mas rapida y dado que tiene mas componentes

mas cara. Se utiliza fundamentalmente en los Procesadores de Senal Digitales (DSP)

y algunos microcontroladores.

Memoria

de

Programa

Memoria

de

DatosCPU

8 14

H a r v a r d

Arquitectura Von Neumann. Consiste en emplear la misma memoria para almacenar

las instrucciones y los datos. Es la arquitectura convencional en los microprocesa-

dores de proposito general. Es mas barata y mas lenta que la anterior.

Memoria

de

Datos y

Programa

CPU8

von Neumann

Registros

Los registros son las memorias mas rapidas que nos encontramos en el sistema basado

en microprocesador. Es importante conocer la funcionalidad especıfica de cada uno de

ellos. Cuantos mas registros existan, mas facil sera la programacion y mas rapida la

ejecucion de los programas. Algunos de los registros que nos podemos encontrar:

Contador de programa o puntero de instruccion. Se necesita llevar la cuenta de donde

se llega en la ejecucion de un programa (PC: Program Counter o IP: Instruction

Pointer)

Page 17: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Capıtulo 1. Introduccion 17

Registros para almacenar datos y/o direcciones. Son los mas abundantes. Algunos

podran tener funcionalidades especıficas.

Registros de estado y control. Importantes para cambiar el orden de ejecucion de

las instrucciones.

Ocultos. De instruccion, cache, temporales, etc.

Programas

Los programas que ejecutan los microprocesadores suelen estar divididos en tres sec-

ciones fundamentales que son:

Seccion de Codigo. Es donde se coloca el programa que va a ser ejecutado.

Seccion de Datos. Donde se situan las variables, tablas de datos, etc., que va a

manejar el programa.

Seccion de Pila. Es una zona especial que permite almacenar datos de forma dinami-

ca en forma de pila LIFO (Last In, First Out ), que significa que el ultimo dato en

entrar es el primero en salir. Existe un conjunto de registros que apuntan a la cima

de la pila (notar que en la mayorıa de los microprocesadores las pilas crecen hacia

posiciones de memoria decrecientes). La operacion PUSH introduce un dato en la pila

y la operacion POP extrae un dato de la misma.

Memoria Memoria

Puntero de pila

PUSH

POP

Dato 1 Dato 1Dato 2

Dato 3 Dato 3Dato 4Dato 5Dato 6

Dato 2

0

Lo interesante sera que las tres secciones de codigo se mantengan separadas sin solapa-

mientos de unas sobre otras. De esta manera se consigue hacer mas legibles los programas

y se evitan problemas y errores.

Page 18: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

18 ¿Que es un microprocesador?

Instrucciones

Las instrucciones que implementa un microprocesador deben permitir la resolucion

de todos los problemas, ya que son de proposito general. Aun ası, hay CPUs mejores y

peores desde el punto de vista del ingeniero software ya que un conjunto muy amplio de

instrucciones facilita la programacion. Entre las instrucciones basicas que debe incorporar

un microprocesador estan las siguientes:

Aritmeticas (+, -, *, /) y logicas (AND, OR, NOT, XOR).

Transferencia: leer y escribir en la memoria, leer y escribir en un puerto de E/S,

introducir y extraer datos de la pila.

Control de programa: saltos condicionales e incondicionales, llamadas a subrutinas,

retornos de subrutinas.

Control del microprocesador: parada, interrupcion, coprocesadores.

Modos de direccionamiento

Es la forma en la que especificamos la direccion en memoria de un dato.

Inmediato: el dato sigue a la instruccion. MOV AX,234.

Directo a registro. MOV AX,BX.

Directo: se especifica la direccion siguiendo a la instruccion. MOV AX,[1234].

Indirecto: la direccion se encuentra en un registro. MOV AX,[BX].

Indirecto con desplazamiento. MOV AX,[BX+12].

Etc.

Tipos de datos

Datos enteros. Sin signo o con signo en complemento a dos3.

• Bit. Es la cantidad mınima de informacion. La palabra bit viene de la con-

traccion de otras dos: Binary digIT, que significa dıgito binario.

• Nibble. Conjunto de 4 bits.

3Ver Apendice A.

Page 19: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Capıtulo 1. Introduccion 19

• BYTE. Conjunto de 8 bits. Es la unidad estandar para la medicion de la cantidad

de memoria. En algunos microprocesadores esto no es ası.

• WORD. Palabra4 o conjunto de 16 bits.

• DWORD. Conjunto de 32 bits.

• QWORD. Conjunto de 64 bits.

Datos en punto flotante. Con exponente y mantisa. El valor se suele calcular como

≈ Mantisa ∗ 2Exponente

Datos vectoriales. Tanto con componentes enteras como de punto flotante.

Orden de los bytes en memoria

Es importante conocer el orden de almacenamiento de los datos en memoria sobretodo

cuando pasamos informacion de un tipo de arquitectura a otro.

Little endian. Se almacena primero el LSByte (Least Significant Byte: byte menos

significativo) y luego el MSByte (Most Significant Byte: byte mas significativo). Es

tıpico en las arquitecturas de Intel.

Big endian. Se almacena primero el MSByte y luego el LSByte. Es tıpico de

Motorola.

; El dato escrito en base hexadecimal 12345678h; se almacenara como:; Direccion: 0 1 2 3; Little endian 78h 56h 34h 12h; Big endian 12h, 34h, 56h, 78h

1.3. Microprocesadores RISC y CISC

Las diferencias fundamentales entre las arquitecturas CISC y RISC se muestran a con-

tinuacion:

4Las palabras en otros microprocesadores suelen coincidir con la anchura del bus de datos que a su

vez puede coincidir con la anchura de la unidad logico-aritmetica. En la arquitectura Intel por motivos

historicos seguimos llamando palabra al conjunto de 16 bits aun cuando sabemos que trabajamos con un

microprocesador de 32 bits.

Page 20: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

20 Microprocesadores RISC y CISC

Procesadores CISC Procesadores RISC

Complex Instruction Reduced Instruction

Set Computing Set Computing

Conjunto de instrucciones complejo.

Muchos modos de direccionamiento

complejos.

Microprogramados.

Pocos registros: algunos especializa-

dos. Los resultados temporales se al-

macenan en memoria: mas lenta.

Complicado hacer pipelining (seg-

mentacion de instrucciones).

Ej: 80x86, 680x0, Z8000.

Conjunto de instrucciones sencillo,

pero muy optimizadas.

Pocos modos de direccionamiento.

Logica cableada.

Muchos registros ortogonales: todos

son iguales.

Uso generalizado del pipelining.

Ej:

SPARC, PA-RISC, ALPHA, R4000.

Un ejemplo:

CISC

Pentium (INTEL)

3,1 ∗ 106 transistores

8 registros 32 bit (enteros)

8 registros 80 bit (pto. flotante)

fmax = 1 GHz (Ano 2000)

RISC

ALPHA (DEC) 21064

1,68 ∗ 106 transistores

32 registros 64 bit (enteros)

32 registros 64 bit (pto. flotante)

fmax = 1 GHz (Ano 2000)

Los microprocesadores actuales cada vez son mas hıbridos y es mas difıcil clasificarlos.

Pipelining: Segmentacion de la ejecucion de instrucciones

La ejecucion de las instrucciones se divide en varias etapas independientes que se eje-

cutan en diferentes secciones del microprocesador. En un momento determinado se tienen

varias instrucciones ejecutandose al mismo tiempo (como en una cadena de produccion)

Ejemplo:

Page 21: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Capıtulo 1. Introduccion 21

Busqueda de instruccion.

Decodificacion de la instruccion.

Busqueda de datos.

Ejecucion de la instruccion.

A modo de ejemplo ponemos el largo pipelining que incluye el microprocesador Pentium

4 comparado con el del Pentium III:

11 22 33 44 55 66 77 88 99 1010

FetchFetch FetchFetch DecodeDecode DecodeDecode DecodeDecode RenameRename ROB RdROB Rd RdyRdy/Sch/Sch DispatchDispatch ExecExec

Basic Pentium III Processor Basic Pentium III Processor MispredictionMisprediction Pipeline Pipeline

Basic Pentium 4 Processor Basic Pentium 4 Processor MispredictionMisprediction Pipeline Pipeline

11 22 33 44 55 66 77 88 99 1010 1111 1212

TC TC Nxt Nxt IPIP TC FetchTC Fetch DriveDrive AllocAlloc RenameRename QueQue SchSch SchSch SchSch

1313 1414

DispDisp DispDisp

1515 1616 1717 1818 1919 2020

RFRF ExEx FlgsFlgs Br CkBr Ck Drive DriveRF RF

Introduccion historica a la arquitectura Intel

Nota5

1971 Intel 4004. Primer microprocesador. Arquitectura de 4 bits. 2.300 transistores. 108

kHz.

1972 Intel 8008. De 8 bits. Con 3.500 transistores.

1974 Intel 8080, 8085. De 8 bits. Con 6.000 transistores.

1978 Intel 8086, 8088. De 16 bits. Con 29.000 transistores. Es el microprocesador que in-

cluıan los primeros ordenadores PC (Personal Computer). Con un bus de direcciones

de 20 bits (1MB). Funcionamiento en modo real.

1982 Intel 80286. De 16 bits. Con 134.000 transistores. Con un bus de direcciones de 24

bits (16MB). Permite la memoria virtual e implementa mecanismos de proteccion.

Anade el modo protegido.

1985 Intel 80386. Con 275.000 transistores. Es de 32 bits. Con un bus de direcciones de

32 bits (4GB). Incorpora la paginacion de la memoria.

5Ver presentacion en http://www.intel.com/about/companyinfo/museum/archives/timeline.htm

Page 22: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

22 Microprocesadores RISC y CISC

1989 Intel 80486. Con 1’2 millones de transistores. Ejecuta una instruccion por ciclo

de reloj. Usa un pipeline de 5 etapas. Incorpora 8KB de cache de primer nivel

(L1) dentro del circuito integrado (on-chip). Incorpora el coprocesador matematico.

Incluye soporte para cache de nivel 2 (L2) y multiprocesador.

1993 Pentium. Con 3’1 millones de transistores. Arquitectura super-escalar con dos uni-

dades de ejecucion segmentadas (U y V). Ejecuta 2 instrucciones por ciclo de reloj.

Incorpora dos caches de nivel 1 (8KB para instrucciones y 8KB para datos). Imple-

menta el protocolo MESI para gestion de la cache. Incorpora la prediccion de saltos.

Mejora la paginacion con paginas de 4KB y 4MB. Las unidades de proceso inter-

namente tienen 128/256 bits. El bus externo de datos es de 64 bits transmitiendo a

rafagas. Integra el APIC (Advanced Programmable Interrupt Controller).

1995 Pentium Pro. Con 5’5 millones de transistores. Arquitectura super-escalar de 3

vias. Ejecuta 3 instrucciones por ciclo de reloj de promedio. Incorpora la ejecucion

dinamica de instrucciones, que incluye el analisis por flujo de datos, la ejecucion de

instrucciones desordenada, la prediccion de saltos mejorada y la ejecucion especu-

lativa. Dispone de un pipeline de 12 etapas y de 5 unidades de ejecucion: 2 ALU

enteras, 2 FPU flotantes y 1 de interfaz de memoria. Tambien incorpora 256 KB de

cache L2 dentro del circuito integrado. El bus de direcciones se extiende a 36 bits

(64GB) a traves de la paginacion.

1997 Pentium II. Incluye la ampliacion de instrucciones MMX.

1999 Pentium III. Con 8’2 millones de transistores. Incluye la extension SSE (Streaming

SIMD Extensions) con mas registros (de 128 bits) e instrucciones vectoriales en

punto flotante de precision sencilla. Incorpora el numero de serie (96 bits) unico en

cada procesador.

2000 Pentium 4. Con 42 millones de transistores. Incorpora la extension SSE2. Con

caches L2 de hasta 1MB.

2001 Itanium. Arquitectura Intel de 64 bits. No disponible comercialmente en Espana.

2003 Itanium 2. Arquitectura Intel de 64 bits.

2004 Pentium 4 HT (Hyper Threading) EMT64 (Extended Memory Technology). Fa-

bricado con una tecnologıa de 90 nm. Funciona a 2.8 GHz. En septiembre de 2005

alcanza los 3.8 GHz. Tiene 125 millones de transistores. Su nombre de desarrollo

fue Prescott. Incorpora el nuevo subconjunto de instrucciones SSE3.

Page 23: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Capıtulo 1. Introduccion 23

2000-2006 The Intel R⃝ Pentium R⃝ 4 Processor Family.

Basado en la microarquitectura NetBurst. Introdujo las extensiones Streaming SIMD

Extensions 2 (SSE2). El Pentium 4 HT (3.40 GHz) introdujo las extensiones Strea-

ming SIMD Extensions 3 (SSE3). La arquitectura Intel 64 se introdujo en el Pentium

4 HT Extreme Edition y en el Pentium 4 (6xx y 5xx). La tecnologıa Intel R⃝ Virtua-

lization Technology (Intel R⃝ VT) se introdujo en el Pentium 4 (672 y 662).

2001-2007 The Intel R⃝ Xeon R⃝ Processor.

Los procesadores Intel Xeon (con la excepcion del dual-core Intel Xeon LV, y la serie

Intel Xeon 5100) estan basados en la microarquitectura NetBurst. Es una familia

disenada para su uso en sistemas servidores con multiprocesador y estaciones de

trabajo de alto rendimiento. El procesador Intel Xeon MP introdujo el soporte de

la tecnologıa Hyper-Threading (HT). El procesador de 64-bit Intel Xeon (3.60 GHz,

con un bus del sistema a 800 MHz) introdujo la arquitectura Intel 64 en esta familia.

El procesador Dual-Core Intel Xeon incluye la tecnologıa de doble nucleo. La serie

Intel Xeon 70xx incluye la tecnologıa VT (Virtualization Technology). Las series

Intel Xeon 5100, 3000 introdujeron la microarquitectura Intel Core (eficiente en

consumo y de alto rendimiento). La serie Intel Xeon 5300 introdujo cuatro nucleos

en un unico circuito.

2003-Current The Intel R⃝ Pentium R⃝ M Processor.

La familia Intel Pentium M es una familia de alto rendimiento y bajo consumo para

sistemas portatiles con las mejoras de la generaciones previas de la arquitectura Intel

de 32 bits. Se diseno para extender la vida de las baterıas de los sistemas portatiles.

Incluye:

Soporte de la Arquitectura Intel Architecture con Dynamic Execution.

A high performance, low-power core manufactured using Intel’s advanced pro-

cess technology with copper interconnect

On-die, primary 32-KByte instruction cache and 32-KByte write-back data

cache.

On-die, second-level cache (up to 2 MByte) with Advanced Transfer Cache

Architecture.

Advanced Branch Prediction and Data Prefetch Logic.

Support for MMX technology, Streaming SIMD instructions, and the SSE2

instruction set.

Page 24: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

24 Microprocesadores RISC y CISC

A 400 or 533 MHz, Source-Synchronous Processor System Bus.

Advanced power management using Enhanced Intel SpeedStep R⃝ technology

2005-2007 The Intel R⃝ Pentium R⃝ Processor Extreme Edition.

Introdujo la tecnologıa dual core, ademas de el soporte hardware avanzado de multi-

threading. Esta basado en la microarquitectura NetBurst y soporta las tecnologıas

SSE, SSE2, SSE3, Hyper- Threading Technology, and Intel 64.

2006-2007 The Intel R⃝ Core Duo and Intel R⃝ Core Solo Processors.

The Intel Core Duo processor offers power-efficient, dual-core performance with a

low-power design that extends battery life. This family and the single-core Intel Core

Solo processor offer microarchitectural enhancements over Pentium M processor

family. Incluye:

Intel R⃝ Smart Cache which allows for efficient data sharing between two pro-

cessor cores

Improved decoding and SIMD execution

Intel R⃝ Dynamic Power Coordination and Enhanced Intel R⃝ Deeper Sleep to

reduce power consumption

Intel R⃝ Advanced Thermal Manager which features digital thermal sensor in-

terfaces

Support for power-optimized 667 MHz bus The dual-core Intel Xeon processor

LV is based on the same microarchitecture as Intel Core Duo processor, and

supports IA-32 architecture.

2006-Current The Intel R⃝ Xeon R⃝ Processor 5100, 5300 Series and Intel R⃝ Core2 Pro-

cessor Family.

The Intel Xeon processor 3000, 3200, 5100, 5300, and 7300 series, Intel Pentium

Dual-Core, Intel Core 2 Extreme, Intel Core 2 Quad processors, and Intel Core 2

Duo processor family support Intel 64 architecture; they are based on the high-

performance, power-efficient Intel R⃝ Core microarchitecture built on 65 nm process

technology. Incluye:

Intel R⃝ Wide Dynamic Execution to increase performance and execution th-

roughput

Intel R⃝ Intelligent Power Capability to reduce power consumption

Page 25: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Capıtulo 1. Introduccion 25

Intel R⃝ Advanced Smart Cache which allows for efficient data sharing between

two processor cores

Intel R⃝ Smart Memory Access to increase data bandwidth and hide latency of

memory accesses

Intel R⃝ Advanced Digital Media Boost which improves application performance

using multiple generations of Streaming SIMD extensions.

The Intel Xeon processor 5300 series, Intel Core 2 Extreme processor QX6800

series, and Intel Core 2 Quad processors support Intel quad-core technology.

2007-Current The Intel R⃝ Xeon R⃝ Processor 5200, 5400, 7400 Series and Intel R⃝ Core2

Processor Family.

The Intel Xeon processor 5200, 5400, and 7400 series, Intel Core 2 Quad processor

Q9000 Series, Intel Core 2 Duo processor E8000 series support Intel 64 architecture;

they are based on the Enhanced Intel R⃝ Core microarchitecture using 45 nm pro-

cess technology. The Enhanced Intel Core microarchitecture provides the following

improved features:

A radix-16 divider, faster OS primitives further increases the performance of

Intel R⃝ Wide Dynamic Execution.

Improves Intel R⃝ Advanced Smart Cache with Up to 50 % larger level-two cache

and up to 50 % increase in way-set associativity.

A 128-bit shuffler engine significantly improves the performance of Intel R⃝ Ad-

vanced Digital Media Boost and SSE4.

Intel Xeon processor 5400 series and Intel Core 2 Quad processor Q9000 Series

support Intel quad-core technology. Intel Xeon processor 7400 series offers up

to six processor cores and an L3 cache up to 16 MBytes.

2008-Current The Intel R⃝ Atom Processor Family.

The Intel R⃝ AtomTM processors are built on 45 nm process technology. They are

based on a new microarchitecture, Intel R⃝ AtomTM microarchitecture, which is op-

timized for ultra low power devices. The Intel R⃝ AtomTM microarchitecture features

two in-order execution pipelines that minimize power consumption, increase battery

life, and enable ultra-small form factors. It provides the following features:

Enhanced Intel R⃝ SpeedStep R⃝ Technology

Page 26: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

26 Microprocesadores RISC y CISC

Intel R⃝ Hyper-Threading Technology

Deep Power Down Technology with Dynamic Cache Sizing

Support for new instructions up to and including Supplemental Streaming

SIMD Extensions 3 (SSSE3).

Support for Intel R⃝ Virtualization Technology

Support for Intel R⃝ 64 Architecture (excluding Intel Atom processor Z5xx Se-

ries)

2008-Current The Intel R⃝ Corei7 Processor Family.

The Intel Core i7 processor support Intel 64 architecture; they are based on Intel

microarchitecture (Nehalem) using 45 nm process technology. The Intel Core i7

processor includes the following innovative features:

Intel R⃝ Turbo Boost Technology converts thermal headroom into higher per-

formance.

Intel R⃝ HyperThreading Technology in conjunction with Quadcore to provide

four cores and eight threads.

Dedicated power control unit to reduce active and idle power consumption.

Integrated memory controller on the processor supporting three channel of

DDR3 memory.

8 MB inclusive Intel R⃝ Smart Cache.

Intel R⃝ QuickPath interconnect (QPI) providing point-to-point link to chipset.

Support for SSE4.2 and SSE4.1 instruction sets.

Second generation Intel Virtualization Technology.

Intel 4004

En 1971 Intel fabrica el primer microprocesador. Con 2300 transistores, este micro-

procesador de 4 bits presumıa de se tan potente como la ENIAC (una de las primeras

computadoras a valvulas).

Page 27: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Capıtulo 1. Introduccion 27

Layout del 4004 con 2300 transistores.

Page 28: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

28 Microprocesadores RISC y CISC

Pentium 4

Layout de 42 millones de transistores6

A continuacion se muestra el diagrama de bloques basico de la arquitectura interna

del Pentium 4.

BTB/Branch Prediction

Out-of-order

execution

logic

RetirementFetch/DecodeTrace Cache

Microcode ROM

Front End

Branch History Update

Level 1 Data Cache

Execution Units

Bus Unit

Level 2 Cache

System Bus

Memory Subsystem

Out-of-order Engine

Integer and FP Execution Units

6La tecnologıa de fabricacion (tamano de los transistores) no es la misma y las fotografıas no emplean

la misma escala.

Page 29: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Capıtulo 1. Introduccion 29

Y aquı el diagrama de la microarquitectura del microprocesador Pentium 4 HT Pres-

cott.

Page 30: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

30 Microprocesadores RISC y CISC

Page 31: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Capıtulo 2

Arquitectura INTEL

(Nivel Aplicacion)

2.1. Entorno basico de ejecucion

La Arquitectura Intel que estudiamos define los microprocesadores1 de 32 bit (IA32),

lo que implica que tiene los registros y la ALU entera de 32 bits. Dispone de un bus de

direcciones de 36 bits (236 = 64 GB).

2.1.1. Modos de operacion

Dispone de tres modos de funcionamiento.

Modo protegido. Modo nativo de funcionamiento. Todas las caracterısticas estruc-

turales estan disponibles. Proporciona el maximo rendimiento. Es el modo recomen-

dado para los Sistemas Operativos y las aplicaciones nuevas. Una de las habilidades

de este modo es ejecutar software del 8086 con direccionamiento en modo real en un

entorno protegido y multitarea. Es lo que se llama Modo Virtual 86. Se considera

como un atributo del modo protegido.

Modo de direccionamiento real. Proporciona el entorno de trabajo de un 8086

con algunas extensiones. El microprocesador arranca en este modo despues de un

reset. Es el modo que emplearemos inicialmente.

Modo de gestion del sistema (SMM: System Management Mode). Disponible

desde el modelo 386SL. Permite la implementacion de sistemas de ahorro de energıa

1En particular estudiaremos el mas avanzado hasta el momento: el Pentium 4.

31

Page 32: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

32 Entorno basico de ejecucion

ası como aumentar la seguridad del sistema. Emplea un mapa de memoria paralelo

que lo hace independiente del Sistema Operativo instalado.

2.1.2. Organizacion de la memoria

La memoria que direcciona el microprocesador en sus buses se llama memoria fısica.

Esta memoria esta organizada en grupos de 8 bits (bytes), teniendo cada uno de estos,

una unica direccion fısica. El espacio de direcciones fısicas abarca desde la posicion 0 hasta

la 232 − 1, lo que supone un direccionamiento de 4GB2.

Dependiendo del modo de funcionamiento del microprocesador el acceso a memoria

funciona de una manera u otra. En el modo de funcionamiento protegido, que es el modo

recomendado, existen dos mecanismos: la segmentacion de la memoria, que no puede ser

desactivada, y la paginacion de la memoria, que es un mecanismo anadido al anterior y

opcional. Ambos mecanismos son muy utiles en el diseno de Sistemas Operativos seguros.

Al programar no nos referimos directamente a la memoria fısica sino a una memoria

de direcciones lineales.

Existen tres modelos de memoria aplicables:

Flat model. Modelo plano. Toda la memoria aparece como un espacio de direc-

ciones continuo llamado espacio de direcciones lineales que abarca desde la posicion

0 hasta 232 − 1. Las secciones de codigo, datos y pila de todos los programas estan

contenidos en el.

Segmented model. Modelo segmentado. Cada programa esta dividido en seg-

mentos separados: codigo, datos y pila. Para poder acceder a un byte necesitamos

una direccion logica compuesta por un selector de segmento y un offset o desplaza-

miento. A esto se le denomina tambien puntero FAR. El selector de segmento identifica

el segmento y el desplazamiento identifica el byte dentro del segmento. Se pueden

direccionar hasta 16383 segmentos a la vez, de diferentes tamanos y tipos. El tamano

maximo de un segmento puede ser 232 bytes. Este modelo de memoria aumenta la

versatilidad de los programas dado que el codigo es reubicable3 y la pila al crecer

no puede sobreescribir zonas de datos o codigo, con lo que aumenta la seguridad.

2Esto implica un bus de direcciones de 32 bits. Los ultimos microprocesadores de Intel tienen un bus

de 36 bits (64GB), pero es necesario el empleo del mecanismo de la paginacion para hacer uso de los 4

bits extra.3Significa que el codigo se puede situar en cualquier parte de la memoria sin necesidad de recalcular

las direcciones de las instrucciones de salto ya que son relativas al principio del codigo y no absolutas.

Page 33: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Capıtulo 2. Arquitectura Intel. Nivel aplicacion 33

Real-address model. Modo de direccionamiento real. Es el modelo de memo-

ria empleado en el 8086. Es una implementacion particular del modelo de memoria

segmentado. El espacio de direcciones lineales es de 220 bytes (1 MB). El tamano

maximo de un segmento es de 64 kB. Para direccionar la memoria se utiliza una

direccion logica compuesta por segmento:desplazamiento. La traduccion a me-

moria lineal la hace el micro automaticamente como aparece en la siguiente figura.

Dirección Lineal

Modelo Plano

EspacioDireccionesLineales

Desplazamiento

Selector Segmento

Modelo Segmentado

Modelo de Direccionamiento Real

Espacio DireccionesLineales Dividido

En SegmentosEquiespaciados

LogicaDirección

EspacioDirecciones

Lineales

Segmentos

Desplazamiento

Selector Segmento

LogicaDirección

En este modelo surgen problemas cuando el segmento es pequeno y el programa es

grande (> 64 kB), ya que hay que dividir el programa en varios segmentos y hay

que modificar los registros de segmento cuando saltamos de uno a otro.

En el direccionamiento de la memoria ademas existen dos tamanos de operandos y

direcciones definibles:

Direccionamiento de 32 bits. El selector es de 16 bits y el desplazamiento de 32

bits. Los operandos pueden ser o bien de 8, o bien de 32 bits.

Direccionamiento de 16 bits. El selector es de 16 bits y el desplazamiento de 16

bits. Los operandos pueden ser o bien de 8, o bien de 16 bits.

Esta es la diferencia fundamental entre los programas de 32 bits y los de 16 bits.

Ademas la codificacion de las instrucciones difiere en un caso y en otro.

Page 34: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

34 Entorno basico de ejecucion

2.1.3. Registros

Los registros que nos encontramos en el entorno basico de ejecucion son los siguientes:

Registros de datos o de proposito general

071531 16 8

AH AL

BH BL

CH CL

DH DL

BP

SI

DI

SP

16-bit

AX

DX

CX

BX

32-bit

EAX

EBX

ECX

EDX

EBP

ESI

ESP

Registros de Proposito General

EDI

EAX. Registro acumulador. Se puede usar solo los 16 bits mas bajos: AX. Tambien se

pueden referenciar las partes alta AH y baja AL de este ultimo.

EBX. Registro base. Se pueden usar solo los 16 bits mas bajos: BX. Tambien se pueden

referenciar las partes alta BH y baja BL de este ultimo. Suele formar un puntero de

datos en el segmento DS.

ECX. Registro contador. Se pueden usar solo los 16 bits mas bajos: CX. Tambien se

pueden referenciar las partes alta CH y baja CL de este ultimo.

EDX. Registro de datos. Se pueden usar solo los 16 bits mas bajos: DX. Tambien se

pueden referenciar las partes alta DH y baja DL de este ultimo. Es la extension de

EAX en el producto y la division. Tambien es el puntero de acceso a E/S cuando las

direcciones son de 16 bits.

ESI. Indice fuente (Source Index). Se pueden usar solo los 16 bits mas bajos: SI.

Forma el puntero fuente (DS:ESI)

EDI. Indice destino (Destination Index). Se pueden usar solo los 16 bits mas bajos:

DI. Forma el puntero destino (ES:EDI)

ESP. Puntero de pila (Stack Pointer). Se pueden usar solo los 16 bits mas bajos: SP.

El puntero de pila propiamente dicho lo forman: (SS:ESP).

EBP. Puntero base (Base Pointer). Se pueden usar solo los 16 bits mas bajos: BP. El

puntero base lo forman: (SS:EBP). Apunta a los datos de la pila.

Page 35: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Capıtulo 2. Arquitectura Intel. Nivel aplicacion 35

Registros selectores de segmento

Registros Selectores de Segmento

CSDSSSESFSGS

Codigo

Datos

Pila

Datos

Datos

Datos

Todos lossegmentosestan en elmismo espaciode direcciones

CS. Selector del segmento de codigo.

DS. Selector del segmento de datos.

SS. Selector del segmento de pila.

ES. Selector del segmento de datos extra.

FS. Selector del segmento de datos extra.

GS. Selector del segmento de datos extra.

Son punteros especiales que identifican un segmento en memoria. Su funcionamiento de-

pende del modo de funcionamiento del microprocesador y del modelo de memoria em-

pleado.

En el modelo plano. Apuntan a un segmento que comienza en la direccion 0 y que

abarca todo el espacio de direcciones lineales.

En el modelo segmentado. Cada registro de segmento apunta a un segmento dife-

rente (sin solapamiento) y con tamanos variables. Para acceder a zonas de memoria

diferentes hay que cargar un registro de segmento con el selector de segmento ade-

cuado.

Registro EIP

El puntero CS:EIP apunta a la siguiente instruccion a ejecutar. No se puede modificar

explıcitamente.

Page 36: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

36 Entorno basico de ejecucion

Registro EFLAGS

El registro EFLAGS es el registro de condiciones extendido (32 bits) y divide su contenido

en tres partes:

1. Flags de estado. Indican el resultado de instrucciones aritmeticas, desplazamien-

tos, etc.

CF. Acarreo (Carry flag). Indica el acarreo para la suma y para la resta.

254 11111110b+ 3 00000011b-------- ------------

257 1 00000001bCF

PF. Paridad (Parity flag). Se activa si el byte menos significativo del resultado

contiene un numero par de unos.

AF. Semiacarreo (Adjust flag). Indica el acarreo del bit 3 al bit 4. Usado en

aritmetica BCD (Binary Coded Decimal).

ZF. Cero (Zero flag) Se activa si el resultado es cero.

SF. Signo (Sign flag). Coincide con el bit mas significativo del resultado.

OF. Desbordamiento (Overflow flag). En numeros interpretados con signo, se

activa si el resultado no cabe en el operando destino. Sirve para prevenir que

el acarreo cambie el signo del resultado.

127 01111111b+ 2 00000010b-------- ------------

-127 10000001b no cabe , OF=1

2. Flags de control.

DF. Direccion (Direction flag). Indica la direccion de procesamiento de las

cadenas de datos. Si vale 0, hacia posiciones de memoria crecientes, si vale 1

hacia posiciones decrecientes. Hay instrucciones para movimiento de bloques de

datos que autoincrementan o autodecrementan las direcciones fuente y destino

dependiendo del valor de este bit.

3. Flags del sistema. No deben ser modificados por los programas de usuario.

IF. Mascara de interrupciones (Interrupt enable flag). Enmascara las interrup-

ciones externas enmascarables (patilla INT ) (=0 Enmascara, =1 Habilita).

Page 37: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Capıtulo 2. Arquitectura Intel. Nivel aplicacion 37

TF. Ejecucion paso a paso (Trap flag). Habilita la depuracion paso a paso.

Cuando esta activado, tras la ejecucion de una instruccion se ejecuta una inte-

rrupcion para poder depurar el resultado de la instruccion.

IOPL. Nivel de privilegio de E/S (I/O privilege level field). Si nuestro nivel

de privilegio actual CPL≤IOPL, podremos acceder directamente a los puertos de

E/S, sino habra que comprobar el mapa de accesos a E/S del TSS (Segmento

de Estado de Tarea) actual (ver pagina 136). Se usa en Modo Protegido.

NT. Tarea anidada (Nested task). Se usa en Modo Protegido.

RF. Reanudacion (Resume flag). Controla la respuesta del procesador en las

excepciones de depuracion. Se usa en Modo Protegido.

VM. Habilita el modo Virtual86 (Virtual 8086 mode flag). Al ponerse a cero

se retorna a modo protegido. Se usa en Modo Protegido.

AC. Chequeo de alineamiento (Alignment check flag). Habilita el chequeo del

alineamiento en las referencias a memoria. Se usa en Modo Protegido.

VIF. Imagen virtual de IF (Virtual interrupt flag). Se usa junto con VIP. Se

usa en Modo Protegido.

VIP. Interrupcion virtual pendiente (Virtual interrupt pending flag) Indica si

hay una interrupcion pendiente. El procesador solo lee este bit. Lo modifica el

Sistema Operativo. Se usa en Modo Protegido.

ID. Identificacion (Identification flag). Indica el soporte o no de la instruccion

CPUID.

31 2930 28 27 26 25 24 23 22 21 20 19 18 17 16

0RF

ID

AC

VM

X Virtual-8086 Mode (VM)X Resume Flag (RF)

X Nested Task (NT)

X I/O Privilege Level (IOPL)X Overflow Flag (OF)

X Direction Flag (DF)X Interrupt Enable Flag (IF)

X Alignment Check (AC)

X ID Flag (ID)X Virtual Interrupt Pending (VIP)

15 1314 12 11 10 9 8 7 6 5 4 3 2 1 0

0CF

AF

PF 1

DF

IF

TF

SF

ZF

NT 000 0 0 0 0 0 0 0 0

VI

P

VIF

OF

IOPL

X Virtual Interrupt Flag (VIF)

X Trap Flag (TF)

S Sign Flag (SF)S Zero Flag (ZF)

S Auxiliary Carry Flag (AF)S Parity Flag (PF)

S Carry Flag (CF)

Page 38: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

38 Entorno basico de ejecucion

2.1.4. Tipos de datos

Los datos no necesitan estar alineados en memoria, pero se recomienda que lo esten

para aumentar el rendimiento, sobre todo los datos de la pila. Si los datos estan alineados

un dato DWORD se lee en un acceso. Si no estan alineados un dato DWORD se leera en dos

accesos.

Los tipos de datos son

Enteros con signo.

• BYTE. Rango: [−128 . . . 127].

• WORD. Rango: [−32768 . . . 32767].

• DWORD. Rango: [−231 . . . 231 − 1].

Enteros sin signo.

• BYTE. Rango: [0 . . . 255].

• WORD. Rango: 0 . . . 65535].

• DWORD. Rango: [0 . . . 232 − 1].

BCD (Binary Coded Decimal)

• No empaquetado. Rango de cada byte: [”0” . . . ”9”].

• Empaquetado. Rango de cada byte: [”00” . . . ”99”].

Punteros. Direccionan la memoria.

• Near pointer. (32 bits) Direccion efectiva o desplazamiento.

• Far pointer. (16:32 bits) Direccion logica. Selector de segmento de 16 bits mas

el desplazamiento de 32 bits.

Campos de bit. Es una secuencia continua de bits. Puede empezar en cualquier

bit de cualquier posicion de la memoria y con una longitud maxima de 32 bits.

Cadenas (Strings). Son secuencias de bits, bytes, words o dwords con un tamano

de hasta:

• Bit string. Hasta 232 − 1 bits.

• Byte string. Hasta 232 − 1 bytes.

• Word string. Hasta 232 − 1 words.

Page 39: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Capıtulo 2. Arquitectura Intel. Nivel aplicacion 39

• DWord string. Hasta 232 − 1 dwords.

Tipos de datos en punto flotante. Ver en el Capıtulo 3.

Tipos de datos MMX. Ver en el Capıtulo 4.

2.1.5. Modos de direccionamiento

Los podemos clasificar como:

1. Operandos inmediatos. El operando va codificado detras de la instruccion. El

valor codificado es un entero de 32 bits, aunque depende de la instruccion.

2. Operandos en registros. El dato esta en un registro.

3. Operandos en memoria. Mediante una direccion logica compuesta por un selector

de segmento y un desplazamiento.

Selector de segmento. Puede especificarse explıcitamente, o implıcitamente

• Implıcitamente.

Tipo de referencia Selector Segmento Regla de seleccion

Instrucciones CS Codigo Busqueda instrucciones

Pila SS Pila PUSH, POP,

y ref. a ESP o EBP

Datos locales DS Datos Ref. a datos

Destino bloques datos ES Datos Destino bloques datos

• Explıcitamente. Solo los datos locales.

MOV [ES:EBX],EAX

Desplazamiento. Esta compuesto de la base, el ındice, la escala y el desplaza-

miento propiamente dicho.

DESPLAZAMIENTO_FINAL = BASE + (INDICE*ESCALA) + DESPLAZAMIENTO

Despl = Base + (Indice ∗ Escala) + Desplazamiento

Base

EAX

EBXECX

EDX

ESPEBP

ESIEDI

EAX

EBXECX

EDX

EBP

ESI

EDI

1 None

2

4

8

8-bit

16-bit

32-bit

Indice Escala Desplazamiento

*+ +

Page 40: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

40 Repertorio basico de instrucciones

4. Operandos en puertos de E/S.

Tiene 65536 puertos de E/S, que pueden ser accedidos como byte, word o dword. Se

direcciona de forma inmediata o directa al registro DX.

Direccionamiento en modo real. En este caso la direccion se forma como sigue:

; DIR. LINEAL = (SEL. SEGMENTO )*16 + DESPLAZAMIENTO EFECTIVO; (20 bits) (16 bits) (16 bits)

2.2. Repertorio basico de instrucciones

2.2.1. Transferencia de datos

MOV

Copia datos de la fuente al destino. No afecta a EFLAGS. Ejemplo:

MOV EAX ,[EBX +10]MOV DWORD [EBX +10] ,5MOV BX,ESMOV DS,AXMOV ES ,314 ; Error. Los registros de segmento se cargan

; desde otros registros

CMOVcc

Copia condicional de datos. Aparece a partir de Pentium Pro.

Page 41: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Capıtulo 2. Arquitectura Intel. Nivel aplicacion 41

cc Condicion Significado

E/Z Equal or Zero =

NE/NZ Not Equal/Not Zero =A/NBE Above/Not Below or Equal > (Numeros sin signo)

AE/NB Above or Equal/Not Below ≥ (.. sin signo)

B/NAE Below/Not Above or Equal < (.. sin signo)

BE/NA Below or Equal/Not Above ≤ (.. sin signo)

G/NLE Great/Not Less or Equal > (Numeros con signo)

GE/NL Great or Equal/Not Less ≥ (.. con signo)

L/NGE Less/Not Great or Equal < (.. con signo)

LE/NG Less or Equal/Not Great ≤ (.. con signo)

C Carry Acarreo

NC Not Carry Sin acarreo

O Overflow Desbordamiento

NO Not Overflow Sin desbordamiento

S Sign Negativo

NS Not Sign Positivo

P/PE Parity/Parity Even Paridad par

NP/PO Not Parity/Parity Odd Paridad impar

Ejemplo:

CMOVE EDX ,EAX ; EDX = EAX solo si EFLAGS.ZF=1

XCHG

Intercambia contenido de fuente y destino. No afecta a EFLAGS. No admite operandos

inmediatos.

XCHG EAX ,EDX ; Intercambia el contenidoXCHG SI ,[BX]

BSWAP

Intercambia bytes. El dato de 32 bits pasa de formato Little Endian a formato Big

Endian. A partir de 486.

; EAX = 12345678h antesBSWAP EAX ; EAX = 78563412h despues

Page 42: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

42 Repertorio basico de instrucciones

XADD

Intercambia y suma. A partir de 486.

XADD r/m8 ,r8XADD r/m16 ,r16XADD r/m32 ,r32

CMPXCHG

Compara e intercambia. A partir de 486.

Si Acumulador == DestinoEntonces

ZF = 1Destino = Fuente

SinoZF = 0Acumulador = Destino

CMPXCHG8B

Compara e intercambia 8 bytes. A partir de 486.

Si EDX:EAX == DestinoEntonces

ZF = 1Destino = ECX:EBX

SinoZF = 0EDX:EAX = Destino

PUSH

Introduce un dato de 16/32 bits en la pila.

1. Decrementa ESP en 2/4 bytes, dependiendo del modo de direccionamiento (16/32

bits).

2. Guarda [ESP]=rm16/32.

Ejemplo:

PUSH AX ; Guarda AX en la pilaPUSH DWORD [EBX] ; Guarda el contenido (32 bits) apuntado

; por DS:EBX en la pilaPUSH DWORD 1000H ; Introduce 00001000h en la pilaPUSHF ; Introduce el registro EFLAGS (parte baja)

; en la pila

Page 43: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Capıtulo 2. Arquitectura Intel. Nivel aplicacion 43

POP

Extrae de la pila

1. Extrae rm16/32=[ESP]

2. Incrementa ESP en 2/4 bytes, dependiendo del modo de direccionamiento (16/32

bits)

Ejemplo:

POPFD ; Recupera dato de la pila en EFLAGSPOP WORD [SI] ; Recupera el contenido de la pila (16 bits)

; y lo guarda en la direccion apuntada por; DS:SI

POP ES ; Recupera dato de 16 bits en ES

PUSHA / PUSHAD / POPA /POPAD

Introduce/extrae de la pila todos los registros de proposito general de 16/32 bits. Los

introduce en este orden: EAX, ECX, EDX, EBX, ESP, EBP, ESI y EDI (igual para los de 16

bits). Los recupera en sentido inverso, pero descartando el valor de SP/ESP.

PUSHAD ; Guarda todos los registros de 32 bitsPOPAD ; Recupera todos los registros de 32 bits ,

; descarta ESPPUSHA ; Guarda todos los registros de 16 bitsPOPA ; Recupera todos los registros de 16 bits ,

; descarta SP

IN Op1,Op2

Lee de un puerto de E/S hardware de 8/16/32 bits

; Op1=PORT[Op2]; Op1=AL ,AX ,EAX; Op2=Inm8 , DXIN AL ,20IN EAX ,DX

IN AX ,7F8h ; Mal

MOV DX ,7F8hIN AX,DX ; Bien

OUT Op1,Op2

Escribe en un puerto de E/S hardware de 8/16/32 bits

Page 44: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

44 Repertorio basico de instrucciones

; PORT[Op1]=Op2; Op1=Inm8 ,DX; Op2=AL,AX,EAXOUT 64h,ALOUT DX,EAX

CWD

Convierte word en dword extendiendo el signo.

CWD ; AX -> DX:AX

CDQ

Convierte dword en qword extendiendo el signo.

CDQ ; EAX -> EDX:EAX

CBW

Convierte byte en word.

CBW ; AL -> AX

CWDE

Convierte word en dword.

CWDE ; AX -> EAX , Ojo!

MOVSX r16/32,rm8/16

Copia y extiende el signo

MOVSX AX ,BH ; Antes AX= ? BH= 0F0h; Despues AX=0FFF0h BH= 0F0h

MOVZX r16/32,rm8/16

Copia y extiende con ceros

MOVZX AX ,BH ; Antes AX= ? BH= 0F0h; Despues AX= 00F0h BH= 0F0h

Page 45: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Capıtulo 2. Arquitectura Intel. Nivel aplicacion 45

2.2.2. Aritmeticas

Todas estas instrucciones afectan a los flags CF, ZF, OF y SF siempre que no se indique

otra cosa.

ADD Op1,Op2

Suma: Op1=Op1+Op2.

ADD EAX ,EBX ; EAX = EAX + EBXADD WORD [BX+5],5ADD EBX ,[ESI]

ADC Op1,Op2

Suma con acarreo: Op1=Op1+Op2+CF.

ADD EAX ,EBX ; EDX EAX 64 bitsADC EDX ,ECX ; ECX EBX 64 bits

; Suma extendida CF EDX EAX 65 bits

SUB Op1,Op2

Resta: Op1=Op1-Op2

SUB EAX ,EBX ; EAX = EAX - EBXSUB EDI ,3 ; EDI = EDI - 3

SBB Op1,Op2

Resta con acarreo: Op1=Op1-Op2-CF

SBB EAX ,EBX ; EAX = EAX - EBX - CFSBB EDI ,3 ; EDI = EDI - 3 -CF

IMUL

Multiplicacion teniendo en cuenta el signo.

IMUL Op. Con un solo operando.

IMUL r/m8 ; AX = AL * r/m8IMUL r/m16 ; DX AX = AX * r/m16IMUL r/m32 ; EDX EAX = EAX * r/m32

IMUL Op1,Op2. Con dos operandos del mismo tamano.

IMUL Op1 ,Op2 ; Op1 = Op1 * Op2; Si el resultado no cabe , CF=OF=1

Page 46: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

46 Repertorio basico de instrucciones

IMUL Op1,Op2,Op3. Con tres operandos del mismo tamano.

IMUL Op1 ,Op2 ,Op3 ; Op1 = Op2 * Op3; Op3 = Inm8 /16/32 con signo; Si el resultado no cabe , CF=OF=1

MUL Op

Multiplicacion sin signo. La diferencia con respecto a IMUL radica en como se modifica

EFLAGS para que se cumpla la regla de los signos, etc.

MUL r/m8 ; AX = AL * r/m8MUL r/m16 ; DX AX = AX * r/m16MUL r/m32 ; EDX EAX = EAX * r/m32

IDIV Op

Division con signo. Si el cociente no cabe se produce la excepcion 0 (Error en la

division).

IDIV r/m8 ; AX/rm8 , Cociente = AL, Resto = AHIDIV r/m16 ; (DX AX)/rm16 , Cociente = AX, Resto = DXIDIV r/m32 ; (EDX EAX)/rm32 , Cociente = EAX , Resto = EDX

INC Op

Incrementa el operando.

INC EAX ; EAX = EAX + 1, no afecta a EFLAGS.CF

DEC Op

Decrementa el operando.4

DEC AX ; AX = AX - 1, no afecta a EFLAGS.CF

NEG Op

Calcula el complemento a 2.

NEG EAX ; EAX = - EAX

4Cuidado con esta instruccion que no modifica el flag de acarreo (EFLAGS.CF). En los bucles que

disenemos despues de decrementar el contador deberemos compararlo con cero para que se modifique CF

y poder comparar para mayor o menor.

Page 47: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Capıtulo 2. Arquitectura Intel. Nivel aplicacion 47

CMP Op1, Op2

Compara dos operando haciendo la resta Op1-Op2 y modificando EFLAGS. El resul-

tado de la resta no se almacena en ningun sitio.

CMP EAX ,EDX

2.2.3. Aritmetica BCD

Emplea el flag de semiacarreo EFLAGS.AF.

DAA

Ajuste decimal de AL despues de la suma. Para BCD empaquetado.

; AL = 79h (121) 79; BL = 35h (53) 35

ADD AL ,BL ; AL = AEh (174) valor no BCD ----DAA ; AL = 14h (20) y CF = 1 114

DAS

Ajuste decimal de AL despues de la resta. Para BCD empaquetado.

AAA

Ajuste ASCII despues de la suma. Para BCD no empaquetado.

AAS

Ajuste ASCII despues de la resta. Para BCD no empaquetado.

AAM

Ajuste ASCII despues del producto. Para BCD no empaquetado.

AAD

Ajuste ASCII antes de la division. Para BCD no empaquetado.

; 12h AAD 0Ch; ----- ======= > ------ = 3h; 4h 4h

Page 48: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

48 Repertorio basico de instrucciones

2.2.4. Logicas

AND Op1,Op2

Operacion AND.

; AX = 1010101010101010bAND AX ,1111000011110000b ; AX AND 1111000011110000b

; AX = 1010000010100000b

OR Op1,Op2

Operacion OR.

; AX = 1010101010101010bOR AX ,1111000011110000b ; AX OR 1111000011110000b

; AX = 1111101011111010b

XOR Op1,Op2

Operacion XOR (OR exclusivo).

; AX = 1010101010101010bXOR AX ,1111000011110000b ; AX XOR 1111000011110000b

; AX = 0101101001011010b

NOT Op

Operacion NOT. Complemento a 1.

; AX = 1010101010101010bNOT AX

; AX = 0101010101010101b

2.2.5. Desplazamientos y rotaciones

SAR Op1,CL/Inm8

Desplazamiento aritmetico a la derecha un maximo de 31 posiciones. Es una division

(con signo) rapida por potencias de 2.

0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 1 1

; EAX= 11111111000000001111111100000000bSAR EAX ,1 ; EAX= 11111111100000000111111110000000b CF = 0SAR EDX ,CL ; Desplaza CL posiciones de bit EDX

Page 49: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Capıtulo 2. Arquitectura Intel. Nivel aplicacion 49

SHR Op1,CL/Inm8

Desplazamiento logico a la derecha un maximo de 31 posiciones. Es una division (sin

signo) rapida por potencias de 2.

0

0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 1 1 1

; EAX= 11111111000000001111111100000010bSHR EAX ,2 ; EAX= 00111111110000000011111111000000b CF = 1

SAL/SHL Op1,CL/Inm8

Desplazamiento aritmetico/logico a la izquierda un maximo de 31 posiciones. Es un

producto rapido por potencias de 2.

0

0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 1 1 1 01

; EAX= 11111111000000001111111100000010bSAL EAX ,1 ; EAX= 11111110000000011111111000000100b CF = 1

SHRD rm16/32,r16/32,Inm8/CL

Desplazamiento doble a traves de otro registro a la derecha. El unico registro modifi-

cado es el destino (el primer operando).

Destino (Registro o Memoria) CF

31 0

Fuente (Registro)

31 0

Instruccion SHRD

; EAX= 12345678h, EBX =55555555hSHRD EAX ,EBX ,4 ; EAX= 51234567h, CF =1

SHLD rm16/32,r16/32,Inm8/CL

Desplazamiento doble a traves de otro registro a la izquierda. El unico registro modi-

ficado es el destino (el primer operando).

Page 50: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

50 Repertorio basico de instrucciones

Destino (Registro o Memoria)CF

31 0

Fuente (Registro)

31 0

Instruccion SHLD

; EAX= 12345678h, EBX =55555555hSHLD EAX ,EBX ,4 ; EAX= 23456785h, CF =1

ROR Op1,CL/Inm8

Rotacion a la derecha.

Destino (Registro o Memoria) CF

031Instruccion ROR

; EAX= 11110000111100001111000011110000bROR EAX ,1 ; EAX= 01111000011110000111100001111000b CF=0

ROL Op1,CL/Inm8

Rotacion a la izquierda.

Destino (Registro o Memoria)CF

31 0Instruccion ROL

; EAX= 11110000111100001111000011110000bROL EAX ,1 ; EAX= 11100001111000011110000111100001b CF=1

RCR Op1,CL/Inm8

Rotacion a la derecha a traves del acarreo.

Destino (Registro o Memoria) CF

31 0Instruccion RCR

; EAX= 11110000111100001111000011110000b CF=1RCR EAX ,1 ; EAX= 11111000011110000111100001111000b CF=0

Page 51: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Capıtulo 2. Arquitectura Intel. Nivel aplicacion 51

RCL Op1,CL/Inm8

Rotacion a la izquierda a traves del acarreo.

Destino (Registro o Memoria)CF

31 0Instruccion RCL

; EAX= 11110000111100001111000011110000b CF=1RCL EAX ,1 ; EAX= 11100001111000011110000111100001b CF=1

2.2.6. Manejo de bits o byte

BT rm16/32,r16/32/Inm8

Almacena el bit comprobado (indicado por el segundo operando) del primer operando

en EFLAGS.CF. Si se refiere a memoria el rango es [−231 . . . 231 − 1]

; Bit 7; EAX= 11110000111100001111000011110000b

BT EAX ,7 ; EFLAGS.CF=1

BTS rm16/32,r16/32/Inm8

Comprueba el bit y lo pone a ”1”.

; Bit 7; EAX= 11110000111100001111000001110000b

BTS EAX ,7 ; EAX= 11110000111100001111000011110000b; EFLAGS.CF=0

BTR rm16/32,r16/32/Inm8

Comprueba el bit y lo pone a ”0”.

; Bit 7; EAX= 11110000111100001111000011110000b

BTR EAX ,7 ; EAX= 11110000111100001111000001110000b; EFLAGS.CF=1

BTC rm16/32,r16/32/Inm8

Comprueba el bit y lo complementa.

; Bit 7; EAX= 11110000111100001111000011110000b

BTC EAX ,7 ; EAX= 11110000111100001111000001110000b; EFLAGS.CF=1

Page 52: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

52 Repertorio basico de instrucciones

BSF rm16/32,r16/32

Busca el primer bit a ”1”hacia adelante en la fuente comenzando por el bit menos

significativo y almacena su posicion (con signo) en el destino. Si lo encuentra EFLAGS.ZF=1,

sino EFLAGS.ZF=0.

; Bit 4; EAX= 11110000111100001111000001110000b

BSF EBX ,EAX ; EBX= 4; EFLAGS.ZF=1

BSR rm16/32,r16/32

Busca el primer bit a ”1”hacia atras en la fuente comenzando por el bit mas signifi-

cativo y almacena su posicion (con signo) en el destino. Si lo encuentra EFLAGS.ZF=1, sino

EFLAGS.ZF=0.

; * bit 31; EAX= 11110000111100001111000001110000b

BSR EBX ,EAX ; EBX= 31; EFLAGS.ZF=1

SETcc rm8

Si se cumple la condicion (las mismas que tienen las instrucciones CMOVcc o Jcc intro-

duce un 1 en el destino, sino introduce un 0.

; EFLAGS.ZF=1SETZ AL ; AL = 1

; EFLAGS.CF=0SETC BH ; BH=0

TEST Op1,Op2

Realiza la funcion Op1 AND Op2 y segun el resultado se modifican EFLAGS.SF, EFLAGS.ZF

y EFLAGS.PF.

TEST AX ,BX ; AX and BX y modifica EFLAGS

2.2.7. Transferencia de control

JMP

Salto absoluto incondicional.

Page 53: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Capıtulo 2. Arquitectura Intel. Nivel aplicacion 53

JMP rel8. Salto corto (SHORT). El operando indica el numero de bytes hacia adelante

(hasta 127) o hacia atras (hasta 128) con respecto a la posicion de EIP actual.

JMP rm16/rm32. Salto cercano (NEAR). Es un salto intrasegmento.

JMP ptr16/ptr32. Salto lejano (FAR). Es un salto intersegmento.

JMP Fin ; Salta a la etiqueta FinJMP NEAR OtroLado ; Salto NEARJMP 1230h:12838383h ; Salto FAR

Fin: ; El : indica que se codifique como salto; SHORT si se puede

Jcc rel16/32

Salto condicional relativo. Sirve solamente para salto intrasegmento. Utiliza las mismas

condiciones que las instrucciones CMOVcc o SETcc. Ademas existe la version:

JCXZ Direccion ; Salta si CX = 0, no decrementa CX ni; comprueba EFLAGS.ZF

JECXZ Dir2 ; Salta si ECX = 0, no decrementa ECX ni; comprueba EFLAGS.ZF

LOOP rel8

Bucle con CX/ECX como contador.

; Decrementa CX/ECX dependiendo del modo; de direccionamiento 16/32 bits; Si CX/ECX != 0 salta a la direccion; sino pasa a la instruccion siguiente

[BITS 16]MOV CX ,20 ; Repetira 20 veces el bucle

Bucle:...LOOP Bucle ; Fin del bucle

LOOPZ/LOOPE rel8

Igual que el anterior solo que repite si CX/ECX es distinto de cero y ademas EFLAGS.ZF = 1.

LOOPNZ/LOOPNE rel8

Igual que LOOP solo que repite si CX/ECX es distinto de cero y ademas EFLAGS.ZF = 0.

Page 54: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

54 Repertorio basico de instrucciones

CALL

Llamada a subrutina.

CALL dir. Llamada cercana (NEAR) o intrasegmento.

; Direccionamiento de 16 bits[BITS 16]

...CALL dir16 ; El funcionamiento es el siguiente:

; SP = SP -2; [SP] = IP; IP = dir16

; Direccionamiento de 32 bits[BITS 32]

...CALL dir32 ; El funcionamiento es el siguiente:

; ESP = ESP -4; [ESP] = EIP; EIP = dir32

CALL sel:dir. Llamada lejana (FAR) o intersegmento.

; Direccionamiento de 16 bits[BITS 16]

...CALL sel:dir16 ; El funcionamiento es el siguiente:

; SP = SP -2; [SP] = CS; SP = SP -2; [SP] = IP; IP = dir16; CS = sel

; Direccionamiento de 32 bits[BITS 32]

...CALL sel:dir32 ; El funcionamiento es el siguiente:

; ESP = ESP -4; [ESP] = CS; ESP = ESP -4; [ESP] = EIP; EIP = dir32; CS = sel

Cuando se guarda CS en la pila de 32 bits la parte superior se rellena con ceros.

El funcionamiento de esta instruccion, ası como las instrucciones de salto intersegmento,

son mucho mas complejas en modo protegido.

RET/RET n

Retorno de subrutina. Recupera el registro IP/EIP de la pila si es un retorno NEAR. Si

se trata de un retorno FAR (RETF) ademas recupera el registro CS.

Si la instruccion tienen un operando inmediato, retorna igual y luego suma ESP=ESP+n.

Page 55: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Capıtulo 2. Arquitectura Intel. Nivel aplicacion 55

INT Inm8

Llamada software a una interrupcion.

[BITS 16]; Direccionamiento de 16 bits

INT n ; El funcionamiento es el siguiente:; SP = SP - 2; [SP] = FLAGS; SP = SP - 2; [SP] = CS; SP = SP - 2; [SP] = IP; FLAGS.IF = 0; FLAGS.TF = 0; FLAGS.AC = 0; IP = [0:n*4]; CS = [0:n*4+2]

Con 32 bits serıa similar.

IRET/IRETD

Retorno de interrupcion 16/32 bits.

[BITS 16] ; Direccionamiento de 16 bits...IRET ; El funcionamiento es el siguiente:

; IP = [SP]; SP = SP + 2; CS = [SP]; SP = SP + 2; FLAGS = [SP]; SP = SP + 2; FLAGS.IF = 1

Estas instrucciones son mas complicadas en el modo de funcionamiento protegido del

microprocesador.

INT3

Identico a INT 3 solo que la instruccion se codifica en un solo byte. Se aprovecha para

poner puntos de ruptura en los programas depuradores de codigo.

INTO

Se produce INT 4 si EFLAGS.OF=1.

BOUND

Detecta un valor fuera de rango para indexar una matriz. Muy poco utilizada.

Page 56: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

56 Repertorio basico de instrucciones

ENTER

Reserva una zona de datos en la pila para parametros locales. Se utiliza mucho en

compiladores de lenguajes de alto nivel. Para mas informacion acudir a la referencia [4]

LEAVE

Es la instruccion recıproca de ENTER. Para mas informacion acudir a la referencia [4]

2.2.8. Manejo de bloques de datos

Utiliza como punteros DS:ESI y ES:EDI si usamos un direccionamiento de 32 bits (di-

rectiva BITS 32) si no usara DS:SI y ES:DI.

MOVSB / MOVSW / MOVSD

Copia un bloque de datos

[ES:EDI ]=[DS:ESI]Si EFLAGS.DF=0 ESI=ESI+(1,2,4)

EDI=EDI+(1,2,4)Si EFLAGS.DF=1 ESI=ESI -(1,2,4)

EDI=EDI -(1,2,4)

CMPSB / CMPSW / CMPSD

Compara un bloque de datos

CMP [DS:ESI],[ES:EDI]ESI=ESI+-(1,2,4) ; Dependiendo de EFLAGS.DFEDI=EDI+-(1,2,4) ; y del operando

La salida es EFLAGS.ZF=1 si son iguales los bloques comparados

SCASB / SCASW / SCASD

Explora un bloque de datos en busca de un elemento

CMP Acumulador ,[ES:EDI] ; Acumulador = AL ,AX ,EAX , segun inst.EDI=EDI+-(1,2,4) ;

La salida es EFLAGS.ZF=1 si son iguales

LODSB / LODSW / LODSD

Lee un bloque de datos

Acumulador =[DS:ESI] ; Acumulador = AL ,AX ,EAX , segun inst.ESI=ESI+-(1,2,4) ;

Page 57: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Capıtulo 2. Arquitectura Intel. Nivel aplicacion 57

STOSB / STOSW / STOSD

Escribe en un bloque de datos

[ES:EDI]= Acumulador ; Acumulador = AL ,AX ,EAX , segun inst.EDI=EDI+-(1,2,4) ;

INSB / INSW / INSD

Lee un bloque de datos desde un puerto de E/S

[ES:EDI]=Port[DX] ; El puerto podra ser de 8,16 o 32 bitsEDI=EDI+-(1,2,4)

OUTSB / OUTSW / OUTSD

Escribe un bloque de datos en un puerto de E/S

Port[DX]=[DS:ESI] ; El puerto podra ser de 8,16 o 32 bitsESI=ESI+-(1,2,4)

REP

Prefijo de repeticion. Decrementa CX/ECX y si no es cero repite la instruccion siguiente.

Ejemplo: Copia de un bloque

MOV AX ,DATOSMOV DS ,AXMOV ES ,AXMOV ESI ,TXTORG ; DS:ESI apunta al origenMOV EDI ,TXTDEST ; ES:EDI apunta al destinoCLD ; DF=0, incrementara punterosMOV ECX ,TAMANOREP MOVSB ; Lo copia

Ejemplo: Compara dos bloques

MOV AX ,DATOSMOV DS ,AXMOV AX ,DATOS2MOV ES ,AXMOV ESI ,TXTORG ; DS:ESI apunta al origenMOV EDI ,TXTDEST ; ES:EDI apunta al destinoCLD ; DF=0, incrementara punterosMOV ECX ,TAMANOREPZ CMPSB ; Si al salir ZF = 1 es que son iguales

; sino DS:ESI -1 apunta al primer dato; diferente

Ejemplo: Busqueda de un dato en un bloque

MOV AL ,CaracterMOV BX ,DATOSMOV ES ,BX

Page 58: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

58 Repertorio basico de instrucciones

MOV EDI ,TXTDEST ; ES:EDI apunta al BLOQUECLD ; DF=0, incrementara punterosMOV ECX ,TAMANOREPNE SCASB ; Si al salir ZF = 1 es que encontro el dato en la

; posicion ES:EDI -1

REPZ / REPE

Prefijo de repeticion. Idem, y repite si CX/ECX no es cero y ZF=1.

REPNZ / REPNE

Prefijo de repeticion. Idem, y repite si CX/ECX no es cero y ZF=0.

2.2.9. Control de FLAGS

STC

Sin operandos. EFLAGS.CF=1

CLC

Sin operandos. EFLAGS.CF=0

CMC

Sin operandos. EFLAGS.CF=/CF

CLD

Sin operandos. EFLAGS.DF=0

STD

Sin operandos. EFLAGS.DF=1

CLI

Sin operandos. EFLAGS.IF=0

STI

Sin operandos. EFLAGS.IF=1

Page 59: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Capıtulo 2. Arquitectura Intel. Nivel aplicacion 59

LAHF

Carga los flags de condiciones en AH

AH= SF ,ZF ,AF ,PF ,CFBit 4 3 2 1 0

SAHF

Guarda AH en FLAGS

2.2.10. Acceso a registros de segmento

LDS,LES,LFS,LGS,LSS

Cargan un puntero FAR. Ejemplo:

LDS DX ,[ES:BX]

4

DS

DX

BX

ES

2.2.11. Miscelanea

LEA r16/32, mem

Cargan una direccion efectiva en el destino. Sirve para simplificar los accesos poste-

riores a la posicion de memoria especificada.

LEA BX ,[SI+16] ; BX = SI + 16LEA EAX ,[ES:EBX+EAX *4+16] ; EAX = EBX + EAX*4 + 16

NOP

Esta instruccion no realiza ninguna operacion. Su utilidad esta en poder alinear las

instrucciones con determinadas posiciones de memoria (direcciones pares o multiplos de

4, etc.)

Page 60: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

60 Repertorio basico de instrucciones

NOP

UD2

Codigo de operacion para una instruccion no definida. Genera una excepcion de ins-

truccion no reconocida. Se trata de un codigo de operacion reservado para que pueda

servir de prueba para la excepcion de instruccion no reconocida. En cada nuevo mode-

lo de la Arquitectura Intel se anaden instrucciones que ocupan los codigos de operacion

disponibles.

XLATB

Traduce bytes usando una tabla de 256 valores

XLATB ; AL = [DS:EBX + (sin signo) AL]

CPUID

Introduce en EAX, EBX, ECX y EDX la informacion de identificacion del procesador. Para

mas informacion consultar la Ref. [4].

CPUID

Page 61: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Capıtulo 3

Unidad de punto flotante (FPU)

3.1. Introduccion

Los numeros en punto flotante estan compuestos por dos numeros enteros: mantisa

y exponente, ademas de un bit que indica el signo (cuando es igual a 1 el numero es

negativo). El valor que representan se construye como:

V alor = (−1)signo ∗ mantisa ∗ 2exponente

La FPU cumple los estandares IEEE 754 y 854.1 Trabaja con numeros normalizados

que son aquellos que llenan toda la mantisa y que dan la maxima precision. Su bit mas

significativo esta siempre a 1, y por lo tanto no necesitamos almacenarlo.

3.2. Tipos de datos

3.2.1. Numeros reales

Real corto (32 bits).

V alor = (−1)signo ∗ mantisa ∗ 2(exponente−127)

Trabaja con un exponente desplazado de 8 bits y con el bit mas significativo de la

mantisa a 1, pero no representado (oculto).

1IEEE Standard for Binary Floating-Point Arithmetic, ANSI/IEEE Std 754-1985. Especifıca el for-

mato de los numeros, operaciones basicas, conversiones, y condiciones de excepcion. El estandar IEEE

854-1987 generaliza el 754 para cubrir la aritmetica binaria y decimal.

61

Page 62: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

62 Tipos de datos

0

Punto Flotante de Precision Simple

3130 23 22

FraccionExp.Signo

Uno Implicito

El rango de valores representables con este formato esta entre

[−3,40 × 1038 . . . − 1,18 × 10−38] y [1,18 × 10−38 . . . 3,40 × 1038].

Real largo (64 bits)

V alor = (−1)signo ∗ mantisa ∗ 2(exponente−1023)

Tiene un exponente desplazado de 11 bits y tambien trabaja con un 1 oculto.

Sign

0

Punto Flotante de Precision Doble

63 62 Uno Implicito

Signo Exponente Fraccion

52 51

El rango de valores representables esta entre

[−1,79 × 10308 . . . − 2,23 × 10−308] y [2,23 × 10−308 . . . 1,79 × 10308].

Real temporal (80 bits)

V alor = (−1)signo ∗ mantisa ∗ 2(exponente−16383)

Tiene un exponente desplazado de 15 bits. El bit mas significativo de la mantisa

sı que esta presente y vale 1 cuando el numero esta normalizado, si no vale 0.

0

Punto Flotante de Doble Precision Extendida

79

Signo

78 6463

FraccionExponente

62 Uno Explicito

El rango de valores representables esta entre

[−1,18 × 104932 . . . − 3,37 × 10−4932] y [3,37 × 10−4932 . . . 1,18 × 104932].

Los reales cortos y largos estan siempre normalizados ya que tienen implıcitamente

un 1 oculto. Los reales temporales pueden estar o no normalizados.

3.2.2. Numeros enteros

Entero palabra (word integer), 16 bits, rango: [−32768 . . . 32767].

Entero corto (double word), 32 bits, rango: [−231 . . . 231 − 1].

Page 63: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Capıtulo 3. Unidad de punto flotante (FPU) 63

Entero largo (quadword), 64 bits, rango: [−263 . . . 263 − 1].

BCD empaquetado (Binary Coded Decimal) 18 dıgitos mas el signo (estandar Co-

bol).

0

Enteros BCD Empaquetados

79

D0

0

Entero Largo (Quadword)

63

4 Bits = 1 Digito BCD

0

Entero Corto (Dword)

31

0

Entero Palabra

15

Signo

D1D2D3D4D5D6D7D8D9D10D11D12D13D14D15D16D17

78 72 71

X

62

14

30

Signo

Signo

Signo

3.2.3. Numeros reales especiales

Entre estos estarıan:

Los infinitos, que se obtienen al dividir por cero.

Los ceros que tienen signo.

Los no normalizados, que aumentan la resolucion cerca del cero pero con menos

dıgitos de precision

Los no numeros, que pueden ser de senalizacion (SNaN: Signaling Not a Number)

o silenciosos (QNaN: Quiet Not a Number). Estos se obtienen como resultado de

operaciones del tipo:√−1 o log(−1).

1 0

S E Sig

−0

1 0−FinitoNo Normalizado

NaN

1 1...254 −FinitoNormalizado

1 255 −∞

255 SNaN

255 QNaN

0 0

S E Sig

0 0

NaN

0 1...254

0 255

X 255 1.0XX...

255 1.1XX...

+0

+FinitoNo Normalizado

+FinitoNormalizado

+∞

SNaN

QNaN X

X

X

Números Reales y Codificaciones NaN para Punto Flotante de 32-Bit

− Finito No Normalizado

−Finito Normalizado −0−∞ +∞

+Finito No Normalizado

+Finito Normalizado+0

0.XXX...

0.000...

1.000...

1.XXX...

1.000...

0.000...

0.XXX...

1.XXX...

1.0XX...

1.1XX...

Page 64: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

64 Arquitectura de la FPU

3.3. Arquitectura de la FPU

La FPU opera en paralelo con las demas unidades aritmeticas del microprocesador.

3.3.1. Pila de registros de datos

Dispone de 8 registros de 80 bits (real temporal) que forman una pila circular de

8 entradas. El campo SW.TOP de 3 bit apunta a la cima de la pila. La estructura tipo

pila circular es muy util para la evaluacion de expresiones aritmeticas y nos ahorra el

almacenamiento en variables temporales intermedias. Las instrucciones trabajan con el

registro apuntado por TOP de forma implıcita y con cualquier otro si se explıcita. El registro

apuntado por TOP se llama ST0 y los demas se numeran a partir de ahı: ST1, ST2,. . . ST7.

7

6

5

4

3

2

1

0

Pila de Registros de Datos de la FPU

ST(2)

ST(1)

ST(0)

Top

011B

La PilaCrece Asi

3.3.2. Registro de estado (Status Word: SW)

Describe el estado de la unidad de punto flotante:

FPU Busy

15 1314 11 10 9 8 7 6 5 4 3 2 1 0

BIE

PE

OE

UE

ZE

DE

TOP

Top of Stack Pointer

Exception Flags Precision Underflow Overflow Zero Divide Denormalized Operand Invalid Operation

Stack Fault

Error Summary Status

Condition Code

C2

C1

C0

ES

SF

C3

Indicadores de excepcion.

• IE: Operacion invalida. Puede ser por:

Page 65: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Capıtulo 3. Unidad de punto flotante (FPU) 65

◦ Stack Overflow or Underflow. Pila llena o vacıa.

◦ Operacion aritmetica invalida.

• DE: Operando no normalizado.

• ZE: Division por cero.

• OE: Desbordamiento superior: numero muy grande.

• UE: Desbordamiento inferior: numero muy pequeno.

• PE: Perdida de precision.

SF: Stack fault. Fallo de pila.

• C1=1, Stack Overflow. Desbordamiento de la pila. No caben mas datos.

• C1=0, Stack Underflow. Desbordamiento de la pila. No se pueden sacar mas

datos porque esta vacıa.

C0, C1, C2, C3: Codigos de condicion de la FPU. Se trasladan al registro EFLAGS

como sigue:

FSTSW AX ; AX = SWSAHF ; C0 ,C1 ,C2 ,C3 se ponen en EFLAGSJcc @Salto

0

CodigoCondicion

BanderaEstado

C0C1C2C3

CF(nada)

PFZF

CF

1PF

ZF

731 Registro EFLAGS

0

C2

C1

C3

Registro AX

0C

15

0

C2

C1

C3

Palabra de Estado FPU (SW)

0C

15

Instruccion FSTSW AX

Instruccion SAHF

B: Busy. FPU ocupada con una excepcion. Identico a ES, por compatibilidad 8087.

ES: Error Status summary. Vale 1 cuando se produce una excepcion no enmascarada.

TOP: Senala la cima de la pila.

Los flags IE, DE, ZE, OE, UE, PE, ES, SF, B son bits pegajosos (sticky bits), esto es,

se ponen automaticamente a 1, pero es el programador el que debe ponerlos de nuevo a 0.

Page 66: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

66 Arquitectura de la FPU

3.3.3. Registro de control (Control Word: CW)

Controla el funcionamiento de algunos detalles de la unidad de punto flotante.

15 1314 12 11 10 9 8 7 6 5 4 3 2 1 0

XIM

PM

OM

UM

ZM

DM

RC PC

Infinity ControlRounding ControlPrecision Control

Exception Masks Precision Underflow Overflow Zero Divide Denormal Operand Invalid Operation

Reserved

IC: Infinity control. Control de infinitos

• (=0) Infinito proyectivo (infinito y cero sin signo, solo 80287).

• (=1) Infinito afın (infinito y cero con signo). En los ultimos modelos de la

Arquitectura Intel de 32 bits este bit siempre vale 1.

Mascaras de excepcion. Permiten o prohıben las excepciones producidas por la FPU.

• IM: Operacion invalida.

• DM: Operando no normalizado.

• ZM: Division por cero.

• OM: Desbordamiento superior: numero muy grande.

• UM: Desbordamiento inferior: numero muy pequeno.

• PM: Perdida de precision.

PC: Control de precision. Indica con que precision se almacenan los resultados en

el destino en instrucciones de +, -, *, / y raız cuadrada; el resto usan real temporal

o su resolucion implıcita.

; PC Precision; ---------------------------------; 00: 24 bits mantisa(real corto); 01: Reservado; 10: 53 bits (real largo); 11: 64 bits (real temporal)

Page 67: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Capıtulo 3. Unidad de punto flotante (FPU) 67

RC: Modo de redondeo.

; RC Modo; ------------------------------------------; 00: al mas cercano o al par (por defecto); 01: hacia +infinito; 10: hacia -infinito; 11: truncado (hacia cero)

3.3.4. Registro de marcas (Tag Word: TW)

Tiene dos bits por cada registro de la pila circular e indica si esta ocupado o no. Indica

registro fısico, no referido a la cima de la pila.

015

Valores de TAG

TAG(7) TAG(5)TAG(6) TAG(4) TAG(3) TAG(2) TAG(1) TAG(0)

00 -- Valido01 -- Cero10 -- Especial: invalido (NaN, No soportados), infinito, o no normalizado11 -- Vacio

3.3.5. Punteros de operandos e instrucciones

Guardan punteros que apuntan hacia la ultima instruccion -no de control- ejecutada

y hacia su operando.

Puntero a la ultima instruccion en punto flotante.

Puntero al ultimo operando.

Opcode. Almacena el codigo de la operacion (12 bits) de la ultima instruccion de

punto flotante ejecutada2.

031

0

4

8

12

16

20

24

Formato en Modo Protegido de 32 Bit

Palabra de Control (CW)

15

Opcode 10...00

Palabra de Estado (SW)

Palabra de Marcas (TW)

Selector Puntero Instr. FPU

Selector Puntero Oper. FPU

Desplazamiento del Puntero a Operando de la FPU

0 0 0 0

Desplazamiento del Puntero de Instruccion de la FPU

Reservado

16

2Se ignora el prefijo de escape de la instruccion.

Page 68: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

68 Repertorio de instrucciones

3.4. Repertorio de instrucciones

3.4.1. Transferencia de datos

Convierten el dato en real temporal al pasarlo a los registros de la pila FPU.

FLD. Carga un valor en punto flotante de la memoria en la cima de la pila. Hay que

especificar el tamano del dato.

.text; Pila FPU: ST0 ,ST1 ,...

FLD dword [Variable_real_corto] ; 12.0FLD qword [Variable_real_largo] ; 13.0 12.0FLD tword [Variable_real_temporal]; 14.0 13.0 12.0

.dataVariable_real_corto dd 12.0 ; Hay que especificar el puntoVariable_real_largo dq 13.0 ; decimalVariable_real_temporal dt 14.0

FST/FSTP. Almacena en memoria el valor en punto flotante que esta en la cima de la

pila. La version con la P final indica que el elemento ademas se elimina de la pila.

FILD. Carga un valor en formato entero en la cima3 de la pila. Hay que especificar

el tamano del dato: word, dword, qword.

FIST/FISTP. Almacena en memoria en formato entero.

FBLD. Carga de la memoria a la cima de la pila un numero en formato BCD empa-

quetado de 80 bits.

FBSTP. Almacena en memoria el valor de la cima de la pila en formato BCD empa-

quetado.

FXCH. Intercambia el contenido de dos posiciones de la pila. Si solo se especifica un

operando el otro es implıcitamente la cima de la pila.

; Pila FPU: ST0 , ST1 ,..; 14.0 13.0 12.0

FXCH ST1 ,ST0 ; 13.0 14.0 12.0FXCH ST2 ; 12.0 14.0 13.0

FCMOVcc. Realiza una copia condicional entre dos posiciones de la pila dependiendo

del contenido de EFLAGS. Las instrucciones se muestran en la siguiente tabla:

3Al cargar el dato siempre se convierte a formato real temporal de 80 bits.

Page 69: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Capıtulo 3. Unidad de punto flotante (FPU) 69

Table 8-5. Floating-Point Conditional Move Instructions

Mnemonico Instruccion Banderas de Estado Condicion

FCMOVB CF=1

FCMOVNB CF=0 No Menor

FCMOVE ZF=1 Igual

FCMOVNE ZF=0 No Igual

FCMOVBE CF=1 or ZF=1 Menor o Igual

FCMOVNBE CF=0 and ZF=0 Ni menor ni Igual

FCMOVU PF=1 Desordenado

FCMOVNU PF=0 Ordenado

Menor

3.4.2. Aritmeticas

La P final extrae un dato de la pila de la FPU

FADD/FADDP. Suma dos valores de la pila.

FADD ST1 ; ST0=ST0+ST1FADD ST7 ,ST0 ; ST7=ST7+ST0 , al menos uno de los dos

; operandos debe ser ST0FADDP ST2 ; ST2=ST2+ST0 y quita ST0

FIADD. Suma un entero que esta en memoria con la cima de la pila.

FIADD word [Entero] ; ST0=ST0+[ Entero], leyendo entero corto

FSUB/FSUBP Resta dos valores de la pila.

FSUB ST2 ; ST0=ST0 -ST2FSUB dword [EBP] ; ST0=ST0 -[EBP], leyendo un real cortoFSUB ST1 ,ST0 ; ST1=ST1 -ST0 , al menos uno de los dos

; debe ser ST0FSUBP ST2 ; ST2=ST2 -ST0 y quita ST0

FISUB. Resta entero.

FISUB dword [Entero]; ST0=ST0 -[ Entero], leyendo entero largo

FSUBR/FSUBRP. Resta inversa.

FSUBR ST2 ; ST0=ST2 -ST0FSUBR dword [EBP] ; ST0=[EBP]-ST0 , leyendo un real cortoFSUBR ST1 ,ST0 ; ST1=ST0 -ST1 , al menos uno de los dos

; debe ser ST0

FISUBR. Resta inversa entero.

FISUBR dword [Entero];ST0=[ Entero]-ST0 , leyendo entero largo

Page 70: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

70 Repertorio de instrucciones

FMUL/FMULP. Multiplica.

FMUL ST2 ; ST0=ST0*ST2FMUL dword [EBP] ; ST0=ST0*[EBP], leyendo un real cortoFMUL ST1 ,ST0 ; ST1=ST1*ST0 , al menos uno de los dos

; debe ser ST0

FIMUL. Multiplica entero.

FDIV/FDIVP. Divide.

FDIV ST2 ; ST0=ST0/ST2FDIV dword [EBP] ; ST0=ST0/[EBP], leyendo un real cortoFDIV ST1 ,ST0 ; ST1=ST1/ST0 , al menos uno de los dos

; debe ser ST0

FIDIV. Divide por entero.

FDIVR/FDIVRP. Division inversa.

FDIVR ST2 ; ST0=ST2/ST0FDIVR dword [EBP] ; ST0=[EBP]/ST0 , leyendo un real cortoFDIVR ST1 ,ST0 ; ST1=ST0/ST1 , al menos uno de los dos

; debe ser ST0

FIDIVR. Division inversa por entero.

FABS. Valor absoluto.

FABS ; ST0=abs(ST0)

FCHS. Cambia el signo.

FCHS ; ST0=-ST0

FSQRT. Raız cuadrada.

FSQRT ; ST0=sqrt(ST0)

FPREM. Resto parcial. Resto = ST0-ST1*entero(ST0/ST1).

FPREM ; ST0=ST0 -ST1*entero(ST0/ST1)

FPREM1 Resto parcial IEEE. Idem redondeo mas proximo en vez de hacia 0.

FRNDINT. Redondea a entero (segun CW.RC).

FXTRACT. Extrae el exponente y la mantisa. ST0=mantisa, ST1=exponente.

FSCALE. Escala con potencias de 2. ST0=ST0×2entero(ST1).

FSCALE ; ST0=ST0 *2^( entero(ST1))

Page 71: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Capıtulo 3. Unidad de punto flotante (FPU) 71

3.4.3. De comparacion

La P final extrae un dato de la pila de la FPU. Si termina en PP elimina los dos datos

de la cima de la pila.

FCOM/ FCOMP/ FCOMPP. Compara y modifica SW segun el resultado, siendo:

(C1 = sin significado, C2 = Cero, C3 = Paridad, C0 = Acarreo.

FUCOM/ FUCOMP/ FUCOMPP. Comparacion sin orden y modifica SW. Igual, pero genera

excepcion si SNaN. C2=C1=C0=1 si QNaN, desordenados.

FICOM/ FICOMP. Comparacion con entero y modifica SW.

FCOMI/ FCOMIP. Compara y modifica EFLAGS.(ZF, PF, CF).

FUCOMI/ FUCOMIP. Compara sin orden y modifica EFLAGS.

FTST. Compara con 0.0

FXAM. Examina dato en la cima de la pila y devuelve C0, C2 y C3, siguiendo la tabla:

.

Clase C3 C2 C0

No Soportado 0 0 0

NaN 0 0 1

Numero Normal Finito 0 1 0

Infinito 0 1 1

Cero 1 0 0

Vacio 1 0 1

Numero No Normalizado 1 1 0

3.4.4. Funciones trigonometricas

FSIN. Halla el seno. ST0 = sin(ST0).

FCOS. Halla el coseno. ST0 = cos(ST0).

FSINCOS. Halla el seno y el coseno. ST1=sin(ST0), ST0=cos(ST0).

FPTAN. Halla la tangente. ST1=tg(ST0), ST0=1.0. SW.C2=1, si no se completa.

FPATAN. Halla el arcotangente. ST0=arctg(ST1/ST0) y elimina un dato de la pila. C2=1,

si no se completa. Devuelve un valor en el rango [−π, π]

Page 72: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

72 Repertorio de instrucciones

3.4.5. Otras funciones trascendentales

FYL2X. Calcula: ST0=ST1*log2(ST0) y elimina un dato de la pila. Recordamos que

loga(b) = log2(b)log2(a)

FYL2XP1. Calcula: ST0=ST1*log2(ST0+1), siempre que (−1 +√

2/2 <ST0< 1 −√

2/2).

F2XM1. Calcula: ST0=2ST0-1, siempre que (−0,5 <ST0< 0,5).

3.4.6. Carga de constantes

Cargan en ST0 los valores indicados:

FLDZ. Carga ST0 = +0.0

FLD1. Carga ST0 = +1.0

FLDPI. Carga ST0 = π

FLDL2T. Carga ST0 = log2(10)

FLDL2E. Carga ST0 = log2(e)

FLDLG2. Carga ST0 = log10(2)

FLDLN2. Carga ST0 = loge(2)

3.4.7. Control de la FPU

FNxxx indica que no se comprueban las excepciones

FINIT/FNINIT. Inicializa FPU.

FLDCW. Carga la palabra de control CW.

FSTCW/FNSTCW. Almacena en memoria CW.

FSTSW/FNSTSW. Almacena la palabra de estado SW.

FCLEX/FNCLEX. Borra los flags de excepcion.

FLDENV. Carga el entorno de la FPU (todo menos la pila FPU).

FSTENV/FNSTENV. Almacena el entorno.

Page 73: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Capıtulo 3. Unidad de punto flotante (FPU) 73

FRSTOR. Recupera el estado de la FPU. Es todo lo relacionado con la FPU y ocupa

108 bytes.

FSAVE/FNSAVE. Salva el estado de la FPU.

FINCSTP. Incrementa el registro TOP.

FDECSTP. Decrementa el registro TOP.

FFREE. Vacıa un registro de la pila de la FPU.

FNOP. No operacion.

WAIT/FWAIT. Espera a la FPU para sincronizarse.

Page 74: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

74 Repertorio de instrucciones

3.4.8. Resumen de instrucciones

En esta tabla se muestra un resumen de las instrucciones de la unidad de punto

flotante.

Instrucciones No Aritmeticas Instrucciones Aritmeticas

FABS F2XM1

FCHS FADD/FADDP

FCLEX FBLD

FDECSTP FBSTP

FFREE FCOM/FCOMP/FCOMPP

FINCSTP FCOS

FINIT/FNINIT FDIV/FDIVP/FDIVR/FDIVRP

FLD (registro a registro) FIADD

FLD (formato extendido desde memoria FICOM/FICOMP

FLD constante FIDIV/FIDIVR

FLDCW FILD

FLDENV FIMUL

FNOP FIST/FISTP

FRSTOR FISUB/FISUBR

FSAVE/FNSAVE FLD (formato doble y sencillo)

FST/FSTP (registro-a-registro) FMUL/FMULP

FSTP (formato extendido a memoria) FPATAN

FSTCW/FNSTCW FPREM/FPREM1

FSTENV/FNSTENV FPTAN

FSTSW/FNSTSW FRNDINT

WAIT/FWAIT FSCALE

FXAM FSIN

FXCH FSINCOS

FSQRT

FST/FSTP (formato doble y sencillo)

FSUB/FSUBP/FSUBR/FSUBRP

FTST

FUCOM/FUCOMP/FUCOMPP

FXTRACT

FYL2X/FYL2XP1

Page 75: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Capıtulo 4

Tecnologıa MMX

4.1. Introduccion

Es un conjunto de extensiones para mejorar el rendimiento en operaciones repetitivas

de calculo intensivo que se dan en aplicaciones multimedia: graficos, video, sonido, etc.

Consisten en:

Ocho registros MMX.

Cuatro tipos de datos MMX.

Cincuenta y siete instrucciones MMX.

4.2. Registros

MM7

MM6

MM5

MM4

MM3

MM2

MM1

MM0

63 0

Se dispone de 8 registros de 64 bits (MM0..MM7). Solo se pueden utilizar para realizar calculos

con tipos de datos MMX. No se puede direccionar la memoria con ellos, solo contienen

75

Page 76: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

76 Tipos de datos

datos. Estan mapeados -son sinonimos- en los registros (R0 .. R7) de la pila de la unidad

de punto flotante (FPU).1

4.3. Tipos de datos

Hay 4 tipos:

Vector de words

Vector de bytes

Vector de doublewords

063

063

063

Vector de bytes (bytes empaquetados): 8 bytes agrupados en un registro MMX de

64 bits: vector de 8 valores enteros tamano byte.

Vector de words (words empaquetados): cuatro palabras agrupadas en un registro

MMX de 64 bits: vector de 4 valores enteros tamano word.

Vector de doublewords (dwords empaquetados): dos dwords agrupados en un registro

MMX de 64 bits: vector de 2 valores enteros tamano dword.

Quadword (cuadruple palabra): valor de 64 bits.

4.4. Modelo de ejecucion SIMD

La tecnologıa MMX utiliza la tecnica SIMD (Single Instruction Multiple Data) para

que una instruccion opere sobre varios datos a la vez como si se tratase de vectores.

Ej.:

PADDSB ; Suma 8 bytes con signo con 8 bytes con; signo y almacena el resultado en 8 bytes

Esta tecnica aumenta el rendimiento software al operar sobre los datos en paralelo.

Esta pensada para aplicaciones multimedia.

1Los registros ST0..ST7 se situan en los registros R0..R7 de la FPU de forma dinamica, dependiendo

del campo TOP del registro de estado de la FPU.

Page 77: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Capıtulo 4. Tecnologıa MMX 77

4.5. Formato de los datos en memoria

Sigue siendo little endian. Los registros MMX tienen dos modos de acceso:

1. Acceso de 64 bits.

Acceso a memoria con 64 bits.

Transferencia entre registros MMX.

Instrucciones PACK, logicas, aritmeticas.

Algunas instrucciones UNPACK.

2. Acceso de 32 bits.

Acceso a memoria con 32 bits.

Transferencia entre registros de 32 bits y MMX.

Algunas instrucciones UNPACK.

4.6. Saturacion y wraparound (enrollamiento)

La forma de tratar el desbordamiento es diferente segun el tipo de aritmetica utilizada:

Aritmetica con wraparound (enrollamiento). Los resultados que no caben (overflow,

underflow) por grandes o pequenos son truncados y solamente los bits menos sig-

nificativos forman el resultado. El acarreo se ignorara en el resultado (solo en las

operaciones MMX).

Aritmetica con saturacion. Los resultados que no caben (overflow, underflow) por

grandes o pequenos son saturados (recortados) y puestos en el lımite del rango de

los datos.

• Si se supera el rango de los datos se satura poniendo el valor maximo del rango.

• Si el resultado se queda por debajo del mınimo se satura el mismo poniendo el

valor mınimo del rango.

Este modo es muy util sobre todo en calculos con datos multimedia como los colores,

las senales de audio, etc.

Las instrucciones MMX no indican el overflow o underflow ni generando excepciones ni

modificando EFLAGS.

Page 78: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

78 Conjunto de instrucciones

4.7. Conjunto de instrucciones

Todas las instrucciones MMX (excepto EMMS) tienen dos operandos: Destino y Fuen-

te y la operacion es

Destino = Destino operacion Fuente,

donde Destino y Fuente son memoria o un registro MMX. Si es una operacion de

transferencia de datos ademas puede ser un registro entero de 32 bits.

4.7.1. Transferencia de datos

MOVD Copia 32 bits. Ej.:

MOVD EAX ,MM0 ; EAX=parte baja (MM0)MOVD MM1 ,ECX ; La parte alta de MM1 a 0

MOVQ Copia 64 bits. Ej.:

MOVQ [ES:EBX],MM0MOVQ MM7 ,MM3 ; MM7=MM3

4.7.2. Aritmeticas

PADDB / PADDW / PADDD Suma empaquetada con enrollamiento Ej.:

; MM0=(1,2,3,4,5,6,7,8); MM1=(8,7,6,5,4,3,2,1)

PADDB MM0 ,MM1 ; MM0=(9,9,9,9,9,9,9,9)PADDD MM1 ,[ES:ESI] ; MM1 += [ES:ESI], 2xDWORD

PADDSB / PADDSW Suma empaquetada con saturacion y con signo.

PADDUSB / PADDUSW Suma empaquetada con saturacion y sin signo.

PSUBB / PSUBW /PSUBD Resta empaquetada con enrollamiento.

PSUBSB / PSUBSW Resta empaquetada con saturacion y con signo.

PSUBUSB / PSUBUSW Resta empaquetada con saturacion y sin signo.

PMULLW / PMULHW Multiplicacion empaquetada Hace 4 productos de 16 bits con resul-

tados de 32 bits de los que se elige la parte baja (PMULLW) o la parte alta (PMULHW).

Page 79: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Capıtulo 4. Tecnologıa MMX 79

X3 X2 X1 X0

Z3 = X3 ∗ Y3 Z2 = X2 ∗ Y2 Z1 = X1 ∗ Y1 Z0 = X0 ∗ Y0

Fuente

Destino

Destino

Y3 Y2 Y1 Y0

Temporal

Z3[15-0] Z2[15-0] Z1[15-0] Z0[15-0]

Ej.:

; MM0 = (40, 20, 10, 30); MM1 = (10, 20, 30, 40)

PMULLW MM0 ,MM1 ; MM0 = (Low(400) ,Low(400) ,Low(300), Low (1200)); = (400 ,400 ,300 ,1200)

PMADDWD Multiplicacion y suma.

X3 X2 X1 X0

X3 ∗ Y3 X2 ∗ Y2 X1 ∗ Y1 X0 ∗ Y0

Fuente

Destino

Destino

Y3 Y2 Y1 Y0

(X1∗ Y1) + X0∗ Y0)(X3∗ Y3) + X2∗ Y2)

Temporal

; MM0 = ( 40, 20, 10, 30); MM1 = ( 10, 30, 40, 20)

PMADDWD MM0 ,MM1 ; MM0 = ( 40*10+20*30 , 10*40+30*20); = ( 1000, 1000 )

4.7.3. De comparacion

PCMPEQB /PCMPEQW / PCMPEQD Comparacion para igual Hace las comparaciones elemen-

to a elemento y almacena todo ceros si no eran iguales y todo unos si eran iguales.

PCMPGTB /PCMPGTW / PCMPGTD Comparacion para mayor Hace las comparaciones ele-

mento a elemento y almacena todo ceros si no era mayor y todo unos si era mayor.

4.7.4. De conversion

PACKSSWB / PACKSSDW Empaqueta con saturacion y con signo. Los numeros de partida

son considerados con signo. PACKSSWB pasa de words a bytes. PACKSSDW pasa de dwords

a words.

Page 80: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

80 Conjunto de instrucciones

D C

Fuente 64-Bit

Destino 64-Bit

D’ C’ B’ A’

Destino 64-Bit

B A

PACKUSWB Empaqueta con saturacion y sin signo. Los numeros de partida son consi-

derados con signo.

PUNPCKLBW /PUNPCKLWD / PUNPCKLDQ Desempaqueta y entremezcla (interleave) parte

baja.

X0X3 X2 X1 Y0Y3 Y2 Y1

X0X3 X2 X1Y0Y3 Y2 Y1 X4X7 X6 X5Y4Y7 Y6 Y5

Fuente Destino

Destino

PUNPCKHBW /PUNPCKHWD / PUNPCKHDQ Desempaqueta y entremezcla (interleave) parte al-

ta. Sirven para mezclar las partes altas y bajas de los resultados.

X4X7 X6 X5 Y4Y7 Y6 Y5

X0X3 X2 X1Y0Y3 Y2 Y1 X4X7 X6 X5Y4Y7 Y6 Y5

Fuente Destino

Destino

4.7.5. Logicas

PAND AND logico.

PANDN NOT destino AND fuente.

POR OR logico.

PXOR XOR logico.

Page 81: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Capıtulo 4. Tecnologıa MMX 81

4.7.6. Desplazamiento

PSLLW / PSLLD / PSLLQ Desplazamiento logico a la izquierda.

Pre-Despl.Destino

Destino

Desplzamiento a la

X0

X0 <<Cuenta

X3 X2 X1

X1 <<CuentaX2 <<CuentaX3 <<Cuenta

Izquierda conExtension con Ceros

PSRLW / PSRLD / PSRLQ Desplazamiento logico a la derecha.

PSRAW / PSRAD Desplazamiento aritmetico a la derecha.

Antes Despl.Destino

Destino

Desplazamiento a la

X0

X0 >>Cuenta

X3 X2 X1

X1 >>CuentaX2 >>CuentaX3 >>Cuenta

Derecha con Extension del Signo

4.7.7. Instruccion EMMS

EMMS (Empty MMx State) pone todas las marcas (tags) de la FPU en vacıo, es decir,

vacıa los registros de la FPU para poder hacer operaciones en punto flotante. Cualquier

instruccion MMX, excepto EMMS, pone a cero (ocupado con datos validos) todas las marcas

del la FPU (registro TW). Es la instruccion que hay que poner al acabar la zona de codigo

que usa MMX, a partir de ahı se podra usar la FPU. Debido a que los registros MMX

y la pila de la FPU comparten la misma localizacion es preciso separar las zonas de

codigo MMX de las de FPU. Antes de entrar en la zona MMX hay que procurar no dejar

informacion en la pila de datos de la FPU.

Deteccion de la arquitectura MMX:

mov eax ,1cpuid

test edx ,00800000h ; El bit 23 = 1 indica MMXjnz @MMXFound

; No MMX ...

@MMXFound:....

Page 82: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

82 Conjunto de instrucciones

4.7.8. Resumen de instrucciones

En esta tabla se muestra un resumen de las instrucciones de la tecnologıa MMX.

Table 9-2. MMX Instruction Set Summary

CategoriaCon Signo

SaturacionSin Signo

Aritmeticas Suma

Resta

Multiplicacion

Multiplica y Suma

PADDB, PADDW, PADDD

PSUBB, PSUBW, PSUBD

PMULL, PMULH

PMADD

PADDSB, PADDSW

PSUBSB, PSUBSW

PADDUSB, PADDUSW

PSUBUSB, PSUBUSW

Comparacion Compara para Igual

Compara paraMayor que

PCMPEQB, PCMPEQW, PCMPEQD

PCMPGTPB, PCMPGTPW, PCMPGTPD

Conversion Empaquetado PACKSSWBPACKSSDW

PACKUSWB

Desempaqueta Alto

Bajo

PUNPCKHBW, PUNPCKHWD, PUNPCKHDQ

PUNPCKLBW, PUNPCKLWD, PUNPCKLDQ

Vectores Quadword

Logica And

And Not

Or

Exclusive OR

PAND

PANDN

POR

PXOR

Desplazamiento Logico a la Izquierda

Logico a la Derecha

Aritmetico a la Derecha

PSLLW, PSLLD

PSRLW, PSRLD

PSRAW, PSRAD

PSLLQ

PSRLQ

Doubleword Transfers Quadword Transfers

Transferencias Entre Registros

Desde Memoria

Hacia Memoria

MOVD

MOVD

MOVD

MOVQ

MOVQ

MOVQ

Limpia Registros MMX EMMS

SaturacionEnrrollamiento

Page 83: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Capıtulo 5

Arquitectura INTEL

(Nivel Sistema)

5.1. Introduccion

La familia Intel proporciona muchas facilidades hardware para la implementacion de

Sistemas Operativos seguros y con buenas prestaciones. Estas caracterısticas comprenden:

La gestion de la memoria.

La proteccion en modulos software.

La gestion de interrupciones y excepciones.

La multitarea.

La monitorizacion del rendimiento y la depuracion de aplicaciones.

La gestion del consumo y otros recursos hardware.

La gestion de las memorias cache.

El multiproceso con varios microprocesadores.

En la figura siguiente podemos ver de un vistazo la complejidad que permite la Ar-

quitectura Intel de 32 bits en cuanto al diseno de Sistemas Operativos.

83

Page 84: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

84 Modos de operacion

Tabla de DescriptoresLocales (LDT)

Registro EFLAGS

Registros de Control

CR1CR2CR3CR4

CR0Tabla de Descriptores

Globales (GDT)

Tabla de Descriptoresde Interrupcion (IDT)

IDTR

GDTR

Interrupt Gate

Trap Gate

Desc. LDT

Desc. TSS

Codigo

Pila

Codigo

Pila

Codigo

Pila

Segmento de Estadode Tarea (TSS)

Codigo

Datos

Pila

Tarea

Controlador de Interrupciones

Controlador de Excepciones

Protected Procedure

Sel. Seg. TSS

Selector de Segmentode Puerta de Llamada

Dir Tabla Desplaz.

Direccion Lineal

Directorio de Paginas

E. Dir. Pag.

Espacio de Direcciones Lineal

Dir. Lineal

0

Desc. Seg.Sel. Segmento

Segmento de CodigoDatos o Pila

Vector deInterrupciones

Desc. TSS

Desc. Seg.

Task Gate

TSSActual

P. Llamada

Segmento deEstado de Tarea (TSS)

Codigo

Datos

Pila

Tarea

Desc. Seg.

TSSActual

TSSActual

Selector de Segmento

Direccion Lineal

Registro de Tarea

CR3*

Tabla de Paginas

E. Tabla Pag.

Pagina

Dir. Fisica

LDTR

Este mapeado de paginas es para paginas de 4 KBy con direcciones fisicas de 32 bit

Registro

*Direccion Fisica

Direccion Fisica

Se representan los mecanismos de gestion de la memoria como son la segmentacion y

la paginacion. Se ven las estructuras de datos necesarias para la gestion de la misma,

ademas de las estructuras necesarias para la gestion de las interrupciones, excepciones y

tareas. Tambien podemos ver algunos de los registros del sistema involucrados en dichos

mecanismos.

5.2. Modos de operacion

El diagrama de estados que describe los distintos modos de operacion y la forma de

conmutar entre ellos se muestra a continuacion:

Page 85: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Capıtulo 5. Arquitectura INTEL(Nivel Sistema) 85

Modo de

Modo Protegido

Virtual-8086Modo

ModoManejoSistema

PE=1Reset o

VM=1VM=0

PE=0

Reseto

RSM

SMI#

RSM

SMI#

RSM

SMI#

Reset

RealDireccionamiento

Para pasar de modo real a modo protegido es necesario poner CR0.PE=1, siempre y cuando

las estructuras de datos necesarias esten preparadas en memoria y ciertos registros apunten

a ellas, mientras que el retorno a modo real desde modo protegido se consigue haciendo

CR0.PE=0 o mediante la activacion de la patilla de RESET.

Para pasar de modo protegido al sub-modo Virtual86 hay que activar el bit EFLAGS.VM=1

y para retornar a modo protegido lo ponemos a cero.

Para pasar a modo de gestion del sistema desde cualquier otro modo de funcionamiento

es necesario que la patilla SMI# del microprocesador se active (se usara un espacio de

direcciones de memoria alternativo). El retorno al modo de origen se consigue con la

ejecucion de la instruccion RSM.

Desde cualquier modo la activacion de la patilla RESET del microprocesador hara que

se pase a modo de direccionamiento real.

Modo protegido

Es el modo nativo.

Todas las prestaciones hardware estan disponibles.

Se obtiene el maximo rendimiento del sistema.

Recomendado para la implementacion de Sistemas Operativos y aplicaciones.

Incorpora el sub-modo Virtual86 que permite ejecutar software 8086 con direccio-

namiento real en un entorno multitarea protegido.

Page 86: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

86 Entorno de ejecucion

Modo de direccionamiento real

El entorno de trabajo es el de un 8086 con algunas extensiones.

El microprocesador comienza en este modo (tras un reset).

Modo de gestion del sistema

Permite el control del ahorro de energıa y otras caracterısticas OEM (Original Equip-

ment Manufacturer) de forma transparente e independiente del Sistema Operativo

instalado.

Aumenta la seguridad del sistema. Permite implementar un control de acceso inde-

pendiente del Sistema Operativo.

5.3. Entorno de ejecucion

5.3.1. Bits del sistema (EFLAGS)

Repasamos del registro EFLAGS los bits del sistema.

31 2930 28 27 26 25 24 23 22 21 20 19 18 17 16

0RF

ID

AC

VM

X Virtual-8086 Mode (VM)X Resume Flag (RF)

X Nested Task (NT)

X I/O Privilege Level (IOPL)X Overflow Flag (OF)

X Direction Flag (DF)X Interrupt Enable Flag (IF)

X Alignment Check (AC)

X ID Flag (ID)X Virtual Interrupt Pending (VIP)

15 1314 12 11 10 9 8 7 6 5 4 3 2 1 0

0CF

AF

PF 1

DF

IF

TF

SF

ZF

NT 000 0 0 0 0 0 0 0 0

VI

P

VIF

OF

IOPL

X Virtual Interrupt Flag (VIF)

X Trap Flag (TF)

S Sign Flag (SF)S Zero Flag (ZF)

S Auxiliary Carry Flag (AF)S Parity Flag (PF)

S Carry Flag (CF)

No deben ser modificados por los programas de usuario

IF (bit 9) Interrupt enable flag. Mascara de interrupciones. Enmascara las interrup-

ciones externas (patilla INTR) cuando vale cero. Los campos CPL, EFLAGS.IOPL y

CR4.VME determinan si puede o no ser modificado.

Page 87: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Capıtulo 5. Arquitectura INTEL(Nivel Sistema) 87

TF (bit 8) Trap flag. Ejecucion paso a paso. Habilita la depuracion paso a paso.

Cuando esta activado, tras la ejecucion de una instruccion se ejecuta una interrup-

cion para poder depurar el resultado de la instruccion.

IOPL (bits 12 y 13) I/O privilege level field. Nivel de privilegio de E/S. Si nues-

tro nivel de privilegio actual CPL≤EFLAGS.IOPL, podremos acceder directamente a

los puertos de E/S, sino habra que comprobar el mapa de acceso a E/S del TSS

(Segmento de Estado de Tarea) actual (ver pagina 136). Solo se puede modificar si

CPL=0.

NT (bit 14) Nested task. Senaliza que estamos en una tarea anidada.

RF (bit 16) Resume flag. Reanudacion. Controla la respuesta del procesador en las

excepciones de depuracion.

VM (bit 17) Virtual 8086 mode flag. Habilita el modo Virtual86. Al ponerse a cero

se retorna a modo protegido.

AC (bit 18) Alignment check flag. Habilita el chequeo del alineamiento en las refe-

rencias a memoria. Se enmascara con CR0.AM=0.

VIF (bit 19) Virtual interrupt flag. Imagen virtual de IF. Se usa junto con VIP. Solo

es valido si CR4.VME=1 y EFLAGS.IOPL<3.

VIP (bit 20) Virtual interrupt pending flag. Indica si hay una interrupcion pendiente.

El procesador solo lee este flag. Lo modifica el Sistema Operativo. Solo es valido si

CR4.VME=1 y EFLAGS.IOPL<3.

ID (bit 21) Identification flag. Indica el soporte o no de la instruccion CPUID.

5.3.2. Registros para la gestion de la memoria

Estos registros especifican donde se encuentran las estructuras de datos que controlan

el modelo de memoria segmentada.

047

GDTR

IDTR

Registros del Sistema para Tablas

Direccion Base Lineal 32-bit Lim. Tabla 16-bit

1516

Direccion Base Lineal 32-bit

0Registro de

LDTR

Registros de Segmentos

Sel. Seg.

15

Sel. Seg.

Direccion Base Lineal 32-bit Limite Segmento

Atributosdel Sistema

Direccion Base Lineal 32-bit Limite Segmento

Tarea (TR)

Lim. Tabla 16-bit

(Se Cargan Automaticamente)Registros de Descriptores de Segmento

Page 88: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

88 Entorno de ejecucion

GDTR (Global Descriptor Table Register)

Registro que apunta a la Tabla de Descriptores Globales (GDT). Esta compuesto de:

BASE (32 bits): Direccion lineal primer byte de la tabla.

LIMITE (16 bits): Tamano en bytes de la tabla.

Inicialmente BASE=0, LIMITE=0FFFFh (64KB). Se debe tener la tabla preparada antes de

modificar este registro.

IDTR (Interrupt Descriptor Table Register)

Registro que apunta a la Tabla de Descriptores de Interrupcion. Tiene la misma com-

posicion que el anterior.

LDTR (Local Descriptor Table Register)

Registro que apunta a la Tabla de Descriptores Locales (LDT). Al modificar el selector

se buscan los datos en la GDT y se actualizan los registros cache.

TR (Task Register)

Registro de Tarea. Apunta al segmento que contiene el Segmento de Estado de Tarea

(TSS :Task State Segment) actual. Referencia a un descriptor de la GDT.

5.3.3. Registros de control

CR0

Controla el modo de operacion y los estados del procesador. La distribucion de bits se

puede observar en la siguiente figura:

W

P

A

M

N

W

P

G

C

D

P

E

E

M

M

P

T

S

N

E

E

T CR0

31 2930 30 19 18 17 16 15 6 5 4 3 2 1 0

Los bits que lo componen tienen el siguiente significado:

PG (Paging) Activa (=1) la paginacion (en modo protegido).

CD (Cache Disable) Desactiva (=1) la memoria cache (L1 y L2).

Page 89: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Capıtulo 5. Arquitectura INTEL(Nivel Sistema) 89

NW (Not Write-Trough) Desactiva (=0) el modo write-through de escritura de las

memorias cache.

Escritura

Lectura

Microprocesador Memoria Caché L1Memoria Caché L2

Memoria Principal (RAM)

Método WRITE-BACK, solo se vuelca a la memoria principal cuando se necesita la memoria caché para otros bloques

Método WRITE-THROUGH, cada vez que se escribe se lleva hasta la memoria principal

AM (Alignment Mask) Activa el chequeo de alineacion de datos en memoria. Para

ello EFLAGS.AC=1 con CPL=3 y en modo protegido.

WP (Write Protect) Prohıbe (=1) a las tareas de super usuario escribir en las paginas

de usuario de solo lectura. (=0) Permite escribir en esas paginas.

NE (Numeric Error) Habilita (=1) el mecanismo estandar de tratamiento de errores

de la FPU. Por defecto funciona de otra manera.

ET (Extension Type) Indicaba si habıa FPU. Actualmente vale siempre 1.

TS (Task Switched) Indica cambio de tarea (=1). Permite salvar el estado de la FPU

cuando se produce un cambio de tarea.

EM (Emulation) FPU emulada (=1) por software.

MP (Monitor coprocessor) FPU presente (=1). Auto-excluyente con EM.

PE (Protected Enable) Activa el MODO PROTEGIDO (=1).

CR1

Registro de 32 bits reservado.

CR1

31 0

Page 90: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

90 Entorno de ejecucion

CR2

Registro de 32 bits que indica la direccion lineal del fallo de pagina.

Direccion Lineal del Fallo de Pagina CR2

31 0

CR3

Tambien llamado PDBR (Page Directory Base Register) es el registro base del direc-

torio de paginas. Contiene una direccion fısica (bits 31..12, los restantes se rellenan con

ceros).

Base del Directorio de PaginasPWT

PCD

CR3

31 12 11 5 4 3 2 0

(PDBR)

PCD (Page-Level Cache Disable) Activa (=0) la cache a nivel de paginas. Valido si

CR0.PG=1 y CR0.CD=0.

PWT (Page-Level Writes Transparent) Controla el mecanismo de write-through (=1)

o write-back (=0) a nivel de paginas. Valido si CR0.PG=1 y CR0.CD=0.

CR4

Contiene flags de control que activan algunas extensiones hardware. Los bits que lo

componen se describen a continuacion:

VME

PSE

TSD

DE

PVI

PGE

MCE

PAE

PCE

CR4Reservados (puestos a 0)

31 9 8 7 6 5 4 3 2 1 010

OSFXSROSXMMEXCPT

VME (Virtual-8086 Mode Extensions) Activa (=1) extensiones para el manejo de

excepciones e interrupciones en modo V86. Permite mejorar el rendimiento de este

tipo de aplicaciones.

PVI (Protected-Mode Virtual Interrupts) Permite el uso hardware en modo protegido

del bit EFLAGS.VIF.

TSD (Time Stamp Disable) Restringe (=1) la ejecucion de la instruccion RDTSC a

nivel 0.

Page 91: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Capıtulo 5. Arquitectura INTEL(Nivel Sistema) 91

DE (Debugging Extensions) (=1) Las referencias a los registros de depuracion DR4

y DR5 producen una excepcion de codigo de operacion no definido. (=0) Funciona

para compatibilidad.

PSE (Page Size Extensions) Permite paginas de 4MB y 4KB (=1), o solo de 4KB

(=0).

PAE (Physical Address Extensions) Activa (=1) el direccionamiento fısico de 36 bits

(solo funciona con paginacion).

MCE (Machine Check Enable) Permite (=1) la excepcion de chequeo de maquina.

PGE (Page Global Enable) Permite paginas globales (compartidas por varios usua-

rios). Ası no se borran las entradas de la TLB (es una memoria cache de traduccion

de paginas) al cambiar de tarea (mejor rendimiento).

PCE (Performance Monitoring Counter Enable) Permite (=1) la ejecucion de la

instruccion RDPMC, de lectura de contadores de monitorizacion del rendimiento, desde

cualquier nivel de privilegio. (=0) Solo desde nivel 0.

OSFXR (Operating System Support for FXSAVE and FXRSTOR instructions). In-

dica que las instrucciones FXSAVE y FXRSTOR estan presentes. Salvaran el estado de los

registros XMMn y MXCSR de las tecnologıas SSEx ademas del estado de la FPU/MMX.

OSXMMEXCPT (Operating System Support for Unmasked SIMD Floating-Point

Exceptions). No hablamos de este.

5.4. Instrucciones a nivel del sistema

La mayorıa de estas instrucciones solo pueden ejecutarse desde nivel de privilegio 0.

5.4.1. Carga y almacenamiento en registros del sistema.

LLDT r/m16 Carga el registro LDTR.

SLDT m Almacena el registro LDTR.

LGDT m16-32 Carga GDTR.

SGDT m Almacena GDTR.

LIDT m16-32 Carga IDTR.

Page 92: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

92 Instrucciones a nivel del sistema

SIDT m Almacena IDTR.

LTR r/m16 Carga el registro de tarea TR.

STR m Almacena TR.

MOV CRn,r32 Carga los registros de control CRn.

MOV r32, CRn Almacena los registros de control.

SMSW r/m16 Almacena la palabra de estado maquina (MSW).

LMSW r/m16 Carga MSW (Machine Status Word: 16 bits bajos de CR0).

CLTS Borra CR0.TS.

5.4.2. Verificacion de los privilegios de acceso

ARPL r/m16,r16 Ajusta el RPL (Requested Privilege Level) del selector de segmento

especificado.

LAR r16, r/m16 Carga los derechos de acceso (atributos del segmento). Solo Modo

Protegido.

LAR r32,r/m32 Idem.

LSL r16,r/m16 Carga el lımite del segmento apuntado por el selector especificado.

LSL r32,r/m32

VERR r/m16 Verifica segmento para lectura. EFLAGS.ZF=1 si correcto.

VERW r/m16 Verifica segmento para escritura. EFLAGS.ZF=1 si correcto.

5.4.3. Carga y almacenamiento en registros de depuracion

Existen 8 registros de depuracion DR0..DR7 de 32 bits.1

MOV DRn,r32 Carga el registro de depuracion DRn.

MOV r32,DRn Almacena el registro DRn.

1Ver Capıtulo 11 en la pagina 149.

Page 93: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Capıtulo 5. Arquitectura INTEL(Nivel Sistema) 93

5.4.4. Invalidacion de caches y TLBs

INVD Invalida la cache. No se produce un write-back. Se pierden datos.

WBINVD Invalida la cache, pero con write-back. No pierde datos.

INVLPG m Invalida una entrada de la TLB (Translation Lookaside Buffer: Bufer de

traduccion de paginas)

5.4.5. Control del procesador

HLT Para el procesador. La activacion de la patilla NMI, RESET u otras saca al

procesador de este estado.

LOCK (prefijo) Bloquea los buses. Sirve para poder ejecutar instrucciones atomicas

(indivisibles). Por ejemplo para la realizacion de semaforos2, en entornos multipro-

cesador.

RSM Retorno del modo de gestion del sistema (SMM :System Management Mode).

5.4.6. Contadores de Monitorizacion del Rendimiento

Los registros especıficos del modelo (MSR) son contadores que sirven para la verifica-

cion, depuracion y monitorizacion del rendimiento y deteccion de los errores de chequeo

de la maquina. Su numero es grande y dependen del modelo de micro. Son de 64 bits.

RDMSR (Read Model Specific Register) Carga el registro especıfico del modelo (MSR)

indicado en ECX en los registros EDX:EAX.

WRMSR Almacena en el MSR indicado por ECX el contenido de EDX:EAX. Tambien escribe

informacion en los MTRR (Memory Type Range Registers) que aparecieron a partir

del Pentium Pro.

RDPMC (Read Performance Monitoring Counter). Los 40 bits inferiores del registro

PMC indicado en ECX se copian en EDX:EAX.

2Los semaforos en el ambito del diseno de Sistemas Operativos son variables que advierten del uso

actual de un recurso del sistema por parte de alguna CPU o subsistema. Las CPUs deben consultar

esta variable antes de usar el recurso hardware, y para evitar problemas se debe hacer una lectura-

modificacion-escritura de la variable en un unico ciclo no interrumpible para evitar que entre nuestra

lectura y modificacion otra CPU pueda modificar el estado de la variable llegando a un conflicto por usar

el recurso desde dos CPUs diferentes.

Page 94: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

94 Instrucciones a nivel del sistema

RDTSC (Read Time Stamp Counter). El registro TSC (Time Stamp Counter) es un

MSR que cuenta los ciclos de reloj desde que se empezo a alimentar el microprocesa-

dor. Es un contador de 64 bits. Para poder utilizar esta instruccion debe cumplirse

que, o bien CR4.TSD = 0 (Time Stamp Disable), o bien que CR4.TSD = 1 y CPL=0. Tras

ejecutar la instruccion en el conjunto EDX:EAX se encuentra el valor de la cuenta.

Cuestion

Escribe un pequeno programa que sea capaz de esperar durante 1 segundo, sabiendo que la velocidad

de la CPU es de 3.8 GHz (3,8 109 Hercios).

Solucion

La solucion esta clara, hay que usar la instruccion RDTSC que nos devuelve en EDX:EAX el numero de

ciclos de reloj transcurridos desde que se arranco el microprocesador:

rdtsc ; EDX EAX contienen una marcamov ecx ,edxmov ebx ,eax ; La memorizo en ECX EBX

@espera:rdtsc ; Leo una nueva marcasub eax ,ebxsbb edx ,ecx ; Hallo la diferenciacmp eax ,3800000000 ; 3 800 000 000 * 1 segjbe @espera ; Repite hasta que se supere

; el numero de ciclos

Page 95: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Capıtulo 6

La memoria en modo protegido

6.1. Introduccion

La memoria en modo protegido dispone dentro de la Arquitectura Intel de dos meca-

nismos para ser accedida, uno de ellos obligatorio: la segmentacion, y el otro opcional: la

paginacion.

Segmentacion

Consiste en dividir la memoria en zonas denominadas segmentos que estaran definidas

por un origen (base), un tamano (lımite) y un conjunto de propiedades o atributos que

definiran su comportamiento. Estos segmentos de memoria permiten aislar la zona de

codigo, de datos y de pila de cada programa de forma que no puedan interferirse unos

segmentos con otros, ni unos programas con otros si no se ha definido ası. Estas propie-

dades se almacenan en unas estructuras de datos denominadas descriptores de segmento

que se encuentran situadas en unas tablas de descriptores dentro de la memoria.

El mecanismo de la segmentacion de memoria no se puede deshabilitar y trabaja con

un espacio de direcciones lineales. Es posible hacer que los segmentos se solapen bajo la

responsabilidad del programador.

La segmentacion soporta la memoria virtual1 definiendo un espacio de direcciones

virtuales mucho mas grande que el espacio de direcciones lineales. De esta manera, se

consiguen 64TB (1 TeraByte = 240 bytes) de direcciones virtuales o logicas

1Se define la memoria virtual como aquella que se presenta al programador en el entorno de ejecucion

y que no necesariamente reside en la memoria principal fısica del computador. Puede estar localizada

en la memoria masiva del sistema: disco duro, CDROM, etc.; o a traves de la red de comunicaciones

distribuida en otras maquinas.

95

Page 96: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

96 Introduccion

(214) ∗ (232) = (246) = 64TB

frente a los 4GB (232) de direcciones lineales que tiene por defecto.

Paginacion

La paginacion consiste en dividir la memoria fısica2 del sistema en bloques denomi-

nados paginas, de un tamano tıpico de 4KB, que comienzan en direcciones multiplo de

4KB. Las paginas no se solapan por definicion. La paginacion es un mecanismo opcional

que interviene despues de la segmentacion.

Las direcciones lineales generadas por el mecanismo de la segmentacion seran, si se

usa la paginacion, traducidas al espacio de direcciones fısicas. Si no se usa la paginacion

el espacio de direcciones lineales coincide con el espacio de direcciones fısicas.

Permite implementar un sistema de memoria virtual bajo demanda de paginas de

forma que el entorno de ejecucion de un programa quede mapeado en memoria tal como

se necesite. Cada segmento se divide en paginas que se almacenan en la memoria y en

el disco. El Sistema Operativo mantiene unas estructuras de datos especiales: directorio

de paginas y tablas de paginas para ser capaz de traducir las direcciones lineales en

fısicas y seguir la pista a las paginas. La ventaja fundamental de la paginacion es que

los programas no necesitan ocupar un bloque de posiciones de memoria contiguas, si no

que pueden utilizar diferentes paginas que estaran colocadas en la memoria principal de

manera que se ocupe completamente rellenando los huecos de diversos tamanos dejados

por otros programas ejecutados y finalizados en un Sistema Operativo multitarea.

Al acceder a una direccion lineal, esta se convierte en fısica. Si la pagina que incluye

esa direccion no esta en memoria fısica, se interrumpe la ejecucion (excepcion de fallo

de pagina) para leerla del disco y continuar. El intercambio de paginas (swapping) es

transparente3 a la ejecucion de los programas.

Un esquema general del funcionamiento del acceso a la memoria se puede observar en

la figura siguiente.

2Aquı entendemos por memoria fısica la memoria principal: RAM, ROM; del computador. En otras

palabras la memoria que esta conectada directamente a los buses de direcciones y datos del microproce-

sador.3Cuando el trasiego de paginas entre la memoria masiva (disco duro) y la memoria principal (RAM) es

muy frecuente ralentizando la ejecucion de los programas se habla de trashing, que significa en traduccion

literal que se le esta dando una paliza al sistema.

Page 97: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Capıtulo 6. La memoria en modo protegido 97

Global (GDT)Tabla Descripcion

Espacio DireccionesLineales

Segmento

DescriptorSegmento

Desplazamiento

Direccion Logica

Direccion Basedel Segmento

Pagina

Dir. FisicaDir. Lineal

SelectorSegmento

Dir Tabla Desplaz.

Direccion Lineal

Tabla de Paginas

Directorio Pag.

Entrada

Espacio

Fisicas

Entrada

(o Puntero Lejano (FAR))

PaginacionSegmentation

Direcciones

Pagina

6.2. Segmentacion

6.2.1. Modelos de memoria

Con la segmentacion de la memoria se pueden definir diferentes modelos de memoria

sobre los que se puede trabajar.

Modelo plano

Es un espacio de direcciones no segmentado. Necesita al menos de dos descriptores de

segmento (codigo y datos4) que tendran un tamano de 4GB cada uno empezando ambos

en la direccion lineal 0.

4La pila necesaria para el funcionamiento de cualquier programa puede utilizar el mismo descriptor

de segmento que es segmento de datos.

Page 98: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

98 Segmentacion

Espacio de Direcciones Lineales(o Memoria Fisica)

Datos y

FFFFFFFFHSegmento

LimiteAcceso

Direccion Base

Registros de

CS

SS

DS

ES

FS

GS

Codigo

0

de Codigo y DatosDescriptores de Segmento

Pila

No Presente

Modelo plano protegido

Funciona igual solo que si intentamos acceder a posiciones de memoria fısica no pre-

sentes, generara una excepcion.

Espacio Direcciones Lineales(o Memoria Fisica)

Datos y

FFFFFFFFHRegistros de

LimiteAcceso

Direccion Base

Segmento

CS

ES

SS

DS

FS

GS

Codigo

0

Descriptores deSegmento

LimiteAcceso

Direccion Base

Memoria E/S

Pila

No Presente

Modelo multi-segmentado

Los segmentos son privados y del tamano justo, aunque tambien pueden ser comparti-

dos. Cada tarea tiene su conjunto de segmentos. Se vigila si nos salimos de los segmentos

y se puede prohibir realizar determinadas acciones en algunos segmentos (solo lectura,

niveles de proteccion).

6.2.2. Direcciones logicas, lineales y fısicas

Direcciones Logicas y Lineales

La direccion logica o virtual se compone de un selector de segmento (16 bits) y de un

desplazamiento (32 bits).

El selector de segmento indexa en la Tabla de Descriptores Globales (GDT) o en la

Tabla de Descriptores Locales (LDT) actual un descriptor de segmento. Una vez com-

probado que el desplazamiento esta en los lımites del segmento y que tengamos nivel de

Page 99: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Capıtulo 6. La memoria en modo protegido 99

privilegio suficiente para acceder se le suma la direccion base y se obtiene la direccion

lineal segun se hace notar en la figura:

Desplazamiento

0

Direccion Base

Tabla Descriptores

DescriptorSegmento

31

Selector Seg.

015DireccionLogica

+

Direccion Lineal

031

Para pasar de la direccion lineal a la direccion fısica esta el mecanismo de la paginacion.

Si la paginacion esta desactivada, entonces, las direcciones lineales son directamente las

direcciones fısicas.

Direcciones Fısicas

En modo protegido se dispone de 4GB de espacio de direcciones fısicas (las que se

ponen en el bus de direcciones). Puede estar ocupado con memoria (RAM, ROM) y/o

con dispositivos perifericos de Entrada/Salida.

A partir de Pentium Pro CR4.PAE = 1 activa una extension del direccionamiento fısico

hasta 64 GB (236) aunque solamente funciona si esta activada la paginacion.

6.2.3. Registros selectores de segmento

Disponemos de 6 registros de segmento: CS, DS, ES, FS, GS, SS de 16 bits. Disponen de

una parte oculta (cache) que contiene el descriptor del segmento al que apuntan para

acelerar las referencias a memoria5.

El formato interno de los registros selectores de segmento tiene el siguiente significado

en modo protegido:

15 3 2 1 0

TI

Indice

Indicador Tabla

0 = GDT 1 = LDTNivel de Privilegio Requerido (RPL)

RPL

5El acceso a las tablas de descriptores solo ocurre cuando modificamos un selector de segmento. Las

posteriores referencias a los registros selectores de segmentos hacen uso del valor memorizado en la parte

oculta de los registros.

Page 100: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

100 Segmentacion

El ındice selecciona una de las 8192 (213) entradas (como maximo) de la GDT o una

de las 8192 (213) entradas de la LDT actual.

El indicador de tabla selecciona la tabla (a traves de GDTR o LDTR).

RPL (Requested Privilege Level) sera el nivel de privilegio solicitado para acceder al

segmento.

6.2.4. Tablas de Descriptores de segmento

La primera entrada de la GDT se usa como selector de segmento nulo. Si intentamos

acceder al segmento apuntado por el se producira una excepcion.

A continuacion mostramos el esquema de funcionamiento:

Selector deSegmento

Tabla deDescriptores

T

Primer Descriptor enGDT no se utiliza

TI = 0I

56

40

48

32

24

16

8

0

TI = 1

56

40

48

32

24

16

8

0

Globales (GDT)

Tabla deDescriptores

Locales (LDT)

Direccion Base

Limite

Registro GDTR Registro LDTR

Direccion Base

Sel. Seg.

Limite

6.2.5. Descriptores de segmento

Los descriptores de segmento son estructuras de datos que se encuentran en la GDT,

LDT o IDT (Interrupt Descriptor Table) y que describen los segmentos. El formato general

de los descriptores es:

Page 101: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Capıtulo 6. La memoria en modo protegido 101

31 24 23 22 21 20 19 16 15 1314 12 11 8 7 0

PBase 31:24 GDPL

TypeS0

31 16 15 0

Direccion Base 15:00 Limite Segmento 15:00

Base 23:16D/B

AVL

LimiteSeg.19:16

Lımite Tamano del segmento (20 bits). Si el campo G=0 se mide en bytes obteniendo

un rango de tamanos hasta 1 MB. Si el campo G=1 se mide en bloques o paginas

de 4 KB pudiendo definir tamanos de hasta 4 GB.

Base

Limite

TYPE.E=0 TYPE.E=1

0FFFFh si D/B=00FFFFFFFFh si D/B=1

Definicion del segmento, mediante la Base y el Limite

El tamano dependera del tipo de direccionamiento (32 bits si D/B=1 o de 16 bits si

D/B=0). Dependera de si se expande hacia arriba (TYPE.E=0) o de si se expande

hacia abajo (TYPE.E=1)

Base Senala la direccion lineal base del segmento (32 bits).

S (System) Cuando esta a cero indica que es un descriptor de un segmento especial del

sistema. En el siguiente epıgrafe se relacionan los segmentos del sistema.

TYPE Este campo ocupa los bits 8-11. Su significado es variable:

S=1, Bit 11 = 0 Se trata de un segmento de DATOS.

Bit 10 = A (Accessed) Indica si se ha accedido al segmento o no, tanto

para lectura como para escritura.

Bit 9 = W (Write Enable) Senala que esta permitido escribir en este seg-

mento de datos. Logicamente un valor nulo indica proteccion contra la

escritura.

Page 102: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

102 Segmentacion

Bit 8 = E (Expansion Direction) Indica la forma de interpretar el valor

del lımite: (=1) Down. Se trata de un segmento de pila. (=0) Up. Se trata

de un segmento de datos convencional.

S=1, Bit 11 = 1 Se trata de un segmento de CODIGO

Bit 10 = A (Accessed) Senala que si se ha accedido al segmento. El Sistema

Operativo lo usa y lo borra. Es un bit pegajoso.

Bit 9 = R (Read Enable) Indica que del segmento se puede leer su conte-

nido ademas de ejecutarlo.

Bit 8 = C (Conforming) Cuando esta activado las transferencias de eje-

cucion a segmentos conformados se pueden hacer manteniendo el nivel de

privilegio actual.

DPL (Descriptor Privilege Level) Nivel de privilegio del segmento. No se puede ac-

ceder al segmento si no se tiene suficiente privilegio o esta conformado.

P (Present-segment) Indica si el segmento esta en memoria. Permite un sistema de

memoria virtual basado en la segmentacion.

D/B (Default Operation Size/Default Stack Size) Tamano de operacion por de-

fecto. (=1) Direccionamiento de 32 bits y usa ESP. (=0) Direccionamiento de 16 bits

y usa SP.

G (Granularity) Granularidad. (=0) Lımite medido en bytes. (=1) Lımite medido en

bloques de 4 KB. (Se ignoran los 12 bits menos significativos del offset). Si Lımite=0

los offsets 0.. 4095 son validos.

AVL (Available to software) Disponible para su uso por parte del Sistema Operativo.

Descriptores de segmentos del sistema

Cuando el campo S=0 se trata de un segmento del sistema. En la siguiente figura se

desglosan los distintos tipos de segmentos del sistema. Se ve que en algunos de ellos hay

versiones de 32 bit y de 16 bits. Estos ultimos estan por compatibilidad con el microproce-

sador 80286 que implemento una primera version del modo de funcionamiento protegido.

Actualmente no se utilizan estos segmentos del sistema de 16 bits.

Page 103: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Capıtulo 6. La memoria en modo protegido 103

For more information on the system-segment descriptors, see Section 3.5.1., “Segment

Table 3-2. System-Segment and Gate-Descriptor Types

Campo Tipo

Decimal 11 10 9 8 Descripcion

0 0 0 0 0 Reservado

1 0 0 0 1 16-Bit TSS (Disponible)

2 0 0 1 0 LDT

3 0 0 1 1 16-Bit TSS (Ocupado)

4 0 1 0 0 16-Bit Puerta Llamada (Call Gate)

5 0 1 0 1 Puerta Tarea (Task Gate)

6 0 1 1 0 16-Bit Puerta Interrupcion (Interrupt Gate)

7 0 1 1 1 16-Bit Puerta de Excepción (Trap Gate)

8 1 0 0 0 Reservado

9 1 0 0 1 32-Bit TSS (Disponible)

10 1 0 1 0 Reservado

11 1 0 1 1 32-Bit TSS (Ocupado)

12 1 1 0 0 32-Bit Puerta Llamada (Call Gate)

13 1 1 0 1 Reservado

14 1 1 1 0 32-Bit Puerta Interrupcion (Interrupt Gate)

15 1 1 1 1 32-Bit Puerta de Excepción (Trap Gate)

Su uso y utilidad se analizara en Capıtulos posteriores.

6.3. Paginacion

6.3.1. Paginacion normal

El espacio de direcciones lineal se divide en paginas (4 KB) que se hacen corresponder

con la memoria fısica y el disco de almacenamiento masivo. La paginacion traduce la

direccion lineal en direccion fısica. Si la pagina no esta en memoria, se produce una

excepcion de fallo de pagina y se intercambia una pagina entre memoria y disco.

Para agilizar la traduccion se dispone de los TLBs (Translation Lookaside Buffers:

Buferes de Busqueda de Traduccion6) que mantienen la traduccion para las entradas

recientemente accedidas. La mayorıa de las traducciones se hacen utilizando el contenido

de las TLBs. Cuando no se encuentra la traduccion se descarta una entrada de la TLB y se

leen todas las tablas (tacceso tablas ≈ 900× tacceso TLB). Las TLBs solo se pueden modificar

con maximo privilegio (nivel 0). Se invalidan automaticamente cuando se modifica CR3 o

se conmuta de tarea, excepto para las entradas de paginas globales.

6Los TLBs son memorias asociativas integradas dentro del circuito integrado que representa el micro-

procesador, esto es, On-Chip. Los microprocesadores Pentium y Pentium Pro tienen TLBs independientes

para direcciones que apuntan a datos e instrucciones. Ademas, el segundo, distingue TLBs diferentes para

paginas de 4KB y de 4MB.

Page 104: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

104 Paginacion

La paginacion se activa poniendo CR0.PG = 1, pero antes es necesario tener preparadas

en memoria las tablas necesarias y que el registro CR3 apunte a la tabla directorio de

paginas.

En el modo de funcionamiento por defecto de la paginacion implementada en la Ar-

quitectura Intel de 32 bits se permiten paginas de dos tamanos diferentes: 4KB y 4MB.

El funcionamiento y las estructuras necesarias para el mismo se describen a continuacion:

Traduccion de paginas de 4KB

La direccion lineal es descompuesta en tres pedazos que van a indexar dos estructuras

de datos y la pagina traducida. En la tabla denominada Directorio de Paginas, que tiene

el tamano de una pagina de 4KB, se permiten un total de 1024 entradas. Esta tabla es

apuntada mediante CR3 que contiene una direccion fısica. Desde aquı se apunta a la base

(direccion fısica) de una Tabla de Paginas que es indexada por un segundo pedazo de la

direccion lineal y, finalmente, se obtiene una direccion base fısica de la pagina final. A

esta base se le anade el desplazamiento que procede de la direccion lineal.

En total tendremos 1024 entradas al directorio * 1024 entradas a la tabla = 220 paginas

de 4 KB que suman un total de 4GB de posiciones, lo que coincide con el espacio de

direcciones fısicas.

0

Directorio Tabla Desplazamiento

Directorio de Paginas

Entrada Dir.

CR3 (PDBR)

Tabla de Paginas

Entrada Tab. Pag.

Pagina 4-KBytes

Direccion Fisica

31 21 111222

Direccion Lineal

1024 PDE ∗ 1024 PTE = 220 Paginas32*

10

12

10

*32 bits alineados en multiplos de 4-KBytes

20

Traduccion de paginas de 4MB

Las paginas de 4MB son una extension que se activa con CR4.PSE = 1 (Page Size Ex-

tension) y es necesario encontrar el campo PS = 1 (Page Size) en la entrada del directorio

de paginas. En la figura se muestra la forma en la que el microprocesador trata la direc-

cion lineal de partida y como se indexan las diferentes tablas. En total tendremos 1024

Page 105: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Capıtulo 6. La memoria en modo protegido 105

entradas al directorio de paginas lo que da un maximo de 1024 paginas de 4MB que dan

la posibilidad de direccionar 4GB. Se pueden mezclar las paginas de 4KB y 4MB en el

mismo directorio de paginas.

0

Directorio Desplazamiento

Directorio de Paginas

Entrada Dir.

CR3 (PDBR)

Pagina 4-MBytes

Direccion Fisica

31 2122

Direccion Lineal

1024 PDE = 1024 Paginas

10

22

32*

*32 bits alineados en un multiplo de 4-KBytes

10

Registro CR3: Base del directorio de paginas

En el registro CR3 se almacena la direccion fısica donde se encuentra el directorio de

paginas. La pagina de 4KB donde esta contenido el directorio de paginas debe encontrarse

en memoria antes de que CR3 apunte a ella.

Base del Directorio de PaginasPWT

PCD

CR3

31 12 11 5 4 3 2 0

(PDBR)

Formato de las entradas de las tablas

Las entradas al directorio de paginas tienen el siguiente formato cuando van a apuntar

a una pagina de 4KB:

31 12 11 9 8 7 6 5 4 3 2 1 0

PS

PCA0D

PPWT

U/S

R/

WGDisponibleDireccion Base Tabla de Paginas

Entrada de Directorio de Pagina (Tabla de Paginas de 4-KBytes)

Si se trata de apuntar a una pagina de 4MB la entrada del directorio de paginas cambia

ligeramente.

31 12 11 9 8 7 6 5 4 3 2 1 0

PS

PCADD

PPWT

U/S

R/

WGDisponibleDireccion Base de la Pagina

Entrada de Directorio de Pagina (Pagina de 4-Mbytes)

22 21

ReservadoPAT

13

Page 106: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

106 Paginacion

Finalmente, la entrada a la tabla de paginas en el caso de paginas de 4KB se muestra

seguidamente:

31 12 11 9 8 7 6 5 4 3 2 1 0

PCADD

PPWT

U/S

R/

WDisponibleDireccion Base de la Pagina

Entrada de Tabla de Paginas (Pagina de 4-KBytes)

PAT

G

En las figuras anteriores aparecen una multitud de campos que ahora se explican:

Base Direccion fısica que apunta a una tabla de paginas o a una pagina. Debera ser

multiplo de 4KB o 4MB dependiendo de a quien apunte.

P (Present). Indica si la pagina esta o no en memoria. Si al acceder no esta se produce

un fallo de pagina. Este bit lo modifica el Sistema Operativo, el microprocesador

solamente lo lee.

R/W (Read/Write). Indica si se puede escribir en la pagina o tabla o es de solo lectura.

U/S (User/Supervisor). Privilegio necesario para acceder a las paginas: si vale 0 se co-

rresponde con los niveles de privilegio 0, 1, 2 de la segmentacion (supervisor); si vale

1 se corresponde con un nivel 3 (usuario).

PWT (Page-Level Write-Through). Apunta el modo de funcionamiento de la memoria

cache en la pagina a la que apunta la entrada: (=1) Write-through, (=0) Write-back.

Si CR0.CD = 1 (Cache Disable) se ignora.

PCD (Page-Level Cache Disable). Desactiva la memoria cache para la pagina en cuestion.

Si CR0.CD = 1 se ignora este campo.

A (Accessed). Indica si se ha accedido a la pagina. El micro lo pone a uno y el Sistema

Operativo lo borra. Permite algoritmos de descarte de paginas.

D (Dirty). Indica si se ha escrito en la pagina. El micro lo pone a uno cuando se escribe

en la pagina y el Sistema Operativo debera borrarlo.

PS (Page size). Tamano de la pagina apuntada: (=0) 4 KB, (=1) 4 MB si no existe

una extension del direccionamiento fısico (Physical Address Extension) CR4.PAE = 0

o 2MB si CR4.PAE=1.

G (Global). Indica pagina global. Si CR4.PGE = 1 (Page Global Enable) y G=1 no se invali-

dara la entrada de esta pagina en la TLB ni siquiera cuando cambie CR3 o se cambie

de tarea. El Sistema Operativo lo escribe y el micro lo lee.

Page 107: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Capıtulo 6. La memoria en modo protegido 107

AVL (Available to software). Disponible para el software.

PAT (Page Attribute Table). A partir del microprocesador Pentium III, este bit selecciona

una entrada en la tabla de atributos de pagina (PAT). Controla el funcionamiento

de la memoria cache junto con PCD y PWT.

6.3.2. Extension del direccionamiento fısico

En los ultimos microprocesadores disenados por Intel se ha considerado necesario au-

mentar el espacio de direcciones fısicas disponibles pasando de utilizar 32 bits (4GB) a

usar 36 bits (64GB). Para poder utilizar esta extension del direccionamiento fısico sin

cambiar el tamano de los registros, etc. se hace necesario el uso de la paginacion.

Si CR4.PAE = 1 se activa la extension del direccionamiento fısico de 32 bits a 36 bits. En

este caso la paginacion pasara a funcionar con paginas de 4KB y 2MB7. El microprocesador

proporciona 4 pines extra en el bus de direcciones.

Traduccion de paginas de 4 KB

Las entradas ocupan 8 bytes (en vez de 4). La direccion lineal de 32 bits se descompone

en cuatro pedazos que indexan 3 tablas y la pagina final. Ahora las entradas contienen

unas direcciones base de 36 bits.

0

Directorio Tabla Desplazamiento

Directorio de Paginas

Entrada Dir.

Tabla de Paginas

Entrada Tab. Pag.

Pagina 4-KBytes

Direccion Fisica

31 20 111221

Direccion Lineal

Tabla de Punteros a

Entrada P. Dir.

CR3 (PDPTR)

30 29

Directorios de Pagina

Puntero a Directorio

4 PDPTE ∗ 512 PDE ∗ 512 PTE = 220Paginas

2

9

32*

12

9

*32 bits alineados en un multiplo de 32-bytes

24

7Las nuevas paginas grandes reducen su tamano con respecto a la paginacion normal despues de un

analisis del uso que se hacıa en el software de las paginas de 4MB

Page 108: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

108 Paginacion

En total tendremos 4 entradas a la tabla de punteros a directorios de pagina * 512

entradas al directorio de paginas * 512 entradas en la tabla de paginas = 220 paginas de

4KB (4GB).

Se puede acceder a 4GB al mismo tiempo aunque no necesariamente contiguos. Para

acceder al resto de los 64GB direccionables es necesario usar otras tablas de punteros a

directorios de pagina que deberan ser apuntadas por CR3. Tambien se pueden modificar

de forma dinamica las entradas para apuntar a nuevas zonas de memoria.

Traduccion de paginas de 2 Mb

En este caso tendremos 4 punteros a directorios de pagina * 512 entradas al directorio

de paginas = 2048 paginas de 2 Mb (=4GB). El funcionamiento es similar.

0

Directorio Desplazamiento

Directorio de Paginas

Entrada Directorio

Pagina 2-MBytes

Direccion FIsica

31 2021

Direccion Lineal

Tabla de Punteros a

Entrada P. Dir.

CR3 (PDPTR)

30 29

Directorio de Pagina

Puntero aDirectorio

4 PDPTE ∗ 512 PDE = 2048 Paginas

2

32*

9

21

*32 bits alineados en uin multiplo de 32-bytes

15

Registro CR3

El formato del registro CR3 se modifica ligeramente para dar cabida a estos nuevos 4

bits:

31 0

0Direccion Base a la Tabla de punteros a Directorios de Pagina PCD

PWT

00

For Evaluation Only.

Formato de las entradas de las tablas

El significado de los diferentes campos es el mismo que en el caso de la paginacion

normal. Las entradas de las diferentes tablas para apuntar a paginas de 4KB tienen el

siguiente formato:

Page 109: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Capıtulo 6. La memoria en modo protegido 109

63 36 35 32

DireccionReservado (en 0)

Entrada a la Tabla de Punteros al Directorio de Paginas

31 12 11 9 8 5 4 3 2 0

PCD

PWT

DisponibleDireccion Base Directorio de Paginas

Base

Res.Reservado

63 36 35 32

DireccionReservado (en 0)

Entrada Directorio de Paginas (Tabla de Paginacion 4-KBytes)

31 12 11 9 8 7 6 5 4 3 2 1 0

PC0D

PPWT

Direccion Base de la Tabla de Paginas

Base

0 0 AR/

W

U/S

63 36 35 32

DireccionReservado (en 0)

Entrada de Tabla de Paginas (Pagina de 4-KBytes)

31 12 11 9 8 7 6 5 4 3 2 1 0

PCDD

PPWT

Direccion Base de la Pagina

Base

G AR/

W

U/S

Disponible

Disponible

1

1

PAT

En cuanto a las paginas de 2MB podemos ver como cambia el formato de las entradas

en la siguiente figura:

63 36 35 32

DireccionReservado (en 0)

Entrada Directorio-Pagina (Pagina 2-MBytes)

31 12 11 9 8 7 6 5 4 3 2 1 0

PCDD

PPWT

Dir. Base Pagina

Base

G 1 AReservado (en 0)

21 20 13

R/

W

U/S

63 36 35 32

DireccionReservado (en 0)

Entrada a la Tabla de Punteros al Directorio de Paginas

31 12 11 9 8 5 4 3 2 0

PCD

PWT

DisponibleDireccion Base Directorio de Paginas

Base

Res.Reservado

Disponible

1

1

PAT

Page 110: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

110 Paginacion

Page 111: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Capıtulo 7

Proteccion en el acceso a memoria

7.1. Introduccion

La proteccion limita el acceso a memoria y E/S1. Esta proteccion es necesaria para la

implementacion de Sistemas Operativos multitarea y multiusuario. Debe impedir que un

programa (proceso, tarea, thread, etc.) pueda acceder involuntaria o voluntariamente a

los segmentos de codigo, datos o pila de otro, si el programador de la segunda aplicacion

no decidio que ası fuera.

La proteccion permite a las aplicaciones utilizar codigo del Sistema Operativo de forma

controlada. Sirve tambien para localizar problemas de diseno y bugs en las aplicaciones.

La comprobacion (nivel de privilegio, lımites, tipos, puntos de entrada a procedimientos,

conjunto de instrucciones empleado) se realiza de forma paralela a los accesos de memoria

y no afectan al rendimiento. Cualquier violacion de los privilegios produce una excepcion.

Segmentacion de la memoria

La proteccion en la segmentacion se activa en el momento en el que conmutamos

al modo de funcionamiento protegido. Este se activa con CR0.PE = 1 (Protected Enable).

Proporciona 4 niveles de privilegio, de 0..3, de mayor a menor privilegio.

Se puede desactivar parte de la proteccion asignando nivel 0 a todos los selectores

(RPL=0) y descriptores de segmentos (DPL=0). Las comprobaciones de lımite, tipo, etc

no pueden desactivarse.

1La proteccion a E/S se analiza con detalle en el Capıtulo dedicado a las Tareas.

111

Page 112: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

112 Proteccion en la segmentacion

Paginacion de la memoria

La proteccion en la paginacion se activa en cuanto activamos la paginacion con CR0.PG = 1.

Existen dos niveles de privilegio: usuario y supervisor. Estos se definen a traves del campo

U/S de las entradas del directorio de paginas y de las tablas de paginas.

Se puede desactivar haciendo CR0.WP = 0 (Write Protection) y en cada entrada de las

tablas de paginas R/W=1 y U/S=1.

7.2. Proteccion en la segmentacion

La proteccion en la segmentacion se consigue mediante 4 niveles de privilegio. El

nucleo del Sistema Operativo deberıa residir en el nivel 0, que es el de maximo privilegio

y proteccion. Los servicios del Sistema deberıan tener un nivel de privilegio inferior (nivel

1 o 2) y las aplicaciones de los usuarios el menor nivel de privilegio (nivel 3). En la figura

se representan en forma de anillos los distintos niveles de proteccion.

Nivel 0

Nivel 1

Nivel 2

Nivel 3

Anillos de proteccion

Nucleo

ServiciosSistema Operativo

Sistema

Operativo

Aplicaciones

Para poder acceder a la memoria es necesario definir los niveles de privilegio a traves

de una serie de campos:

Nivel de privilegio actual (CPL:Current Privilege Level). Se encuentra en CS y SS.

Coincide con el nivel de privilegio del segmento de codigo en ejecucion. Se cambia

al transferir el control a un segmento de codigo con diferente nivel (mas seguro),

excepto con segmentos conformados (accesibles desde cualquier nivel)

Nivel de privilegio del descriptor (DPL:Descriptor Privilege Level). Coincide con el

menor nivel de privilegio con el que puede accederse a un segmento.

Nivel de privilegio solicitado o requerido (RPL:Requested Privilege Level). Es el que

se situa en el registro selector de segmento cuando se pretende acceder a un dato o

se pretende ejecutar una zona de codigo.

Page 113: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Capıtulo 7. Proteccion en el acceso a memoria 113

Existen unas reglas de acceso que emplean estos tres campos. Estas reglas distinguen

el acceso a segmentos de datos del acceso a segmentos de codigo.

7.2.1. Acceso a segmentos de datos

La regla de acceso que debe cumplirse numericamente es:

DPL ≥ max(RPL, CPL)

En la figura tenemos un ejemplo de acceso a segmentos de datos:

El segmento de codigo A puede acceder al segmento de datos E empleando el selector

de segmento E1 ya que se cumple la regla: 2 ≥ max(2, 2).

El segmento de codigo B puede acceder al segmento de datos E empleando el selector

de segmento E2 ya que 2 ≥ max(1, 1).

El segmento de codigo C no puede acceder al segmento de datos E usando el selector

de segmento E3 ya que 2 < max(3, 3).

D no puede acceder a E usando E3 ya que 2 < max(3, 0).

Segmento

Privilegio Minimo

Privilegio Maximo

Datos E

3

2

1

0

CPL=1

CPL=3

CPL=0

DPL=2CPL=2

Sel. Segmento E3RPL=3

Sel. Segmento E1RPL=2

Sel. Segmento E2RPL=1

SegmentoCodigo C

SegmentoCodigo D

SegmentoCodigo A

SegmentoCodigo B

7.2.2. Acceso a segmentos de codigo

El acceso a segmentos de codigo se hace mediante las instrucciones JMP, CALL, RET,

INT n, IRET y todos los mecanismos de excepcion e interrupciones.

En particular, las instrucciones JMP y CALL pueden realizar dos tipos de saltos: directos

o indirectos, dependiendo del tipo de descriptor al que apunten.

Page 114: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

114 Proteccion en la segmentacion

Saltos Directos:

• Apunta a un descriptor de segmento de codigo diferente del actual.

Saltos Indirectos:

• Apunta a un descriptor de puerta de llamada (Call Gate), que apuntara a su

vez a un segmento de codigo.

• Apunta a un Segmento de Estado de Tarea (TSS: Task State Segment) que

apunta a un segmento de codigo. Se vera en el Tema de Tareas.

• Apunta a una puerta de tarea (Task Gate) que apunta a un TSS que apunta a

un segmento de codigo. Se vera en el Tema de Tareas.

Llamadas o saltos directos

Solo se comprueba en las llamadas intersegmento (CALL FAR, JMP FAR).

SegmentoCodigo C

Privilegio Minimo

Privilegio Maximo

CPL=3

Segmento CodigoNo Conformado

Segmento Codigo

Conformado

3

2

1

0

CPL=2DPL=2

DPL=1

Sel. Segmento D1RPL=2

Sel Segmento D2RPL=3

Sel. Segmento C2RPL=3

Sel. Segmento C1RPL=2

SegmentoCodigo B

SegmentoCodigo A

SegmentoCodigo D

Se diferencian las reglas de acceso dependiendo de si el segmento de codigo al que se

llama esta conformado o no (Bit C: Conforming del descriptor de segmento de codigo).

Segmentos no conformados. El nivel de privilegio actual, CPL, no cambia por estar

en el mismo nivel.

CPL = DPL, y RPL ≤ CPL

Page 115: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Capıtulo 7. Proteccion en el acceso a memoria 115

• Desde el segmento de codigo A se puede saltar al segmento de codigo C utili-

zando el selector de segmento C1 porque (2 = 2) y (2 ≤ 2)

• Desde el segmento de codigo B no se puede saltar al segmento de codigo C

usando el selector de segmento C2 porque (3 = 2) y (3 ≤ 3)

Segmentos conformados. El nivel de privilegio actual, CPL, no cambia.

CPL ≥ DPL

• Desde el segmento de codigo A se puede saltar al segmento de codigo confor-

mado D usando el selector de segmento D1 ya que (2 ≥ 1)

• Desde el segmento de codigo B se puede saltar al segmento de codigo confor-

mado D utilizando el selector de segmento D2 ya que (3 ≥ 1)

Llamadas o saltos indirectos: puertas de llamada

Facilitan la transferencia de control entre distintos niveles de privilegio. Tambien se

usa para transferir el control entre aplicaciones de 32 y 16 bits. Las puertas de llamada

son descriptores del sistema que pueden residir en la GDT o en la LDT.

31 16 15 1314 12 11 8 7 0

PDesplazamiento en segmento 31:16DPL

Type

0

31 16 15 0

Selector Segmento Desplazamiento en segmento 15:00

Cont.

0011

PDPL

Puerta ValidaNivel de Privilegio del Descriptor

Param.

456

0 0 0

En el formato de la puerta de llamada:

Se especifica el segmento de codigo a saltar mediante un selector de codigo.

Se define el punto de entrada en el segmento de codigo. Esto significa que se ignora

el desplazamiento codificado en la instruccion.

Se especifica el nivel de privilegio del descriptor (DPL) que se usara en las reglas de

acceso.

Se indica el numero de parametros a copiar entre las pilas de diferente nivel de

privilegio cuando se produce un cambio de pila.

Page 116: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

116 Proteccion en la segmentacion

Se senala el tamano de los datos que se copian entre pilas. Es to se distingue con el

campo TYPE que define el tipo de puerta de llamada: 16 vs. 32 bits Call Gate.

El modo de acceso se puede observar en la siguiente figura donde usando unicamente

el selector de segmento que apunta al descriptor de la puerta de llamada, se obtienen el

nuevo segmento y el nuevo desplazamiento del punto de entrada.

DesplazamientoSelector Segmento

Puntero lejano a la Puerta de Llamada

Requerido pero no utilizado por el procesador

Puerta-Llamada

Descriptor

DescriptorSegmento-Codigo

Tabla de Descriptores

Desplazamiento

Base

Base

Desplazamiento

Base

Selector Segmento

+

Punto de Entrada al Procedimiento

Las reglas de acceso que se deben cumplir son las siguientes:

CPL ≤ DPLpuerta de llamada; RPL ≤ DPLpuerta de llamada

Ademas si el segmento esta conformado debera cumplirse que DPL ≤ CPL. Si el

segmento no esta conformado entonces la regla es diferente dependiendo de si se produce

el salto con la instruccion CALL (DPL ≤ CPL) o con la instruccion JMP (DPL = CPL).

SegmentoCodigo A

Hay Conmutacion

No Hay Conmutacion

de Pila

Privilegio Mínimo

Privilegio Maximo

3

2

1

0

PuertaLlamada A

PuertaLlamada B

Segmento CodigoNo Conformado

Segmento CodigoConformado

Selector Puerta ARPL=3

Selector Puerta B1RPL=2

Selector Puerta B2RPL=1

CPL=3

CPL=2

CPL=1

DPL=3

DPL=2

DPL=0 DPL=0

Selector Puerta B3RPL=3

SegmentoCodigo B

SegmentoCodigo C

SegmentoCodigo D

SegmentoCodigo E

de Pila

Page 117: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Capıtulo 7. Proteccion en el acceso a memoria 117

Ası a modo de ejemplo:

A la puerta de llamada A se accede desde cualquier nivel por que CPL ≤ 3

A la puerta de llamada B solo se accede desde los niveles 0, 1 y 2.

Las puertas de llamada permiten a un segmento de codigo tener diferentes niveles de

privilegio.

Cuando a traves de una puerta de llamada se accede a un segmento no conformado

de mayor privilegio (DPL < CPL) se produce una conmutacion de pila. Se hace para

dar un grado mas de proteccion ya que se podrıa dar el caso de que se llene la pila o se

meta en ella informacion extra que haga funcionar mal el Sistema.

Hay una pila para cada nivel de privilegio (0..3) dentro de cada tarea. El conjunto

SS:ESP apunta a la pila de nivel 3 cuando estamos en nivel 3. Los punteros para las pilas

de otros niveles estan almacenados en el segmento de estado de tarea (TSS). Son valores

de solo lectura. Cada vez que hay una conmutacion de pila a un nivel superior se utiliza

una nueva pila usando los valores del TSS actual. Todo esto lo define el Sistema Operativo.

Las pilas deben tener el tamano suficiente.

Parametro 1

Parametro 2

Parametro 3

SS Llamante

ESP Llamante

CS Llamante

EIP Llamante

Pila del Procedimiento Llamado

ESP

ESP

Pila del Procedimiento Llamante

Parametro 1

Parametro 2

Parametro 3

El procedimiento que sigue el microprocesador para la conmutacion de pila es el siguiente:

Se usa el DPL del segmento llamado -via puerta de llamada- para leer el nuevo

puntero de pila del TSS actual.

Se comprueba el segmento de pila y los privilegios.

Se salvan los valores viejos de SS:ESP en la nueva pila.

Se copia el numero de parametros especificados en Contador de Parametros de la

pila vieja a la nueva.

Page 118: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

118 Proteccion en la paginacion

Se guarda en la pila nueva el puntero de retorno CS:EIP y continua la ejecucion.

Si el acceso a la puerta de llamada se realizo mediante una instruccion CALL entonces

el retorno de la subrutina o procedimiento llamado se hace de la siguiente manera:

Si es una instruccion RET NEAR, solo se comprueban los lımites (que EIP este dentro

del segmento).

Si es una instruccion RET FAR, pero se retorna a un segmento de codigo con el mismo

privilegio, se recupera CS:EIP y se comprueban los privilegios.

Si se trata de una instruccion RET FAR, pero retornando a un segmento con distinto

nivel de privilegio el proceso se describe a continuacion. Solo se puede retornar a un

segmento de menor nivel de privilegio (DPL > CPL).

• Se comprueba el nivel de privilegio de retorno.

• Se cargan CS, EIP y se comprueban.

• Se leen SS:ESP viejos y se comprueban.

• Se ajusta ESP con el numero de bytes indicados (RET n) y se comprueba.

• Se comprueban todos los registros de segmento (si DPL < CPL, excepto si

esta conformado, se borra el registro de segmento: descriptor nulo)

7.3. Proteccion en la paginacion

Cada referencia a memoria se comprueba antes de comenzar el ciclo de lectura/escri-

tura. Si falla el chequeo se produce fallo de pagina.

La proteccion consiste en:

La restriccion del dominio direccionable: usuario/supervisor a traves del campo U/S

de cada entrada de la tabla de paginas.

La comprobacion del tipo de pagina (solo lectura vs. lectura/escritura) es aplicable

en modo usuario. Tambien en modo supervisor si CR0.WP = 1.

Al acceder a una pagina hay dos comprobaciones de proteccion, una a nivel entrada

en el directorio de paginas y otra en la entrada de la tabla de paginas. Siempre vence

supervisor y solo lectura (si usuario).

Si combinamos la proteccion en la segmentacion y en la paginacion, se comprueba

primero en la segmentacion. Si falla se produce una excepcion en el mecanismo de la

Page 119: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Capıtulo 7. Proteccion en el acceso a memoria 119

segmentacion. Una vez corregido el problema por el Sistema Operativo, se comprueba la

proteccion en el mecanismo de la paginacion.

Algunos Sistemas Operativos (Linux) restringen la proteccion del acceso a memoria al

empleo de la paginacion, no siendo por ello menos seguros.

Page 120: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

120 Proteccion en la paginacion

Page 121: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Capıtulo 8

Gestion de interrupciones y

excepciones

8.1. Introduccion

Las interrupciones y las excepciones son transferencias de control forzadas por deter-

minados sucesos. Los procedimientos que son ejecutados se llaman subrutinas de atencion

a la interrupcion (ISR:Interrupt Service Routine) o excepcion. Al retornar de la subrutina

(instruccion IRET) se vuelve al programa que se estaba ejecutando. Su ejecucion debe ser

transparente a la ejecucion del programa principal1.

Un ejemplo de interrupcion Imaginen que estan estudiando en su casa. Quiza sea

mucho imaginar. En un momento determinado alguien llama a la puerta: ustedes estan

recibiendo una peticion de interrupcion. Es mas urgente ver quien llama a la puerta que

seguir estudiando. Se levantan del lugar de estudio y abren la puerta de su casa: es el

vecino que, como casi todas las veces, necesita algun ingrediente para cocinar y nos entre-

tiene contandonos alguna historia. Entretanto, alguien llama al telefono: se trata de otra

interrupcion. En este caso tenemos una interrupcion anidada. Le indicamos al vecino que

espere un momento, que llaman al telefono. Atendemos la llamada de telefono: son tus

padres que avisan que vienen. Al colgar el telefono, estamos retornando de interrupcion,

acudimos a la puerta a continuar la conversacion con el vecino. Al irse el vecino retorna-

mos de interrupcion y regresamos de nuevo a la mesa de estudio, quizas con mas ganas

de estudiar que antes, o definitivamente sin ninguna gana despues del pequeno jaleo que

se ha montado en un momento en casa.

1Esto significa que las ISRs deberan guardar en la pila todos aquellos registros que se vayan a utilizar,

al principio de la rutina, y recuperarlos antes de retornar.

121

Page 122: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

122 Introduccion

8.1.1. Clasificacion

La Arquitectura Intel implementa interrupciones vectorizadas, lo que significa que

existe una tabla que contiene las direcciones de salto que se deben leer cuando se produce

una interrupcion o excepcion determinada. La mejor manera de empezar a hablar de las

interrupciones y excepciones es clasificarlas:

Interrupciones

Basicamente hablamos de interrupciones cuando es algo externo al microprocesador

el causante de la misma. Estas pueden ser:

Externas. Las produce algun dispositivo periferico conectado al microprocesador a

traves de las patillas de interrupciones del mismo.

• Patilla /NMI (Non Maskable Interrupt). Interrupcion no enmascarable. Se

activa por flanco y se memoriza un nivel de peticiones. Su atencion se realiza

mediante el vector no 2.

• Patilla /INTR. Interrupcion enmascarable con EFLAGS.IF = 0. Es activa por

nivel. Vector entre 0 y 255. Ver gestion de interrupciones mas adelante.

Internas. Generadas por software por medio de la instruccion INT n.

Excepciones

Las excepciones son situaciones provocadas por el propio funcionamiento del micro-

procesador.

Hardware.

• Faults. Se producen antes de ejecutar la instruccion. CS:EIP se guarda en la

pila y apunta a la direccion que produjo el fallo. Se reintentan al retornar de

la excepcion.

• Traps. Se producen despues de la ejecucion de la instruccion. CS:EIP apunta

a la instruccion siguiente. Algunos traps permiten continuar la ejecucion del

programa, otros no.

• Aborts. Cuando hay errores graves (errores hardware, valores ilegales o no

consistentes en las tablas). No se puede continuar la ejecucion del programa.

No siempre se puede precisar la localizacion exacta.

Software. Excepciones como: INTO, INT3, BOUND, INT n.

Page 123: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Capıtulo 8. Gestion de interrupciones y excepciones 123

8.1.2. Vectores de interrupcion y excepcion

Distinguen el tipo de interrupcion o excepcion producida. El vector es colocado en el

bus de datos cuando se trata de una interrupcion externa (/INTR) para que el micropro-

cesador la reconozca. Hay 32 vectores preasignados/reservados. Los vectores del 32 al 255

pueden ser empleados por el usuario.

Vector Descripcion Tipo Codigo Fuente

No Error

0 #DE Error en division Fault No Instrucciones DIV e IDIV

1 #DB Depuracion Fault No Referencias a codigo o datos o INT 1.

/Trap

2 - Interrupcion NMI Interrupt No Interrupcion externa no enmascarable.

3 #BP Breakpoint Trap No Instruccion INT 3.

4 #OF Desbordamiento Trap No Instruccion INTO.

5 #BR Rango BOUND excedido Fault No Instruccion BOUND.

6 #UD Codigo invalido Fault No Instruccion UD2 o codigo invalido.

7 #NM No hay coprocesador Fault No Instruccion FPU.

8 #DF Doble Fallo Abort Si Cuando hay una excepcion dentro

(Cero) de una excepcion

9 Acceso de la FPU fuera Fault No Instruccion FPU.

del segmento

10 #TS TSS no valido Fault Si Acceso a TSS o conmutacion de tarea.

11 #NP Segmento no presente Fault Si Acceso a registros de segmento.

12 #SS Fallo en segmento de pila Fault Si Operaciones con la pila o SS.

13 #GP Fallo de proteccion general Fault Si Cualquier referencia a memoria.

14 #PF Fallo de pagina Fault Si Cualquier referencia a memoria.

15 - (Reservada) No

16 #MF Fallo de la FPU Fault No Instruccion matematica FPU.

17 #AC Chequeo de alineamiento Fault Si Cualquier referencia a memoria.

(Cero)

18 #MC Chequeo de maquina Abort No Dependiente del modelo.

19 #XF Excepcion FPU instr. SIMD Fault No Instrucciones SSE y SSE2.

20-31 - Reservado

32- 255 - Para el usuario Interrupt Instruccion INT n o interrupcion externa

8.1.3. Prioridades

Cuando se produce mas de una condicion de interrupcion y/o excepcion hay un orden

establecido de prioridades para ser atendidas. En la tabla siguiente se describen de mayor

a menor las prioridades. En el caso de que dos interrupciones tengan la misma prioridad,

el orden de atencion vendra determinado por el modelo de microprocesador.

Page 124: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

124 Gestion en modo real

Prioridad Descripciones

1 (Mayor) Reset Hardware y Chequeos de la Maquina

- RESET

- Chequeo de la Maquina

2 Excepcion al Conmutar de Tarea

- Bit TSS.T = 1

3 Hardware Externo

- FLUSH

- STOPCLK

- SMI

- INIT

4 Excepciones en la Instruccion Previa

- Breakpoints

- Excepciones de Depuracion (EFLAGS.TF=1 o breakpoint de datos o E/S)

5 Interrupciones Externas

- Interrupcion NMI

- Interrupciones Enmascarables

6 Fallos en la Busqueda de la Siguiente Instruccion

- Breakpoint de Codigo

- Violacion del Limite en Segmento de Codigo

- Fallo de Pagina de Codigo

7 Fallos al Decodificar la Siguiente instruccion

- Longitud de Instruccion > 15 bytes

- Codigo de Operacion Ilegal

- Coprocessor No Disponible

8 (Menor) Fallos al Ejecutar la Instruccion

- Desbordamiento

- Error en Bound

- TSS No Valido

- Segmento No Presente

- Fallo de Pila

- Fallo de Proteccion General

- Fallo de Pagina de Datos

- Chequeo de Alineamiento

- Excepcion FPU

- Excepcion SIMD FPU

8.2. Gestion en modo real

8.2.1. Tabla de Vectores de Interrupcion

En modo real se habla de una tabla de vectores de interrupcion. Esta tabla esta situada

en la direccion 0000:0000 de la memoria. En modo real las direcciones fısicas y lineales

coinciden. La tabla tendra 256 entradas y cada entrada ocupara 4 bytes. Esto hace que

se necesite 1KB para almacenar la tabla.

8.2.2. Funcionamiento

El funcionamiento varıa ligeramente dependiendo del tipo de interrupcion o excepcion.

Page 125: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Capıtulo 8. Gestion de interrupciones y excepciones 125

Interrupciones vectorizadas enmascarables.

Los pasos que se siguen son:

1. Se activa la patilla /INTR.

2. Si EFLAGS.IF = 1 se atiende, si no se ignora.

3. Se termina de ejecutar la instruccion en curso, excepto si la instruccion lleva el

prefijo de repeticion REP, en cuyo caso se interrumpe la repeticion.

4. Se guardan en la pila IP, CS y FLAGS.

5. Se lee del bus de datos (pines D0..D7) del microprocesador un vector de interrup-

ciones de 8 bits que coloca el dispositivo periferico. Lo llamo VECTOR.

6. Se direcciona con 0000:VECTOR*4 la tabla de vectores de interrupcion que se encuentra

en el primer KB de la memoria.

7. Se cargan IP = [0000:VECTOR*4] y CS = [0000:VECTOR*4+2].

8. Se pone EFLAGS.IF = 0 automaticamente para evitar el anidamiento2 de interrupcio-

nes y EFLAGS.TF = 0.

9. Se salta a CS:IP y se ejecuta la subrutina de servicio a la interrupcion (ISR).

10. Cuando en la ISR se ejecuta la instruccion IRET de retorno de interrupcion se recupe-

ran de la pila FLAGS, CS e IP y se continua la ejecucion del programa interrumpido.

El servicio de atencion a las interrupcion no debe modificar ningun registro. Los re-

gistros que se usen se deben guardar en la pila al entrar en la subrutina y recuperar justo

antes de salir.

Interrupcion /NMI

Igual pero no hay enmascaramiento posible y siempre se usa el vector de interrupcion

2 (no se lee del bus de datos).

2Si se quieren anidar las interrupciones, es posible hacerlo poniendo ese bit a uno al entrar en la rutina

de servicio de la interrupcion.

Page 126: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

126 Gestion en modo real

8.2.3. Ejemplo

Listado 8.1: Ejemplo de uso de las interrupciones.[BITS 16]

[SEGMENT CODIGO] ; ------------------------------------------..start:

5 ; Inicio vector de interrupciones no 100cli ; Desactivo las interrupciones

mov ax,CODIGOmov [0:100*4+2] , ax ; Vector de interrupciones 100

10 ; Primero el segmentomov ax,ISRmov [0:100*4] , ax ; Segundo el desplazamieto

sti ; Activo las interrupciones15

; Devuelvo el control al sistema operativo; dejando el programa residente

mov dx,FIN_TSR ; Terminate and Stay Resident20 ; Solo en MSDOS

int 27h ; Continua el S.O. dejando el; programa en memoria

; Servicio de interrupcion ----------------------------------25 ISR: pushad ; Guardo los registros a usar

; Cuidado con los registros; de segmento , pushad no los; guarda

push ds

30 mov ax, DATOSmov ds,ax

fsave [ds:COPRO] ; Guardo el estado de la FPUfinit ; y la inicio. Si se usa

35

; .... Aqui lo que tenga que ser ......

frstor [ds:COPRO] ; Recupero el estado de la FPU; Cuidado con los registros de

40 ; segmentopop ds

popad ; Recupero los registros

iret ; Retorno de interrupcion45

[SEGMENT DATOS] ; -------------------------------------------COPRO RESW 54 ; Total 108 bytesFIN_TSR

50 [SEGMENT PILA STACK] ; --------------------------------------RESW 512

Page 127: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Capıtulo 8. Gestion de interrupciones y excepciones 127

8.3. Gestion en modo protegido

8.3.1. Tabla de Descriptores de Interrupcion: IDT

En modo protegido la Tabla de Vectores de Interrupcion pasa a llamarse Tabla de

Descriptores de Interrupcion.

La IDT puede estar situada en cualquier lugar de la memoria segun lo indique el regis-

tro IDTR. Este registro se modifica con las instrucciones LIDT (lectura) y SIDT (escritura),

siempre que se tenga un nivel de privilegio CPL=0.

Limite IDTDireccion Base IDT

+Tabla de Descriptoresde Interrupcion (IDT)

Puerta para

0

Registro IDTR

Interrupcion #n

Puerta paraInterrupcion #3

Puerta paraInterrupcion #2

Puerta paraInterrupcion #1

151647

031

0

8

16

(n−1)∗ 8

El tamano de la IDT se define tambien con el registro IDTR pero su tamano maximo

sera de 2KB en el caso de completar las entradas para los 256 vectores de interrupciones

posibles. Cada entrada sera un descriptor del sistema y ocupara 8 bytes.

Descriptores de IDT

La IDT solo puede contener los siguientes tipos de descriptores:

Descriptor de puerta de interrupcion (Interrupt Gate).

31 16 15 1314 12 8 7 0

PDesplazamiento 31..16D

PL

0 4

31 16 15 0

Selector de Segmento Desplazamiento 15..0 0

011D

Puerta de Interrupciones

45

0 0 0

Descriptor de puerta de excepcion (Trap Gate).

Page 128: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

128 Gestion en modo protegido

31 16 15 1314 12 8 7 0

PDesplazamiento 31..16D

PL

0 4

31 16 15 0

Selector de Segmento Desplazamiento 15..0 0

111D

Puerta de Excepcion

45

0 0 0

Descriptor de puerta de tarea (Task Gate), que se analizara en el Capıtulo siguiente.

31 16 15 1314 12 8 7 0

PD

PL

0 4

31 16 15 0

Selector de Segmento TSS 0

1010

Puerta de Tarea

8.3.2. Funcionamiento

Los pasos que se siguen son:

1. Se activa la patilla /INTR.

2. Si EFLAGS.IF = 1 se atiende, si no se ignora.

3. Se termina de ejecutar la instruccion en curso, excepto si la instruccion lleva el

prefijo de repeticion REP, en cuyo caso se interrumpe la repeticion.

4. Se salvan en la pila los registros EIP, CS y EFLAGS de la tarea actual. Dependiendo

del nivel de privilegio con que se pretenda acceder a la subrutina de tratamiento de

interrupciones se usara la pila actual

Codigo Error

EFLAGS

CS

EIP

ESP Despues delSalto a la Subrutina

Uso de la Pila cuando no hayCambio de Nivel de Privilegio

Pila de la Subrutina y del Procedimiento Interrumpido

Salto a la SubrutinaESP Antes del

Page 129: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Capıtulo 8. Gestion de interrupciones y excepciones 129

O se conmutara a una pila de nivel superior, en cuyo caso se guardaran tambien los

registros SS y ESP.

CS

Codigo Error

ESP Antes delSalto a la Subrutina

EFLAGS

EIP

SS

ESP

Uso de la Pila cuando hayCambio de Nivel de Privilegio

Pila del Procedimiento Pila de la Subrutina

ESP Despues delSalto a la Subrutina

Interrumpido

5. Se lee del bus de datos (pines D0..D7) del microprocesador un vector de interrup-

ciones de 8 bits que coloca el dispositivo periferico. Lo llamo VECTOR.

6. Se direcciona la IDT segun se ve en la figura:

IDT

Puerta de Interrupcion

Destino

Selector de Segmento

GDT o LDT

Descriptor de

Vector de

Interrupciones

DireccionBase

Segmento de Codigo

InterrupcionSubrutina de

+

Segmento

o Excepcion

Desplazamiento

7. Se pone EFLAGS.IF = 0 automaticamente si se trata de una interrupcion.

Page 130: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

130 Gestion en modo protegido

8. Se ponen EFLAGS.TF = 0, EFLAGS.VM = 0, EFLAGS.RF = 0 y EFLAGS.NT = 0.

9. Se salta a la subrutina de servicio a la interrupcion (ISR).

10. Cuando en la ISR se ejecuta la instruccion IRET de retorno de interrupcion se recu-

peran de la pila los registros que se guardaron no sin antes comprobar los privilegios

(como si se tratara de una instruccion CALL), etc. y se continua la ejecucion del

programa interrumpido.

Cuando una excepcion esta relacionada con un segmento especıfico, automaticamente

se introduce en la pila un codigo de error cuyo formato es:

31 0

ReservadoIDT

TI

123

Indice Selector de SegmentoEXT

ındice del selector de segmento. Pues eso.

EXT: External event. Indica si fue un evento externo el que produjo la excepcion.

IDT: Descriptor location. Indicara que es un descriptor de la IDT cuando valga

uno. En caso contrario el descriptor estara en la GDT o en la LDT.

TI: Table index. Distinguira la localizacion del descriptor en el caso de que el bit

anterior valga cero. Estara en la GDT con un valor cero, de lo contrario estara en

la LDT.

El tamano del codigo de error sera word o dword dependiendo del tamano de la puerta

(16 o 32 bits). Este codigo se introduce en la pila, pero no se recupera con IRET (se ignora).

Con la excepcion de fallo de pagina tiene un formato diferente [5].

8.3.3. Habilitacion y deshabilitacion

Manejo de NMI multiples

Mientras se atiende una NMI el procesador deshabilita las llamadas anidadas de NMIs

hasta ejecutar IRET, aunque memoriza una peticion de NMI.

Deshabilitacion de las interrupciones enmascarables

Si EFLAGS.IF = 0 se inhiben las interrupciones externas debidas a la patilla /INTR.

Esto se hace mediante la instruccion CLI (STI pone a uno este bit). Estas instrucciones

se pueden ejecutar si tenemos un nivel de privilegio suficiente: CPL<=EFLAGS.IOPL. Sino se

produce una excepcion de Fallo de Proteccion General. Tambien se pueden cambiar con

las instrucciones POPF e IRET, pero existe la misma proteccion.

Page 131: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Capıtulo 8. Gestion de interrupciones y excepciones 131

Desactivacion de las excepciones de depuracion

Si EFLAGS.RF = 1 no se produce una excepcion de depuracion tras la ejecucion de una

condicion de breakpoint de instrucciones. El procesador pone EFLAGS.RF = 0 despues de

cada instruccion excepto con las instrucciones que provocan un cambio de tarea.

Desactivacion de excepciones e interrupciones cuando cambiamos de pila

Cuando modificamos SS, el micro inhibe las interrupciones y excepciones hasta despues

de la ejecucion de la siguiente instruccion (tıpicamente MOV ESP,... ) para evitar guardar

datos en una pila inconsistente.

Page 132: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

132 Gestion en modo protegido

Page 133: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Capıtulo 9

Gestion de tareas

9.1. Introduccion

Una tarea es una porcion del trabajo que realiza el procesador. Puede ser un programa,

un proceso, una rutina, un hilo de ejecucion (thread), etc. El objetivo es conseguir un

Sistema Operativo multitarea, es decir, que la ejecucion de una tarea no afecte o pueda

afectar al funcionamiento de otras tareas.

Es evidente que si el computador solo dispone de un microprocesador entonces las

tareas no se ejecutan simultaneamente. Sin embargo, parece que se ejecutan ası. Esto lo

consigue el Sistema Operativo mediante un proceso planificador (scheduler) de la ejecucion

de las diferentes tareas, permitiendo, que se ejecuten las tareas secuencialmente durante

un quanto de tiempo determinado (que dependera de la prioridad de las mismas).

9.2. Estructuras de datos de una Tarea

La Arquitectura Intel facilita el diseno de Sistemas Operativos multitarea mediante la

gestion hardware de tareas. Las tareas se componen de:

1. Espacio de ejecucion de la Tarea.

Que define los segmentos relacionados con una tarea concreta1.

Segmento de codigo actual.

Segmentos de pila, uno por cada nivel de proteccion (en total 4).

Segmento de datos actual.

2. El segmento de estado de tarea (TSS:Task State Segment).

1Hace referencia a los segmentos actuales de la tarea que viene siendo ejecutada. Una tarea podrıahacer uso de diferentes segmentos de codigo y datos.

133

Page 134: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

134 Estructuras de datos de una Tarea

Esta estructura especifıca el espacio de ejecucion actual de la tarea. Ademas permite

enlazar las tareas dentro de un Sistema Operativo.

De esta manera el registro de tarea TR apuntara a la tarea actual a traves de su

segmento de estado de tarea como podemos observar en la figura:

Segmentode Codigo

Segmentode PilaNivel de Priv.

Segmentode Datos

Seg. PilaPriv. Nivel 0

Segmento deEstado de Tarea

(TSS)

Registro de Tarea

CR3

Actual

Seg. PilaPriv. Nivel 1

Seg. PilaPriv. Nivel 2

Registro de Tarea

En realidad el registro de tarea TR apunta a un descriptor de un TSS. Ese descriptor

estara en la GDT. El siguiente grafico nos ayudara a clarificar estas relaciones.

Segmento LimiteSelector

+

GDT

Descriptor TSS

0

Direccion BaseR e g i s t r o

Parte InvisibleParte Visible

TSS

de Tarea

Page 135: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Capıtulo 9. Gestion de tareas 135

Descriptor del Segmento de Estado de Tarea

El formato del descriptor se muestra a continuacion, pero basicamente define el seg-

mento TSS y sus propiedades de acceso.

31 24 23 22 21 20 19 16 15 1314 12 11 8 7 0

PBase 31:24 GDPL

Type

0

0

31 16 15 0

Direccion Base 15:00 Segmento Limite 15:00

Base 23:16AVL

Limite19:16

0

1B01

Descriptor de Segmento de Estado de Tarea (TSS)

0

4

El bit B del descriptor nos indicara si esta ocupado o no esta ocupado el segmento de

estado de tarea al que se accede.

Segmento de Estado de Tarea (TSS)

El TSS almacena el estado (contexto) de las tareas. Tiene campos dinamicos, que son

actualizados cuando se cambia de tarea y campos estaticos que se definen al comenzar

una nueva tarea pero que no se modifican dinamicamente.

1. Campos dinamicos

Registros de proposito general.

Registros selectores de segmentos.

Registro EFLAGS.

Puntero de instruccion EIP.

Enlace a la tarea previa que no es otra cosa que el selector de segmento del

TSS anterior. Se actualiza solo cuando se espera retornar de una tarea (llamada

mediante la instruccion CALL, una interrupcion o una excepcion).

Page 136: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

136 Estructuras de datos de una Tarea

031

100

96

92

88

84

80

76

Direccion Base Mapa de Bits E/S

15

Selector Segmento LDT

GS

FS

DS

SS

CS

72

68

64

60

56

52

48

44

40

36

32

28

24

20

SS2

16

12

8

4

0

SS1

SS0

ESP0

Enlace a Tarea Anterior

ESP1

ESP2

CR3 (PDBR)

T

ES

EDI

ESI

EBP

ESP

EBX

EDX

ECX

EAX

EFLAGS

EIP

Bits Reservados. Poner a 0

2. Campos estaticos.

Selector que apunta al descriptor de la LDT empleada. Se permite a cada tarea

tener su propia tabla de descriptores local.

CR3. Direccion fısica del directorio de paginas. Igualmente se permite a cada

tarea tener su propio directorio de paginas.

Punteros de pila (y selectores de segmento) de nivel 0, 1 y 2.

Bit T. Cuando vale uno provoca una excepcion de depuracion cuando se cambia

de tarea.

Direccion base del mapa de acceso de entrada/salida.

Es un desplazamiento de 16 bits (<DFFFh) que apunta al mapa de permisos de

entrada salida, que esta contenido en el propio TSS. Sirve para limitar el acceso

a E/S. El tamano es variable. Es un acceso limitado a E/S para las tareas con

grano fino ya que podemos definir a que puertos se accede y a cuales no.

Page 137: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Capıtulo 9. Gestion de tareas 137

Direccion Base del Mapa de E/S

Segmento de Estado de Tarea (TSS)

64H

31 24 23 0

1 1111111

Mapa de Bits de Permisos de E/S

0

El ultimo byte delmapa de bits debetener todos losbits a uno

Si CPL>EFLAGS.IOPL se comprueba el mapa de permisos de E/S para ver si pode-

mos acceder, si no el acceso esta permitido. Cada bit del mapa se corresponde

con el permiso de acceso a un puerto (byte).

; Ejemplo:; el bit 1 del sexto byte:; indica el puerto 41 = (6 -1)*8 + 1; si vale 1 esta prohibido el acceso; si vale 0 esta permitido el acceso

Si todos los bits del puerto accedido valen 0 podemos acceder (si es de tamano

dword se representara con 4 bits), sino se producira una excepcion de protec-

cion general. Las direcciones E/S no representadas se consideran a 1, es decir

prohibidas.

Cuestion

En una aplicacion funcionando en modo protegido, tenemos un segmento de estado de tarea (TSS)

cuyo campo direccion base del mapa de E/S apunta a los siguientes datos colocados en posiciones de

memoria crecientes:

MapaES db 01101100b, 11111111b, 00000000b, 00000000b, 11111111bdb 01010101b, 10101010b, 01010100b, 10100101b, 11111111b

El flag EFLAGS.IOPL=3 y nuestro CPL=2, ¿se puede acceder a la direccion de E/S, 23 en tamano byte?

¿Porque? ¿Y a la 33 en tamano dword?¿Por que?

Y si EFLAGS.IOPL=1 y nuestro CPL=2, ¿se puede acceder a la direccion de E/S, 23 en tamano byte?

¿Porque? ¿Y a la 33 en tamano dword?¿Por que?

Solucion

En el caso de que EFLAGS.IOPL=3, se tiene acceso a la E/S desde cualquier nivel de privilegio

(CPL<=EFLAGS.IOPL), luego se podra acceder tanto a la direccion de E/S 23 en tamano byte como la

33 en tamano dword.

Page 138: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

138 Funcionamiento

En el segundo caso no se cumple que CPL<=EFLAGS.IOPL, luego se debe consultar la tabla de permisos

de E/S.

Bit 23 * Bit 36,35,34,33 ****MapaES db 01101100b, 11111111b, 00000000b, 00000000b, 11111111b

db 01010101b, 10101010b, 01010100b, 10100101b, 11111111b

El bit 23 vale 0 con lo que sı se permite el acceso en tamano byte a ese puerto. Los bits 33-36 valen

1 con lo que estara prohibido el acceso al puerto 33 en tamano dword.

Descriptor de Puerta de Tarea

Este es un descriptor especial del sistema que proporciona una forma indirecta y

protegida de acceso a una tarea. Puede residir en la GDT, LDT o IDT. El formato del

mismo se muestra a continuacion:

31 16 15 1314 12 11 8 7 0

PDPL

Type

0

31 16 15 0

Selector Segmento TSS

1010

DPLPTYPE

Nivel de Privilegio del DescriptorSegmento PresenteTipo de Descriptor

Reservado

4

0

Se puede ver que basicamente proporciona el selector del segmento de estado de tarea

al que se va a saltar. Proporciona un nivel extra de proteccion y una manera de producir

un cambio de tarea mediante el uso de las interrupciones y excepciones.

9.3. Funcionamiento

La llamada a tareas no es recursiva. Normalmente se conmuta de tarea, lo que

significa que se guarda el estado de la tarea anterior antes de comenzar con la siguiente.

Se conmuta de tarea cuando:

Se ejecuta JMP o CALL dirigido a un TSS en la GDT.

Se ejecuta JMP o CALL dirigido a una puerta de Tarea (en GDT o LDT).

Un vector de interrupcion o excepcion apunta a una puerta de tarea (en IDT).

Se ejecuta IRET y EFLAGS.NT=1 (Nested Task: tarea anidada).

Page 139: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Capıtulo 9. Gestion de tareas 139

Los pasos que se realizan son:

1. Se comprueba si la tarea actual puede conmutar de tarea

CPL≤TSS.DPL y RPL≤TSS.DPL, en los casos de llamadas JMP o CALL con un selector

de TSS.

CPL≤TaskGate.DPL y RPL≤TaskGate.DPL, en los casos de llamadas JMP o CALL con

un selector que apunte a una puerta de tarea.

En los otros dos casos siempre se produce la conmutacion.

2. Se comprueba si el nuevo TSS esta presente y tiene un lımite valido (≥67h).

3. Se comprueba que el nuevo TSS, el viejo TSS y todos los descriptores de segmentos

empleados en la conmutacion (viejos y nuevos) estan paginados en memoria.

4. Se salva el estado de la tarea actual (viejo TSS).

5. Se carga TR con el selector del nuevo TSS, se marca como ocupado y se senaliza la

conmutacion con CR0.TS = 1 (Task Switched).

6. Se carga el nuevo estado de tarea del nuevo TSS y se continua la ejecucion.

El viejo TSS se marca como disponible solo si no hay anidamiento de tareas. Si lo hay,

queda ocupado y se marca EFLAGS.NT = 1. Habra anidamiento de tarea si empleamos CALL,

interrupcion o excepcion. En la siguiente figura se muestra un ejemplo:

Tarea deNivel Superior

NT=0

Enlace a

TSS

TareaAnidada

NT=1

TSS

Tarea anidadaMas Profunda

NT=1

TSS

Tarea ejecutandoseactualmente

NT=1

EFLAGS

Registro de Tarea

Tarea PreviaEnlace aTarea Previa

Enlace aTarea Previa

En la tabla siguiente se muestra el estado de algunos de los campos utilizados al con-

mutar de tarea de diferentes maneras:

Page 140: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

140 Funcionamiento

Campo o bit Instruccion JMP Instruccion CALL Instruccion IRETBit B tarea nueva B=1 B=1 No cambia (estaba a 1)

Deberıa estar a 0 Deberıa estar a 0 Deberıa estar a 1Bit B tarea vieja B=0 No cambia B=0

Deberıa estar a 1Bit NT tarea nueva No cambia NT=1 NT=TSS-Nueva.NTBit NT tarea vieja No cambia No cambia NT=0Enlace (tarea nueva) No cambia Enlace = Selector TSS-Vieja No cambiaEnlace (tarea vieja) No cambia No cambia No cambiaCR0.TS 1 1 1

Page 141: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Capıtulo 10

Estado inicial y gestion delprocesador

10.1. Estado inicial del microprocesador

10.1.1. Introduccion

Analizamos lo que ocurre cuando el microprocesador es alimentado electricamente o

cuando se activa alguna de las patillas que provocan un reinicio del mismo.

La patilla RESET# realiza un reset hardware o reinicio del microprocesador. Este

reinicio consiste en:

1. Opcionalmente, dependiendo de como este conectado el microprocesador, se realiza

un test interno (BIST:Built-In Self Test1) del mismo que dara como resultado que

el registro EAX = 0 si todo fue bien.

2. Se inician los registros con un estado conocido y situa al procesador en modo de

funcionamiento real.

3. Se invalidan las memorias caches, TLBs, BTB (Branch Target Buffer: bufer para la

prediccion de saltos).

4. Se ejecuta la inicializacion multiprocesador a traves del bus APIC (no lo vemos).

5. Comienza la ejecucion software.

6. La FPU se inicializa con un estado conocido.

La patilla INIT# del microprocesador tiene una respuesta similar a la patilla RE-

SET#, solo que las memorias cache internas, MSRs y FPU permanecen sin cambios.

Al arrancar el registro EDX contiene la identificacion del microprocesador segun se ve

en la siguiente figura:

1Viene a durar unos 5 millones de ciclos de reloj.

141

Page 142: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

142 Estado inicial del microprocesador

31 12 11 8 7 4 3 0

EDX

Familia (1111B para la Familia del Pentium 4)

Modelo (Comenzando con 0000B)

1314

Tipo de Procesador

ModeloFamiliaVersion

ID

15

ModeloFamilia

1619202324

La primera instruccion software ejecutada esta en la direccion fısica FFFFFFF0h. En

esta direccion debera accederse a una memoria, habitualmente, de solo lectura (ROM,

EPROM, etc.).

Esta direccion se encuentra fuera del primer MB direccionable en el modo de funcio-

namiento real (modo en el que arranca). Esto lo soluciona el procesador almacenando en

CS=F000h y su Base=FFFF0000h, algo que no es coherente (EIP=FFF0h).

Una vez que se terminen las inicializaciones y comprobaciones de la ROM se hace un

salto FAR para que vuelva a ser coherente CS con su Base (parte oculta del registro).

Sera necesario en la inicializacion software crear la IDT para manejar las interrupciones

y las excepciones. Por defecto la IDT, que en modo real se denomina Tabla de Vectores de

Interrupcion, se encuentra en la direccion fısica 0. En modo protegido se puede cambiar

su localizacion. La rutina de tratamiento de NMIs (Non Maskable Interrupts) debe estar

desde el principio (en la memoria de solo lectura).

Despues se tendra que cargar el Sistema Operativo a traves del BIOS (Basic Input

Output System), que no es otra cosa que el software que se incluye en la memoria de solo

lectura.

10.1.2. Estado inicial de los registros

Los valores que mostramos a continuacion son validos para los microprocesadores

Pentium 4 y Xeon. Para otros modelos mas antiguos o nuevos debera consultarse el

manual del microprocesador.

Registros de proposito general

EFLAGS 00000002HEIP 0000 FFF0HCR0 60000010HCR2 , CR3 , CR4 00000000HCS Selector = F000H

Base = FFFF0000HLimite = FFFFHAR = Present , R/W, Accessed

SS, DS, ES, FS , GS Selector = 0000HBase = 00000000HLimit = FFFFHAR = Present , R/W, Accessed

Page 143: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Capıtulo 10. Estado inicial y gestion del procesador 143

EDX 00000 FxxHEAX 0EBX , ECX , ESI , EDI , EBP ,ESP 00000000H

Registros del sistema

Sus valores iniciales son los siguientes:

GDTR , IDTR Base = 00000000HLimit = FFFFHAR = Present , R/W

LDTR , Task Register Selector = 0000HBase = 00000000HLimit = FFFFHAR = Present , R/W

Registros de depuracion

Estos contienen los siguientes valores:

DR0 , DR1 , DR2 , DR3 00000000HDR6 FFFF0FF0HDR7 00000400H

Registros de la FPU

El software puede determinar la presencia de la FPU mediante la instruccion CPUID

y activar los flags de CR0 que senalizan la presencia de esta. El reset hardware inicializa

los registros de la FPU de forma diferente que FINIT. Si vamos a usar la FPU hay que

ejecutar primeramente FINIT.

ST0..ST7 Arranque o Reset: +0.0FINIT/FNINIT: Sin cambios

x87 FPU Control Word Arranque o Reset: 0040HFINIT/FNINIT: 037FH

x87 FPU Status Word Arranque o Reset: 0000HFINIT/FNINIT: 0000H

x87 FPU Tag Word Arranque o Reset: 5555HFINIT/FNINIT: FFFFH

x87 FPU Data Operand Arranque o Reset: 0000Hand CS Seg. Selectors FINIT/FNINIT: 0000H

x87 FPU Data Operand and Arranque o Reset: 00000000HInst. Pointers FINIT/FNINIT: 00000000H

MM0..MM7 Arranque o Reset: 0000000000000000HINIT or FINIT/FNINIT: Sin cambios

Registros SIMD

Su valor inicial es el mostrado a continuacion:

XMM0..XMM7 Arranque o Reset: 0H (128 bits)INIT: No cambian

MXCSR Arranque o Reset: 1F80HINIT: No cambian

Page 144: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

144 Gestion del microprocesador

Registros especıficos del modelo: MSRs

Algunos se inicializan y otros necesitan se inicializados por software.

Time -Stamp Counter Arranque o Reset: 0HINIT: No cambian

Contadores de rendimiento Arranque o Reset: 0Hy de seleccion de eventos INIT: No cambian

Resto de MSRs Arranque o Reset: No definidosINIT: No cambian

Memorias cache

Despues de un reset hardware estan habilitadas las caches L1 y L2 (CR0.CD=0) y todas

las lıneas son invalidas. Habrıa que configurar el funcionamiento de la cache al arrancar

(CR0.NW y PCD y PWT en la paginacion). Los MTRRs (Memory Type Range Registers) pre-

sentes a partir del Pentium Pro controlan la cache de regiones de memoria especıficas.

Habrıa que indicarlos.

Data and Code Cache , TLBsInvalid Fixed MTRRs Arranque o Reset: Desactivados

INIT: No cambianVariable MTRRs Arranque o Reset: Desactivados

INIT: No cambianMachine -Check Architecture Arranque o Reset: No definidos

INIT: No cambianAPIC Arranque o Reset: Activados

INIT: No cambian

10.2. Gestion del microprocesador

10.2.1. Conmutacion a modo de funcionamiento protegido

Antes de conmutar a modo protegido es preciso que un numero mınimo de estructuras

se encuentren en memoria:

Una nueva Tabla de Descriptores de Interrupcion, IDT, de modo protegido (2KB).

La Tabla de Descriptores Globales: GDT.

Opcionalmente, un Segmento de Estado de Tarea: TSS.

Una Tabla de Descriptores Local: LDT (opcional).

Si queremos paginacion, al menos un directorio de paginas y una tabla de paginas.

Un segmento de codigo de modo protegido.

Page 145: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Capıtulo 10. Estado inicial y gestion del procesador 145

Uno o mas segmentos de codigo que atiendan las interrupciones y las excepciones.

A continuacion el programa que conmute a modo protegido debera seguir los siguientes

pasos:

1. Desactivar las interrupciones. Se debe asegurar el software que no se van a producir

NMIs durante la conmutacion.

2. Cargar GDTR con la direccion base de la GDT.

3. Poner CR0.PE = 1 y opcionalmente CR0.PG = 1 si se quiere activar la paginacion.

4. Inmediatamente ejecutar una instruccion de salto lejano, tıpicamente un JMP FAR a

la instruccion siguiente, para vaciar la cola de instrucciones y que las instrucciones

siguientes se decodifiquen correctamente en modo protegido2 y se actualice CS. El

codigo de los pasos 3o y 4o debe estar contenido en una pagina en la que la direccion

lineal coincida con la fısica si hemos activado la paginacion.

5. Si vamos a usar una LDT, cargar LDTR.

6. Para actualizar el resto de los registros de segmento deben recargarse sus valores

o se debe conmutar a una tarea.

7. Si no hemos cambiado de tarea inicializamos la tarea con la instruccion LTR.

8. Actualizamos IDTR con la nueva tabla IDT.

9. Activamos las interrupciones.

10.2.2. Ejemplo

Este programa ejemplo de conmutacion a modo protegido esta incompleto. Se muestra

a modo de ejemplo de como se debe hacer la conmutacion:

Listado 10.1: Protegido.asm; Autor: Jesus M. Hernandez Mangas; Fecha: Enero 2004; Ensamblador: NASM

5 ; Ejemplo de conmutacion a modo protegido.[BITS 16]

[SEGMENT CODIGO]

10 ..start:

2Las instrucciones tienen diferentes codigos de operacion en modo real y en modo protegido.

Page 146: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

146 Gestion del microprocesador

cli

mov ax,DATOSmov ds,ax

15

; Preparo puntero para LGDTmov ebx , GDTmov dword [gdt_ptr],ebx ; Basemov word [gdt_ptr +4] ,5*8 ; Lımite (5 descriptores)

20

; Ejecuto LGDT de 32 bitsa32 lgdt [gdt_ptr]

; Entro en modo protegido25 mov ebx ,cr0

or ebx ,1mov cr0 ,ebx

; Borra la cola de ejecucion de instrucciones30 ; y actualiza CS

jmp far @siguiente

[BITS 32]@siguiente:

35

; Actualiza DS y ESmov cx,LINEAR_SELmov ds,cxmov es,cx

40

; Otras inicializaciones; ....

45 ; Preparo puntero para LIDTmov ebx , IDTmov dword [idt_ptr],ebx ; Basemov word [idt_ptr +4] ,5*8 ; Lımite (5 descriptores)

50 ; Ejecuto LIDT de 32 bitslidt [idt_ptr]

; ...........

55 ;-------------------------------------------------------------------; Subrutinas de atencion a las interrupciones/excepciones

isr0: pushad

; ...60 popad

iret

; .....

; ------------------------------------------------------------------65 ; Segmento de DATOS

[SEGMENT DATOS]

gdt_ptr resw 3 ; 48 bits para cargar GDTR70 idt_ptr resw 3

; Tabla de Descriptores Global (GDT) -------------------------------

Page 147: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Capıtulo 10. Estado inicial y gestion del procesador 147

GDT; Descriptor NULO

75 dw 0 ; limit 15:0dw 0 ; base 15:0db 0 ; base 23:16db 0 ; typedb 0 ; limit 19:16 , flags

80 db 0 ; base 31:24

; Descriptor segmento de datos linealLINEAR_SEL equ $-GDT

dw 0xFFFF ; limit 0xFFFFF85 dw 0 ; base 0

db 0db 0x92 ; present , ring 0, data , expand -up , writabledb 0xCF ; page -granular , 32-bitdb 0

90

; Descriptor de segmento de codigoSYS_CODE_SEL equ $-GDT

dw 0xFFFF ; limit 0xFFFFFdw 0 ; (base gets set above)

95 db 0db 0x9A ; present , ring 0, code , non -conforming , readabledb 0xCF ; page -granular , 32-bitdb 0

100 ; Descriptor de segmento de codigo para modo REAL; (16-bit , byte -granular , limit =0 xFFFF)REAL_CODE_SEL equ $-GDT

dw 0xFFFFdw 0 ; (base gets set above)

105 db 0db 0x9A ; present , ring 0, code , non -conforming , readabledb 0 ; byte -granular , 16-bitdb 0

110 ; Descriptor de segmento de datos para mode REAL; (16-bit , byte -granular , limit =0 xFFFF)REAL_DATA_SEL equ $-GDT

dw 0xFFFFdw 0 ; (base gets set above)

115 db 0db 0x92 ; present , ring 0, data , expand -up , writabledb 0 ; byte -granular , 16-bitdb 0

120 ; -------------------------------------------------------------------; Tabla de Descriptores de Interrupcion (IDT)

IDT:dw isr0 ; entry point 15:0

125 dw SYS_CODE_SEL ; selectordb 0 ; word countdb 0x8E ; type (32-bit Ring 0 interrupt gate)dw 0 ; entry point 31:16 (XXX - isr0 >> 16)

130 ; ....

Page 148: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

148 Gestion del microprocesador

10.2.3. Conmutacion a modo real

En el improbable caso de que queramos conmutar al modo de funcionamiento real, los

pasos a seguir son los siguientes:

1. Desactivamos las interrupciones.

2. Si hay paginacion

a) Ejecutamos instrucciones en una pagina en la que la direccion fısica coincida

con la lineal.

b) Nos aseguramos de que la GDT y la IDT esten en direcciones lineales que

coincidan con las fısicas.

c) Hacemos CR0.PG = 0.

d) Hacemos CR3 = 0 para borrar las TLBs.

3. Transferimos el control del programa a un segmento con un lımite de 64KB (se

actualizara CS).

4. Cargamos los registros de segmento con un descriptor en el que el lımite sea de

64KB, G=0, E=0, W=1, P=1, Base=cualquiera.

5. LIDT para situar la IDT dentro del primer MB.

6. Conmutamos a modo real: CR0.PE = 0.

7. JMP FAR para borrar la cola de instrucciones y actualizar CS.

8. Cargamos los registros de segmento con los valores apropiados.

9. Activamos las interrupciones.

Page 149: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Capıtulo 11

Depuracion y monitorizacion

11.1. Depuracion

El soporte hardware de la depuracion de aplicaciones se hace a traves de los registros de

depuracion: DR0..DR7 y de algunos registros especıficos del modelo1: MSR (Model Specific

Register). Con esto se proporciona:

1. Registros.

a) Registros de direccion del punto de ruptura (DR0..DR3). Hasta 4 puntos de

ruptura (breakpoints hardware).

b) Registro de estado de depuracion: DR6.

c) Registro de control de depuracion: DR7.

d) Registro DebugCtl (MSR).

e) Registros LastBranchToIP y LastBranchFromIP (MSR).

f ) Registros LastExceptionToIP y LastExceptionFromIP (MSR).

2. Excepciones de depuracion.

a) Excepcion de depuracion (#DB, vector 1).

b) Excepcion de punto de ruptura (#BP, vector 3): mediante la ejecucion de la

instruccion INT 3. Util si se quieren puntos de ruptura de codigo o mas de 4

breakpoints hardware .

3. Bits especiales.

1Aun a pesar de que los registros especıficos del modelo dependen del microprocesadores, existenalgunos que vienen apareciendo en todos ellos y que es de suponer seguiran existiendo en modelos futuros.Es por ello que los estudiamos.

149

Page 150: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

150 Depuracion

a) Bit TSS.T (Trap). Cuando este activado se producira una excepcion de depu-

racion al conmutar de tarea.

b) Bit EFLAGS.RF (Resume flag).

c) Bit EFLAGS.TF (Trap flag).

El depurador (debugger) sera una tarea aparte y se llamara cuando se produzca alguno

de los sucesos siguientes:

Conmutacion de tarea.

Ejecucion de la instruccion INT 3.

Ejecucion de cualquier instruccion.

Ejecucion de una instruccion en una direccion concreta.

Lectura o escritura de un byte, word o dword en una direccion concreta.

Lectura o escritura de un byte, word o dword en un puerto de E/S especıfico.

Intento de modificacion de un registro de depuracion.

11.1.1. Registros de depuracion

Se accede a ellos por medio de la instruccion MOV DRn,_ que se puede ejecutar en modo

real, modo de gestion del sistema (SMM), o modo protegido con2 CPL=0.

Registros DR0..DR3

Contienen la direccion lineal de 32 bits de cada punto de ruptura (las condiciones se

especificaran en DR7). Hay 4 puntos de ruptura hardware disponibles.

31 0

DR3Direccion Lineal del Punto de Ruptura 3

31 0

DR2Direccion Lineal del Punto de Ruptura 2

31 0

DR1Direccion Lineal del Punto de Ruptura 1

31 0

DR0Direccion Lineal del Punto de Ruptura 0

2De lo contrario se producira una excepcion del tipo: Fallo de proteccion general.

Page 151: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Capıtulo 11. Depuracion y monitorizacion 151

Registros DR4 y DR5

Registros reservados en Pentium Pro. Si CR4.DE = 1 (Debug Extensions) el acceso a estos

registros produce una excepcion #UD de codigo de operacion desconocido. Si CR4.DE = 0

entonces DR4 = DR6 y DR5 = DR7.

31 0

DR5Reservado

31 0

DR4Reservado

Registro DR6 (Estado de Depuracion)

En este registro se guarda el estado de la depuracion.

31 16 15 1314 12 11 8 7 0

DR6B0

123456910

B1

B2

B3

0 1 1BD

BS

BT

1 11 1 11Reservado (puesto a 1)

B0..B3. Condicion de breakpoint detectada. Se activan aun cuando el punto de

ruptura no este habilitado.

BD. Acceso a registro de depuracion detectado. Indica que la siguiente instruccion

accedera a un registro de depuracion (DR0..DR7). Esta prestacion solo esta activa si

DR7.GD = 1 (General Detection flag).

BS. Indica que la excepcion de depuracion se produjo por el modo paso a paso de

ejecucion (EFLAGS.TF=1) que es la excepcion de depuracion de mayor prioridad.

BT. Indica que la excepcion se produjo por una conmutacion de tarea (TSS.T = 1).

Este registro es un registro pegajoso (sticky register), lo que significa que el micropro-

cesador pone a 1 los bits, pero no los borra automaticamente. El Sistema Operativo debe

borrar estos bits.

Registro DR7 (Control de Depuracion)

Este registro controla el comportamiento del hardware de depuracion.

31 24 23 22 21 20 19 16 15 1314 12 11 8 7 0

DR7L

0

1234569101718252627282930

G

0

L

1

L

2

L

3

G

3

L

E

G

E

G

2

G

10 0 10 0

G

D

R/W

0

LEN

0

R/W

1

LEN

1

R/W

2

LEN

2

R/W

3

LEN

3

Page 152: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

152 Depuracion

L0..L3. Local breakpoint enable. Habilita el punto de ruptura correspondiente para

la tarea actual. Al conmutar de tarea se borra automaticamente.

G0..G3. Global breakpoint enable. Habilita el punto de ruptura para cualquier tarea.

LE y GE. Local and Global Exact breakpoint enable. Permite, para modo de tarea

local y global respectivamente, detectar la instruccion exacta que produjo el punto de

ruptura de acceso a datos. No soportado en Pentium Pro, Pentium II, y posteriores

debido a la ejecucion desordenada de instrucciones (Dynamic Execution) que tienen.

GD. General Detect enable. Habilita la proteccion en el acceso a los registros de de-

puracion. Se producira una excepcion de depuracion antes de ejecutar la instruccion.

Este bit se pone a 0 automaticamente cuando se entra en la rutina de tratamiento

de la excepcion de depuracion.

R/W0..R/W3. Define el tipo de breakpoint siguiendo la tabla siguiente:

R/Wn CR4.DE=0 CR4.DE=1

00 Ejecucion de instruccion Ejecucion de instruccion

01 Escritura de datos Escritura de datos

10 No definido Lectura/escritura en un puerto de E/S

11 Lectura/escritura de datos Lectura/escritura de datos

LEN0..LEN3. Tamano de la localizacion del breakpoint:

LENn Longitud

00 Byte

01 Word

10 No definido

11 Double word

Puntos de ruptura

Algunas consideraciones acerca de los breakpoints:

Los breakpoints de instrucciones necesitan tener una longitud de 1 byte (LEN=00).

Los breakpoints de datos deben estar alineados. Si son de tamano word la direccion

debe ser multiplo de 2. Si son de tamano dword la direccion debe ser multiplo de 4.

Si queremos un breakpoint de un dato no alineado, podemos construirlo con dos

breakpoints de datos alineados, aunque luego habrıa que tener en cuenta esto en el

programa de depuracion.

Page 153: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Capıtulo 11. Depuracion y monitorizacion 153

Las direcciones de E/S de 16 bits se extienden con ceros a 32 bits para los puntos

de ruptura de acceso a E/S.

11.1.2. Excepciones de depuracion

Hay dos excepciones de depuracion:

1. Excepcion de depuracion (#DB): vector 1. Cuando se produce una excepcion

hay que distinguir cual ha sido su causa.

a) Paso a Paso. Esta activo cuando EFLAGS.TF = 1. Es una excepcion tipo Trap.

No se activa el modo paso a paso hasta la 2a instruccion despues de modificar

TF. Ademas este flag se pone a cero al entrar en la rutina de excepcion. Las

instrucciones INT n, INTO desactivan TF.

b) Breakpoint de instrucciones. Se produce al intentar ejecutar una instruc-

cion situada en alguna de las direcciones apuntadas por DR0..DR3. Se genera

antes de ejecutar la instruccion (Fault). Es el breakpoint de mayor prioridad.

La rutina de excepcion debe poner EFLAGS.RF = 1 en la imagen contenida en la

pila antes de retornar. Esto evita que se vuelva a producir un breakpoint de

instruccion hasta que la instruccion que lo produjo inicialmente se haya ejecu-

tado. EFLAGS.RF=0 despues de ejecutar cada instruccion. Sin embargo, aunque

EFLAGS.RF = 1, se pueden producir en la misma direccion otros breakpoint no

de instruccion.

c) Breakpoint de datos o E/S. Se producen cuando se intenta acceder a una

direccion de memoria o E/S para leer (no la busqueda de la instruccion) o

escribir un dato. Se genera despues de ejecutar la instruccion que accede a

la direccion (Trap). El dato original se pierde, por lo que si se desea conocer

lo que valıa, habra que memorizarlo cuando se defina el breakpoint. Los bits

DR7.GE y DR7.LE son ignorados a partir del microprocesador Pentium Pro. Este

es incapaz de localizar exactamente los breakpoint de datos cuando usamos

REP STOSn o REP MOVSn.

d) Deteccion general. Si DR7.GD = 1 y se intenta acceder DR0..DR7, se produce

este tipo de excepcion. Se comprueba con DR6.BD = 1. Se produce antes de

ejecutar la instruccion (Fault).

e) Conmutacion de tarea. Se produce cuando se conmuta de tarea y TSS.T=1.

Ocurre antes de ejecutar la primera instruccion de la tarea nueva. El bit DR6.BT

lo senaliza.

Page 154: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

154 Depuracion

2. Excepcion de breakpoint (#BP): vector 3. Tiene el vector de interrupcion No

3 y la produce la instruccion INT 3. Antes de disponer de las prestaciones hardware

para depuracion era el unico mecanismo para poner breakpoints de instrucciones. Es

util si se quieren poner mayor numero que el de disponibles por hardware.

Resumen

Condicion DR6 DR7 Tipo excepcion

Excepcion paso a paso BS = 1 Trap

Breakpoint de instr. Bn = 1 (Gn o Ln = 1)

R/Wn = 0 Fault

Breakpoint escritura Bn = 1 (Gn o Ln = 1)

datos R/Wn = 1 Trap

Breakpoint lectura o Bn = 1 (Gn o Ln = 1)

escritura en E/S R/Wn = 2 Trap

Lectura/escritura datos Bn = 1 (Gn o Ln = 1)

no busqueda instr. R/Wn = 3 Trap

Acceso a registros BD = 1 Fault

de depuracion

Conmutacion de tarea BT = 1 Trap

11.1.3. MSRs para depuracion

A partir de Pentium Pro se proporcionan cinco MSRs (Model Specific Registers) para

almacenar el ultimo salto, interrupcion o excepcion ocurrido en el procesador. Se leen con

la instruccion RDMSR.

DebugCtlMSR

31 7 6 5 4 3 2 1 0

P

B

2

P

B

1

P

B

0

B

T

F

T

R

L

B

R

P

B

3

Se modifica con WRMSR y controla algunas cosas

LBR (Last Branch/Interrupt/Exception). Se almacenan las direcciones fuente y

destino del ultimo salto/interrupcion/excepcion antes de que ocurra una excepcion

de depuracion, momento en el que automaticamente se borra este flag.

Page 155: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Capıtulo 11. Depuracion y monitorizacion 155

BTF (Single Step on Branches). Cuando se activa, el micro considera que EFLAGS.TF

activa el modo paso a paso de un salto a otro en vez de instruccion a instruccion.

Se borra automaticamente cuando ocurre una excepcion de depuracion.

PBn (Performance Monitoring/Breakpoint pins). Hace que las patillas BP0#..BP3#

del micro indiquen si hubo una excepcion de depuracion correspondiendose con

DR0..DR3.

TR (Trace Messages Enable). Activa que el micro envıe por el bus las direcciones

fuente/destino del ultimo salto/interrupcion/excepcion. Para depuracion desde un

dispositivo externo.

LastBranchToIP/ LastBranchFromIP

Direccion a la que se salta y Direccion de la instruccion de salto

LastExceptionToIP/ LastExceptionFromIP

Idem para interrupciones y excepciones. Estos 4 ultimos registros de 32 bits permiten

la depuracion hardware hacia atras (backtrace), permitiendo regresar al punto donde se

produjo el salto.

11.2. Monitorizacion

El soporte de la monitorizacion se realiza mediante el uso de algunos registros es-

pecıficos del modelo: MSR (Model Specific Register). A continuacion analizamos los mas

interesantes. Para mas informacion acudir al manual del microprocesador en cuestion.

11.2.1. Time-stamp counter

Aparecio a partir del Pentium. Es un contador de 64 bits que cuenta el numero de

ciclos de reloj desde que comenzo a funcionar el micro (o reset hardware). Es un contador

dependiente del modelo.

Cuando ejecutamos la instruccion CPUID, EDX.TSC=1 (bit 4) indica la existencia de este

contador. Se lee con la instruccion RDTSC (si CR4.TSD=0 o CPL=0). Devuelve en EDX:EAX el

valor del contador. Tambien se lee/escribe con RDMSR/WRMSR, aunque solo se puede acceder

a los 32 bits mas bajos, el resto se extiende con ceros.

Page 156: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

156 Monitorizacion

11.2.2. Monitorizacion del sistema

Existen dos contadores de 40 bits que permiten monitorizar dos sucesos simultanea-

mente. Se pueden usar desde cualquier nivel de privilegio. Pueden citar el numero de veces

que ocurrio el suceso o el numero de ciclos de reloj entre los dos sucesos.

PerfEvtSel0 / PerfEvtSel1

31 8 7 0

Event SelectCounter Mask

EE

N

I

N

T

19 1618 15172021222324

I

N

V

P

C

U

S

R

O

SUnit Mask (UMASK)

(CMASK)

Solamente se pueden modificar si CPL=0 y seleccionan el tipo de evento a monitorizar.

Event Select. Selecciona el evento. Consultar la lista de eventos disponibles en el

manual del microprocesador.

Unit Mask. Subselecciona tipo de evento.

USR. Solo contabiliza en modo usuario (niveles 1, 2 y 3).

OS. Solo contabiliza en modo supervisor (nivel 0).

E. Deteccion del suceso por flanco.

PC. Conmuta la salida de los pines PMi pulso durante dos ciclos cuando vale cero.

Idem cuando hay un desbordamiento del contador en el caso de valer uno.

INT. Genera una excepcion a traves de su APIC local si hay un desbordamiento

del contador.

EN. Habilita los dos contadores.

INV. Invierte el resultado de la comparacion contador/mascara.

Counter Mask. Cuando es distinta de cero solo se incrementa el contador cuando

la cuenta interna de sucesos por ciclo de reloj, supera esta cantidad. Sirve para

contar el no de veces que ocurre un suceso en un ciclo de reloj.

PerfCtr0/ PerfCtr1

Son los MSR contadores y se pueden leer con RDPMC desde cualquier nivel de privilegio.

Si CR4.PCE = 0, entonces es necesario que CPL=0.

Page 157: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Apendice A

Sistemas de numeracion

La memoria en un ordenador es un almacen de numeros1. Estos no se almacenan en

el sistema decimal (base 10). Dado que se simplifica enormemente el diseno hardware,

los computadores almacenan toda la informacion en formato binario (base 2). Revisemos

primeramente el sistema decimal.

A.1. Decimal

En base 10 los numeros se componen de 10 posibles dıgitos (0-9). Cada dıgito de un

numero tiene una potencia de 10 asociada con el basada en su posicion en el numero. Por

ejemplo:

234 = 2 × 102 + 3 × 101 + 4 × 100

A.2. Binario

En base 2 los numeros se componen de 2 posibles dıgitos (0 y 1). Cada dıgito de un

numero tiene una potencia de 2 asociada con el basada en su posicion en el numero. (Un

dıgito binario se llama bit) Por ejemplo:

110012 = 1 × 24 + 1 × 23 + 0 × 22 + 0 × 21 + 10

= 16 + 8 + 1

= 25

Esto muestra como los numeros binarios se convierten en decimales.

....

1Esta seccion se ha extraıdo del libro PC Assembly Language de Paul A. Carter de dominio publicodisponible en http://www.drpaulcarter.com/pcasm.

157

Page 158: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

158 Hexadecimal

A.3. Hexadecimal

Los numeros hexadecimales utilizan base 16. Se usan para manejar los numeros bina-

rios en un formato mas corto. Los hexadecimales tienen 16 posibles dıgitos. Dado que no

hay sımbolos numericos para representar todos los dıgitos posibles, se utilizan las primeras

letras del abecedario ( 0-9, A, B, C, D, E y F). El dıgito A es equivalente a 10 en decimal,

B es 11, etc. Cada dıgito en un numero hexadecimal tiene una potencia de 16 asociada a

el. Ejemplo:

2BD16 = 2 × 162 + 11 × 161 + 13 × 160

= 512 + 176 + 13

= 701

A.4. Trabajando con enteros

A.4.1. Representacion de los enteros

Los numeros enteros pueden tener o no signo. Los numeros enteros sin signo se repre-

sentan en binario de una manera directa. El numero 200 se representarıa como 11001000b

(o C8h en hexadecimal). Los enteros con signo se representan de maneras mas complica-

das.

Por ejemplo consideremos el valor -56. Si el valor 56 se representa como 111000b, el

valor -56 podrıa representarse como -111000b. Pero ¿como se almacena esto en la memoria

del computador? Hay tres tecnicas que se han usado para representar los enteros con signo

y todas ellas emplean el bit mas significativo como bit de signo. Este bit vale cero si el

numero es positivo y uno si es negativo.

Signo-magnitud El primer metodo y mas simple se llama signo-magnitud. Representa

el numero entero como dos partes. La primera parte es el bit de signo y la segunda parte es

la magnitud del entero. Luego el numero 56 se representarıa como el byte 00111000b (el bit

de signo esta subrayado) y el valor -56 serıa 10111000b. El valor mas grande almacenable

en un byte serıa +127 y el de valor mas negativo el -127. Para negar un valor se cambia

el bit de signo. Este metodo es directo pero tiene sus desventajas. Primero, hay dos

posibles representaciones del valor 0. Dado que el cero ni es positivo ni es negativo ambas

representaciones deberıan actuar de la misma manera. Esto complica la logica aritmetica

de la CPI. Segundo, la aritmetica general tambien se complica. Si 10 es sumado a -56,

implica cambiar el signo y restar 10 de 56, De nuevo, esto complica la logica de la CPU.

Page 159: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Capıtulo A. Sistemas de numeracion 159

Complemento a uno El segundo metodo se conoce como complemento a uno. El

complemento a uno de un numero se obtiene cambiando cada bit del numero. Por ejemplo,

el complemento a no de 00111000b (+56) es 11000111. Con esta tecnica complementar

los bits equivale a negar. Luego 1100111b serıa el valor -56. Se ve que el bit de signo ha

cambiado y al complementar dos veces se obtiene el numero original y positivo. Pero,

como el primer metodo tiene dos representaciones del cero: 00000000b (+0) y 11111111b

(-0). La aritmetica de los numeros en complemento a uno es complicada.

Complemento a dos Los dos primeros metodos solamente se emplearon en los compu-

tadores mas antiguos. Los actuales utilizan el metodo denominado de complemento a dos.

El complemento a dos de un numero se consigue en dos pasos:

1. Se obtiene el complemento a uno del numero en binario.

2. Se suma uno al resultado.

Como consecuencia: dos negaciones devuelven el numero original y la aritmetica es

muy sencilla.

Page 160: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

160 Trabajando con enteros

Page 161: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Apendice B

Codigos ASCII

Tabla ASCII

Dec Hex Car Dec Hex Car Dec Hex Car Dec Hex Car

0 00 NUL 32 20 Espacio 64 40 @ 96 60 ‘1 01 SOH 33 21 ! 65 41 A 97 61 a2 02 STX 34 22 " 66 42 B 98 62 b3 03 ETX 35 23 # 67 43 C 99 63 c4 04 EOT 36 24 $ 68 44 D 100 64 d5 05 ENQ 37 25 % 69 45 E 101 65 e6 06 ACK 38 26 & 70 46 F 102 66 f7 07 BEL 39 27 ’ 71 47 G 103 67 g8 08 BS 40 28 ( 72 48 H 104 68 h9 09 HT 41 29 ) 73 49 I 105 69 i

10 0A LF 42 2A * 74 4A J 106 6A j11 0B VT 43 2B + 75 4B K 107 6B k12 0C FF 44 2C , 76 4C L 108 6C l13 0D CR 45 2D - 77 4D M 109 6D m14 0E SO 46 2E . 78 4E N 110 6E n15 0F SI 47 2F / 79 4F O 111 6F o16 10 DLE 48 30 0 80 50 P 112 70 p17 11 DC1 49 31 1 81 51 Q 113 71 q18 12 DC2 50 32 2 82 52 R 114 72 r19 13 DC3 51 33 3 83 53 S 115 73 s20 14 DC4 52 34 4 84 54 T 116 74 t21 15 NAK 53 35 5 85 55 U 117 75 u22 16 SYN 54 36 6 86 56 V 118 76 v23 17 ETB 55 37 7 87 57 W 119 77 w24 18 CAN 56 38 8 88 58 X 120 78 x25 19 EM 57 39 9 89 59 Y 121 79 y26 1A SUB 58 3A : 90 5A Z 122 7A z27 1B ESC 59 3B ; 91 5B [ 123 7B {28 1C FS 60 3C < 92 5C \ 124 7C |29 1D GS 61 3D = 93 5D ] 125 7D }30 1E RS 62 3E > 94 5E ^ 126 7E ~31 1F US 63 3F ? 95 5F _ 127 7F DEL

161

Page 162: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

162

Page 163: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Apendice C

Problemas

C.1. Aritmetica extendida: producto de 64 bits

Enunciado

Realiza una subrutina en ensamblador que sea capaz de realizar un producto de

64x64⇒128 bits. El resultado se guarda en la variable RESULT que esta en memoria, y

los valores a multiplicar estan apuntados por DS:ESI y ES:EDI respectivamente. Al salir los

unicos registros que se modifican son ES:EDI, que apuntan a la variable RESULT.

Solucion

Listado C.1: Aritmetica extendida: producto de 64 bits[BITS 16][SEGMENT CODIGO]..start:

MOV AX,DATOS5 MOV DS,AX

MOV ES,AXMOV ESI ,NUM1MOV EDI ,NUM2CALL MULT64

10

MOV AX ,4C00H ; Retorna al MSDOSINT 21H

; Algoritmo.;

15 ; H1 L1 98; x H2 L2 72; ------- ----; L2L1 16; L2H1 18

20 ; H2L1 56; H1H2 63; ------------ ------; R1R2R3R4 7056MULT64:

25 PUSH EAX

PUSH EBX

PUSH ECX

PUSH EDX ; Guardo los registros al entrar

163

Page 164: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

164 Aritmetica extendida: producto de 64 bits

30 MOV EAX ,[DS:ESI] ; Tomo L1MOV EDX ,[ES:EDI] ; Toma L2MUL EDX ; EDX EAX = L2L1

MOV DWORD [DS:RESULT],EAX35 ; Los 32 bits mas bajos ya son correctos

MOV EBX ,EDX ; Guardo temporalmente los 2 o ’s 32 bits

MOV EAX ,[DS:ESI +4] ; Tomo H140 MOV EDX ,[ES:EDI] ; Tomo L2

MUL EDX ; EDX EAX = L2H1

ADD EBX ,EAX ; Incremento los 2 o ’s 32 bitsADC EDX ,0 ; Tengo en cuenta el posible acarreo

45 MOV ECX ,EDX ; Guardo temporalmente los 3 o ’s 32 bits

MOV EAX ,[DS:ESI] ; Tomo L1MOV EDX ,[ES:EDI +4] ; Tomo H2MUL EDX ; EDX EAX = H2L1

50

ADD EBX ,EAX ; Incremento los 2 o ’s 32 bitsMOV DWORD [DS:RESULT +4],EBX

; Guardo los 2 o ’s 32 bitsADC ECX ,EDX ; Incremento los 3 o ’s 32 bits

55 PUSHFD ; Guardo el posible acarreo

MOV EAX ,[DS:ESI +4] ; Tomo H1MOV EDX ,[ES:EDI +4] ; Tomo H2MUL EDX ; EDX EAX = H2H1

60

ADD ECX ,EAX ; Incremento los 3 o ’s 32 bitMOV DWORD [DS:RESULT +8],ECX

; Los guardoADC EDX ,0 ; Sumo el posible acarreo

65 POPFD ; Recupero el posible acarreoADC EDX ,0 ; Sumo el posible acarreoMOV DWORD [DS:RESULT +12],EDX

; Guardo los 4 o ’s 32 bitMOV AX ,DATOS

70 MOV ES ,AXMOV EDI ,RESULT ; La direccion del resultado

POP EDX

POP ECX

75 POP EBX

POP EAX ; Recupero los registros al salir

RET

80 [SEGMENT DATOS ALIGN =16]NUM1 DD 100000 ,0 ; Multiplicando = 100000NUM2 DD 20,0 ; Multiplicador = 20RESULT RESQ 1 ; Reserva espacio parte baja del resultado

RESQ 1 ; Resultado parte alta85

[SEGMENT PILA STACK]RESW 512

Page 165: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Capıtulo C. Problemas 165

C.2. Aritmetica extendida: producto de 64 bits, (2)

Enunciado

Se pide implementar una subrutina que usando aritmetica entera de 32 bits sea capaz

de multiplicar dos numeros de 64 bits de la manera mas rapida posible empleando el

Algoritmo de Karatsuba, que se describe a continuacion:

Sean dos numeros de 64 bits U y V que se pueden descomponer en dos partes de 32

bits (U0 y V0 las partes bajas y U1 y V1 las partes altas): U = U0 + U1B y V = V0 + V1B

donde B = 232, entonces el producto U ∗ V se puede escribir como:

U ∗ V = (1 + B)U0V0 + B(U1 − U0)(V0 − V1) + (B + B2)U1V1

donde se observa que solamente se realizan 3 productos (el resto son sumas y despla-

zamientos)1. La subrutina, escrita en ensamblador de Pentium 4, 32 bits, se podra llamar

desde lenguaje C con la siguiente cabecera:

void ProductoKaratsuba( int *U, int *V, int *R);

Y se usara:

int U[2], V[2], R[4];ProductoKaratsuba(U,V,R);

Se recuerda que el lenguaje C pasa la direccion (desplazamiento de 32 bits) cuando la

variable es una matriz de datos. El tipo int es de 32 bits.

Solucion

El programa serıa el siguiente:

[BITS 32][GLOBAL _ProductoKaratsuba][SECTION .text]; El algoritmo se resume en:

5 ; i U0V0 1*U0V0; ii U0V0 B*U0V0; iii UUVV B*(U1 -U0)(V0 -V1); iv U1V1 B*U1V1; v U1V1 B^2* U1V1

10 ; ------------; R4R3R2R1; Algunas definiciones%define U_Pointer [ebp +8]%define V_Pointer [ebp +12]

15 %define R_Pointer [ebp +16]

; La rutina

1Este algoritmo permite reducir el numero de productos empleados para la rutina de multiplicacionextendida. Ası si los numeros a multiplicar estan compuestos de N partes con la anchura del productoimplementado en la arquitectura del microprocesador, con la aritmetica convencional serıan necesariasN2 productos (en el ejemplo a implementar N = 2, luego se necesitarıan 4 productos), con el algoritmodescrito tiende a N log(3)/ log(2) (en el ejemplo = 2,9999 productos).

Page 166: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

166 Aritmetica extendida: producto de 64 bits, (2)

_ProductoKaratsubapush ebp

20 mov ebp ,esp ; Prologo para rutinas en Cpushad

mov esi ,U_Pointermov edi ,V_Pointer

25 mov ebx ,R_Pointer

mov dword[ebx +12],0 ; R4 = 0

mov eax ,[esi] ; EAX=U030 imul dword [edi] ; EDX_EAX = U0*V0

mov [ebx],eax ; Guarda R1 definitivoadd eax ,edxadc edx ,0 ; Suma el termino ii

35 mov [ebx+4],eax ; Guarda R2 temporalmov [ebx+8],edx ; Guarda R3 temporaladc dword[ebx +12],0 ; Guarda R4 temporal

mov eax ,[esi +4] ; EAX=U140 sub eax ,[esi] ; EAX=U1 -U0

mov edx ,[edi] ; EDX=V0sub edx ,[edi +4] ; EDX=V0 -V1

45 imul edx ; EDX_EAX = (U1 -U0)*(V0 -V1); Suma el termino iii

add [ebx+4],eax ; Actualiza R2adc [ebx+8],edx ; Actualiza R3bt edx ,31 ; Si es negativo suma -1

50 jc @Negativoadc dword [ebx +12],0 ; Actualiza R3jmp @Sigue

@Negativo:adc dword [ebx+12],-1

55 @Sigue:mov eax ,[esi +4] ; EAX=U1mov edx ,[edi +4] ; EDX=V1

imul edx ; EDX_EAX = U1V160 add [ebx+4],eax

adc [ebx+8],edxadc dword [ebx +12],0 ; Suma el termino iv

add [ebx+8],eax65 adc [ebx+12],edx ; Suma el termino v

popad

pop ebp ; Epilogo para rutinas en Cret

El programa en C para probarlo:

1 #include <stdio.h>

extern void ProductoKaratsuba(int *U, int *V, int *R);

int main()6 {

int U[2], V[2], R[4], i;

Page 167: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Capıtulo C. Problemas 167

U[0]=0x0;U[1]=0x1; /* U = 2^32 */

11

V[0]=0 x10;V[1]=0x0; /* V = 16 */

ProductoKaratsuba(U,V,R);16

for(i=3; i>=0; i--) printf(" %08X␣",R[i]);printf("\n");

}

Y el fichero makefile:

1 # Compilado desde CygWin (Windows XP)

karatsuba.exe: karatsuba.c karatsuba.asmnasm -fwin32 -g karatsuba.asm -o karatsuba_asm.ogcc -c -g karatsuba.c

6 gcc karatsuba.o karatsuba_asm.o

Page 168: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

168 Comparacion de cadenas de datos

C.3. Comparacion de cadenas de datos

Enunciado

Realizar una subrutina que compare dos cadenas de caracteres apuntadas por DS:ESI

y ES:EDI respectivamente y que esten terminadas en CERO (ASCIIZ). Debe incluir la

posibilidad de tener los caracteres N y n insertados en su lugar correspondiente.

Solucion

Comienzo

i=0

¿C1[i]==0?

¿C2[i]==0?

¿C1[i]>C2[i]?

menor <

i=i+1

NO

NO

Cadena 1 despuésCF=0

Retorna

> mayor

= igual

Cadena 2 despuésCF=1

¿C1[i]==C2[i]?

NO

SI

SI

ZF=1

SI

Subrutina que compara dos cadenas de caracteres queestán terminadas con CERO (ASCIIZ).Debe incluir los caracteres Ñ y ñ insertados en su lugarcorrespondiente.

Listado C.2: Comparacion de cadenas de datos[BITS 16][SEGMENT CODIGO]..start:

MOV AX ,DATOS5 MOV DS ,AX

MOV ES ,AXMOV ESI ,CAD1MOV EDI ,CAD2CALL COMPARA

10

MOV AX ,4C00HINT 21H

;

Page 169: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Capıtulo C. Problemas 169

; Compara caracter a caracter. Si uno de los caracteres es cero , esta15 ; antes la de menor longitud.

;COMPARA:

CLD ; Preparo para direcciones crecientes

20 @LAZO: MOV AL ,[DS:ESI]CMP AL ,0 ; Si es cero saleJZ @CAD2 ; la cadena 2 despues

MOV BL ,[ES:EDI]25 CMP BL ,0 ; Si es cero sale

JZ @CAD1 ; la cadena 1 despues

CALL COMPCAR ; Comparo los dos caracteres; IN : AL Car1

30 ; BL Car2; OUT: Los flags de acuerdo con la; CMP Car1 ,Car2

35 JG @CAD1 ; y si es mayor el primero , estaJL @CAD2 ; despues la cadena 2, si no la 1

INC EDI

INC ESI ; Incremento los punteros y continuo40 JMP @LAZO

@CAD1: CLC ; CF=0 CAD1 DespuesRET

45 @CAD2: MOV BL ,[ES:EDI] ; Compruebo si la otra tambien acabaCMP AL,BL ; Si son iguales lo indico

STC ; CF=1 CAD2 Despues

50 RET ; Y salgo;; Compara un caracter segun la tabla; IN : AL Car1; BL Car2

55 ; OUT: Modifica CX ,; Los flags de acuerdo con la comparacion Car1 ,Car2

COMPCAR:PUSH EDI

60 PUSH ESI ; Guardo al entrar

MOV EDI ,TABLAMOV CX,TAMANOREPNE SCASB ; Busca el primer caracter

65

MOV ESI ,EDI ; Guarda la posicion

XCHG AL,BL ; Toma el segundo caracter a buscar

70 MOV EDI ,TABLAMOV CX,TAMANOREPNE SCASB ; Busca el segundo caracter

CMP ESI ,EDI ; Compara las direcciones75

Page 170: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

170 Comparacion de cadenas de datos

POP ESI

POP EDI ; Recupero al salir

RET ; Retorna80

[SEGMENT DATOS ALIGN =16]CAD1 DB ’Mu~noz ’,0CAD2 DB ’Mu~noz␣A’,0TABLA DB ’0123456789 ABCDEFGHIJKLMN~NOPQRSTUVWXYZ ’

85 DB ’abcdefghijklmn~nopqrstuvwxyz ’FINTAB DB 0

TAMANO EQU FINTAB -TABLA

90 [SEGMENT PILA STACK]RESW 512

Page 171: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Capıtulo C. Problemas 171

C.4. Evaluacion de un polinomio

Enunciado

Realizar una subrutina en ensamblador que evalue un polinomio de orden N, de la

manera mas rapida posible. Los coeficientes y la variable x son enteros SIN signo. Los

coeficientes estan almacenados consecutivamente a0, a1, .. en una direccion apuntada por

DS:ESI, y la variable dependiente x se envıa a la subrutina en el registro EAX. El resultado

se devuelve en EAX. Si hay desbordamiento se indica con el acarreo puesto a UNO.

P (x) = a0 + a1 ∗ x + a2 ∗ x2 + ... + aN ∗ xN

Propuesto : Modificar el programa para que sea capaz de trabajar con numeros enteros

CON signo.

Solucion

Listado C.3: Evaluacion de un polinomio[BITS 16][SEGMENT CODIGO]..start:

MOV AX,DATOS5 MOV DS,AX

MOV ESI ,COEFSMOV EAX ,300

CALL EVALUA10

MOV AX ,4C00HINT 21H

; Usaremos la regla de Horner15 ;

; P(x) = a0 + x*( a1 + x*( a2 + x*( ... + x*(aN + 0))));; 1 o .- Toma AN; 2 o .- Le suma el resultado anterior (la primera vez 0)

20 ; 3 o .- Lo multiplica por x; 4 o .- Guarda el resultado; 5 o .- Repite hasta acabar con A1; 6 o .- Sumale A0;

25 EVALUA:MOV DWORD [DS:RESUL],0 ; Acumulador a CERO

MOV EBX ,EAX ; EBX = x

30 MOV ECX ,[DS:NCOEF] ; Tomo el numero de coefsDEC ECX ;ADD ESI ,ECXADD ESI ,ECXADD ESI ,ECX

35 ADD ESI ,ECX ; Me situo en el ultimo coeficiente

Page 172: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

172 Evaluacion de un polinomio

STD ; Incremento hacia direcciones decrec.

@LAZO: LODSD ; EAX = a[ECX] y ESI = ESI - 440 ADD EAX ,[DS:RESUL]

JC @OVFLW ; Si no cabe salgo

MUL EBX ; EDX EAX = Resultado parcial45 MOV [DS:RESUL],EAX ; Guardo la parte que interesa

AND EDX ,EDXJNZ @OVFLW ; Si no cabe salgo

50 LOOP @LAZO

LODSD ; Coeficiente a0ADD EAX ,[DS:RESUL] ; El resultado en EAX

55 JC @OVFLW ; Si no cabe salgo

RET ; CF = 0 Not Overflow

@OVFLW: STC ; CF = 1 Overflow60 RET

;[SEGMENT DATOS ALIGN =16]COEFS DD 4,2,1 ; P(x) = X^2 +2*X +4NCOEF DD 3 ; Numero de coeficientes

65 RESUL RESD 1 ; Resultado de 32 bits (p(300)=90604);[SEGMENT PILA STACK]

RESW 512

Page 173: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Capıtulo C. Problemas 173

C.5. Hallar los ceros de una funcion

Enunciado

Realizar un programa en ensamblador que permita evaluar los ceros de una funcion.

Toma como ejemplo de funcion:

f(x) = 2x2 − 1241

para ello se empleara el siguiente algoritmo:

xn+1 = xn − f(x)/f ′(x)

donde la derivada se calculara con la siguiente expresion:

f ′(x) = 1/2 ∗ (f(x + 1) − f(x − 1))

Entrada: Aproximacion inicial x0 en AX (16 bits con signo)

Salida : Resultado en AX y EFLAGS.CF = 0. Si resultado erroneo, AX = 0 y EFLAGS.CF = 1.

Solucion

Listado C.4: Hallar los ceros de una funcion[BITS 16][SEGMENT CODIGO]; Programa principal; Entrada : AX Valor inicial

5 ; Salida : DX AX resultado..start:

MOV AX ,1 ; Valor inicialMOV CX ,10 ; Numero maximo de iteraciones

@BUCLE: PUSH CX

10 PUSH AX

CALL ITERA ; Resultado en AX x(n+1)JC @HAYERRPOP BX ; Resultado anterior x(n)POP CX

15 CMP AX ,BXJZ @EXITOLOOP @BUCLE ; Alcanzo el no max. de iter. sin exitoJMP @ERR2

20 @EXITO: CLC ; Salida con exito CF=0 AX=resultadoJMP @FIN

@HAYERR: ; Tengo que recuperar la pilaPOP BX

25 POP CX

@ERR2: STC ; Salida con error CF=1 AX=0XOR AX ,AX

@FIN: MOV AX ,4C00H30 INT 21H

Page 174: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

174 Hallar los ceros de una funcion

; Subrutina que halla una iteracion; Entrada : AX Valor inicial de X(n); Salida : AX Valor de X(n+1)

35 ; Modifica: Ax , DX , ..

ITERA: MOV BX,AX ; BX = xCALL FPRIMA ; DX AX = f ’(x)PUSH AX

40 PUSH DX

MOV AX,BXCALL FUNCION ; DX AX = f(x)POP CX

45 AND CX,CX ; Si la parte alta es distinta de ceroJNZ @ERR ; Como solo se dividir por 16 bits ERROR

POP CX

AND CX,CX50 JZ @DIVBY0

IDIV CX ; AX = f(x)/f ’(x)

SUB BX,AX ; BX = x-f(x)/f ’(x)55 MOV AX,BX

CLC ; CF = 0 EXITORET

@ERR: POP CX

60 @DIVBY0:STC ; CF = 1 ERRORRET

; Evalua la derivada de f(x)65 ; Entrada : AX Valor de x

; Salida : DX AX Valor de f ’(x); Modifica: AX , DX , BX .. y Flags

FPRIMA:70 MOV BX,AX ; BX = ’x’

DEC AX ; AX = ’x-1’CALL FUNCION ; DX AX = ’f(x-1)’PUSH DX ; No puede desbordarse , no lo comprueboPUSH AX

75 MOV AX,BXINC AX ; AX = ’x+1’CALL FUNCION ; DX AX = ’f(x+1)’POP BX

SUB AX,BX80 POP BX

SBB DX,BX ; DX AX = ’f(x+1)-f(x-1)’SHR DX ,1RCR AX ,1 ; DX AX = ’(f(x+1)-f(x-1) )/2’RET

85

; Evalua la funcion f(x); Entrada : AX Valor de x; Salida : DX AX Valor de f(x); Modifica: AX , DX y Flags

90

FUNCION:IMUL AX ; DX AX = ’x^2’

Page 175: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Capıtulo C. Problemas 175

SHL AX ,1RCL DX ,1 ; DX AX = ’2*x^2’

95 JC @ERROR ; !! Con esta funcion nunca se desbordaSUB AX ,1241SBB DX ,0 ; DX AX = ’2*x^2 -1241’CLC

100 @ERROR: RET

[SEGMENT DATOS ALIGN =16]

[SEGMENT PILA STACK]105 RESW 512

Page 176: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

176 Reloj

C.6. Reloj

Enunciado

Tenemos un sistema basado en 8086, que tiene conectado un reloj que cada centesima

de segundo produce una interrupcion NMI. Debemos realizar un programa para el Sistema

Operativo, que cuente el tiempo basandose en esa interrupcion. Para ello debera actua-

lizar unas variables (word) situadas en memoria a partir de 0000:1000h que almacenan la

siguiente informacion : ano, mes, dıa, hora, minuto, segundo y centesima de segundo. Al

arrancar el sistema contienen los valores 1980, 1 (enero), 1 (dıa), 0 (horas), 0 (minutos),

0 (segundos), 0 (centesimas de segundo).

Escribir el codigo necesario para que se cuente el tiempo de forma adecuada incremen-

tando cada contador en su momento. Pintar el diagrama de flujo. Ojo: los meses del ano

tienen 31,28,... dıas, respectivamente (suponed una tabla que contenga esos valores). No

considereis los anos bisiestos.

Solucion

Inicio

ANNO=1980MES=1DIA=1

HORA=0MINUTO=0

SEGUNDO=0CENTESIMA=0

Inicia la tabla de vectores de interrupción

Deja el programa residente

Retorna

Interrupción

Guardo registros

Incremento CENTESIMAS

CENTESIMAS=100

CENTESIMAS=0Incremento SEGUNDOS

SEGUNDOS=60

SEGUNDOS=0Incremento MINUTOS

MINUTOS=60

MINUTOS=0Incremento HORA

HORA=24

HORA=0Incremento DIA

DIA=DíaMáximo[MES]

DIA=1Incrementa MES

MES=13

MES=1Incrementa ANNO

Recupero registros

IRET

Problema 7

Programa principal

Page 177: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Capıtulo C. Problemas 177

Inicio

ANNO=1980MES=1DIA=1

HORA=0MINUTO=0

SEGUNDO=0CENTESIMA=0

Inicia la tabla de vectores de interrupción

Deja el programa residente

Retorna

Interrupción

Guardo registros

Incremento CENTESIMAS

CENTESIMAS=100

CENTESIMAS=0Incremento SEGUNDOS

SEGUNDOS=60

SEGUNDOS=0Incremento MINUTOS

MINUTOS=60

MINUTOS=0Incremento HORA

HORA=24

HORA=0Incremento DIA

DIA=DíaMáximo[MES]

DIA=1Incrementa MES

MES=13

MES=1Incrementa ANNO

Recupero registros

IRET

Problema 7

Inicio

ANNO=1980MES=1DIA=1

HORA=0MINUTO=0

SEGUNDO=0CENTESIMA=0

Inicia la tabla de vectores de interrupción

Deja el programa residente

Retorna

Interrupción

Guardo registros

Incremento CENTESIMAS

CENTESIMAS=100

CENTESIMAS=0Incremento SEGUNDOS

SEGUNDOS=60

SEGUNDOS=0Incremento MINUTOS

MINUTOS=60

MINUTOS=0Incremento HORA

HORA=24

HORA=0Incremento DIA

DIA=DíaMáximo[MES]

DIA=1Incrementa MES

MES=13

MES=1Incrementa ANNO

Recupero registros

IRET

Problema 7

Subrutina de atencion a la interrupcion.

Listado C.5: Reloj[BITS 16][SEGMENT CODIGO];; Programa principal. Inicia las variables y inicia la tabla

5 ; de vectores de interrupcion .; Propuesto: Que considere los a~nos bisiestos; 1 bisiesto cada 4 a~nos; no bisiesto cada 100 a~nos; bisiesto cada 400 a~nos (ej.: a~no 2000)

10 ;..start:; INICIALIZACION VARIABLES

; xor ax ,ax ; Situo el segmento de datos15 mov ax ,DATOS ; Solo para DEPURACION

mov ds ,ax

mov WORD [ds:ANNO], 1980mov WORD [ds:MES], 1

20 mov WORD [ds:DIA], 1mov WORD [ds:HORAS], 0mov WORD [ds:MINUTOS], 0mov WORD [ds:SEGUNDOS],0mov WORD [ds:CENTESIM],0

Page 178: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

178 Reloj

25

; INICIALIZACION DE LA TABLA DE VECTORES DE INTERRUPCION; La interrupcion NMI tiene asociado el vector de interrupcion no 2

; mov WORD [ds:2*4+0] , TIMER30 ; mov WORD [ds:2*4+2] , SEG CODIGO

mov cx ,64000@loop1: push cx

mov cx ,6500035 @loop: call TIMER ; Solo para DEPURACION

loop @looppop cx

loop @loop140

; En el programa FINAL no hay que llamar al sistema operativo de esta; manera , sino que hay que dejar el programa residente en memoria ...

MOV AX ,4C00H45 INT 21H

TIMER:; Al llamar hay que guardar los registros

50 push ds

push ax

push bx

; Cambio el puntero de datos55

; xor ax ,axmov ax,DATOS ; Solo DEPURACIONmov ds,ax

60 ; Incremento las centesimas de segundo

mov ax ,[ds:CENTESIM]inc ax

mov [ds:CENTESIM],ax65 cmp ax ,100

jnz NEAR @SALIR

; Incremento los segundos

70 mov WORD [ds:CENTESIM], 0 ; Centesimas a ceromov ax ,[ds:SEGUNDOS]inc ax

mov [ds:SEGUNDOS],axcmp ax, 60

75 jnz @SALIR

; Incremento los minutos

mov WORD [ds:SEGUNDOS],0 ; Pongo a cero los segundos80 mov ax ,[ds:MINUTOS]

inc ax

mov WORD [ds:MINUTOS],axcmp ax, 60jnz @SALIR

85

; Incremento las horas

Page 179: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Capıtulo C. Problemas 179

mov WORD [ds:MINUTOS], 0 ; Pongo a cero las minutosmov ax ,[ds:HORAS]

90 inc ax

mov WORD [ds:HORAS],axcmp ax , 24jnz @SALIR

95 ; Incremento los dıas

mov WORD [ds:HORAS], 0 ; Pongo a cero las horasmov ax ,[ds:DIA]inc ax

100 mov WORD [ds:DIA],axdec ax ; En vez de comparar con

; DiaMaximo[MES]+1 decremento; el dia en uno para; comparar con DiaMaximo[MES]

105 mov bx ,[ds:MES]dec bx

shl bx ,1add bx ,MESES ; Por que Enero es el 1 o

; habrıa que sumar cero110 cmp ax ,[ds:bx]

jnz @SALIR

; Incremento los meses

115 mov WORD [ds:DIA], 1 ; Pongo a uno los dıasmov ax ,[ds:MES]inc ax

mov WORD [ds:MES],axcmp ax ,13

120 jnz @SALIR

; Incremento los a~nos

mov WORD [ds:MES], 1 ; Pongo a uno los meses125 mov ax ,[ds:ANNO]

inc ax

mov WORD [ds:ANNO],ax

; Al salir hay que recuperar los registros usados130

@SALIR: pop bx

pop ax

pop ds

135 ; En el programa final debe ser IRET

; iretret ; Solo DEPURACION

140 [SEGMENT DATOS ALIGN =16]MESES DW 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31

; Las coloco en este segmento para las pruebas de depuracion pero en; realidad estan en el segmento 0000h

145

ANNO DW 1980MES DW 1DIA DW 1

Page 180: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

180 Reloj

HORAS DW 0150 MINUTOS DW 0

SEGUNDOS DW 0CENTESIM DW 0

[SEGMENT PILA STACK]155 RESW 512

Page 181: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Apendice D

Problemas FPU

D.1. Modulo de un vector

Enunciado

Se pide hallar el modulo de un vector bidimensional utilizando el coprocesador ma-

tematico.

Solucion

Listado D.1: Modulo de un vector[BITS 16][SEGMENT CODIGO]..start:

4 ; La operacion a realizar es:;; Resul = SQRT( X*X + Y*Y );; En notacion Polaca Inversa:

9 ;; X, X ,* ,Y, Y, *, +, SQRT.;

MOV BX,DATOS14 MOV DS,BX ; Inicializo el Selector de Datos

FINIT

FILD WORD [TempX] ; ST0 = TempX

19 FLD ST0 ; ST1 = TempX; ST0 = TempX

FMULP ST1 ; ST0 = TempX * TempX

24 FILD WORD [TempY] ; ST1 = TempX * TempX; ST0 = TempY

FLD ST0 ; ST2 = TempX * TempX; ST1 = TempY

29 ; ST0 = TempY

FMULP ST1 ; ST1 = TempX * TempX; ST0 = TempY * TempY

181

Page 182: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

182 Modulo de un vector

34 FADDP ST1 ; ST0 = TempX * TempX + TempY * TempY

FSQRT ; ST0 = SQRT( TempX ^2 + TempY ^2 )

FISTP WORD [Resul] ; Resul = ST0 (POP)39

MOV AX ,4C00hINT 21h ; Termina llamando la MSDOS

[SEGMENT DATOS ALIGN =16]44

TempX DW 3 ; Valor de XTempY DW 4 ; Valor de YResul RESW 1 ; Resultado , que tiene que valer 5

49 [SEGMENT PILA STACK]RESW 512

Page 183: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Capıtulo D. Problemas FPU 183

D.2. Funcion exponencial

Enunciado

Se pide disenar un programa que sea capaz de hallar la funcion exponencial usando el

coprocesador matematico.

Solucion

Listado D.2: Funcion exponencial[BITS 16][SEGMENT CODIGO]..start:

; La operacion a realizar es:5 ;

; Resul = e^(X) = ( 2^( X*log2(e) )-1 ) +1;; En notacion Polaca Inversa:;

10 ; Log2(e), X, *, F2XM1 , 1, +. Ojo !! F2XM1 -> (-0.5, 0.5);MOV AX,DATOSMOV DS,AX ; Inicio el selector de Datos

15 FINIT

FLDL2E ; ST0 = Log2(e)

FLD QWORD [TempX] ; ST1 = Log2(e); ST0 = TempX

20

FMULP ST1 ; ST0 = TempX * Log2(e)

FLD ST0 ; ST1 = TempX * Log2(e); ST0 = TempX * Log2(e)

25

FRNDINT ; ST1 = X; ST0 = Trunc( X )

FXCH ST1 ; ST1 = Trunc( X )30 ; ST0 = X

FSUB ST0 ,ST1 ; ST1 = Trunc( X ); ST0 = Decimal( X )

35 F2XM1 ; ST1; ST0 = 2^( TempX * Log2(e)) - 1

FLD1 ; ST2; ST1 = 2^( TempX * Log2(e)) - 1

40 ; ST0 = 1

FADDP ST1 ; ST1; ST0 = 2^( TempX * Log2(e))

45 FSCALE ; ST1 = Trunc(x); ST0 = Resultado = ST0 *2^ ENT(X)

FSTP QWORD [Resul] ; Resul = ST0

Page 184: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

184 Funcion exponencial

50 FINIT ; Borro el resto de la pila

MOV AX ,4C00HINT 21H ; Termino llamando al MSDOS

55 [SEGMENT DATOS ALIGN =16]TempX DQ 1.0 ; Valor de XResul RESQ 1 ; Resultado , tendra que salir 2’71..

[SEGMENT PILA STACK]60 RESW 512

Page 185: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Capıtulo D. Problemas FPU 185

D.3. Toma de decisiones

Enunciado

La operacion a realizar es:

if (X*Y>0)X=-Y;

elseX=X*Y;

Solucion

Listado D.3: Ejemplo de toma de decisiones1 [BITS 16]

[SEGMENT CODIGO]..start:

; La operacion a realizar es:;

6 ; If (X*Y)>0 Then X:=-Y Else X=X*Y;;

MOV AX,DATOSMOV DS,AX ; Inicio el Selector de Datos

11

FINIT

FLD QWORD [TempY] ; ST0 = TempY

FLD QWORD [TempX] ; ST1 = TempY16 ; ST0 = TempX

FMULP ST1 ; ST0 = TempY * TempX

FTST ; SW = TST( ST0 )21

FSTSW AX ; AX = SW

SAHF ; Flags = AHJBE Final

26

FINIT ; Inicia el Coprocesador (Borra ST)

FLD QWORD [TempY] ; ST0 = TempY

31 FCHS ; ST0 = - TempY

Final: FSTP QWORD [TempX] ; TempX = - TempY = -X*Y

MOV AX ,4C00H36 INT 21H ; Termino llamando al MSDOS.

[SEGMENT DATOS ALIGN =16]TempX DQ 10.0 ; Valor de XTempY DQ 20.0 ; Valor de Y

41

[SEGMENT PILA STACK]RESW 512

Page 186: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

186 Factorial

D.4. Factorial

Enunciado

Hallar el factorial de un numero utilizando un algoritmo recursivo, y un algoritmo no

recursivo. Comprobad el tiempo empleado en el calculo de diferentes valores del factorial,

y comparad el tamano de los correspondientes programas, ası como el tiempo empleado

en realizar los programas.

Solucion

Listado D.4: Calculo del factorial; Test( 65536 veces hallar 99! )

2 ;; Recursivo : 489 centesimas; No recursivo : 0 centesimas;[BITS 16]

7

[SEGMENT CODIGO]..start:

MOV BX,DATOSMOV DS,BX ; Inicializo el Selector de Datos

12

MOV CX ,0@LOOP1:

CALL FACTORIAL ; Toma el valor N de la posicion de; memoria N, y devuelve el resultado

17 ; en RESUL.LOOP @LOOP1

MOV CX ,0@LOOP2:

22 CALL FACTNOREC ; Toma el valor de N y devuelve en; RESUL.

LOOP @LOOP2

MOV AX ,4C00h27 INT 21h ; Termina llamando al MSDOS

; ===============================; Factorial recursivo; ===============================

32

FACTORIAL:FINIT ; Inicio el copro

FLD qword [N] ; ST0 = N37 FTST ; Compruebo si es CERO

FSTSW AX ; Copio C0 , C1 , C2 , C3 , etc en AXSAHF ; Copia AH en FLAGSJNZ @NoEsCero

42

FFREE ST0 ; Elimino el valor ceroFLD1 ; El resultado sera 1.0

Page 187: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Capıtulo D. Problemas FPU 187

FSTP qword [RESUL] ; Lo guardo y salgo47 RET

@NoEsCero: ; Algoritmo RECURSIVOPUSH dword [DS:N ]PUSH dword [DS:N+4] ; Guardo el valor anterior de N

52

FLD1

FSUBP ST1

FSTP qword [N] ; Le resto uno y llamo a Factorial57

CALL FACTORIAL ; RESUL = FACT( N-1 )

POP dword [DS:N+4]POP dword [DS:N] ; Recupero el valor anterior de N

62

FLD qword [N]FLD qword [RESUL]

FMULP ST1 ; Obtengo FACT = N * FACT( N-1 )67

FSTP qword [RESUL] ; Lo guardo y salgoRET

; ===============================72 ; Factorial no recursivo

; ===============================

FACTNOREC:FLD qword [N]

77 FTST

FSTSW AX ; Comprueba si es ceroFINIT

SAHF

JNZ @NoEsCero282

FLD1

FSTP qword [RESUL] ; 0! = 1RET

87

@NoEsCero2:FLD1 ; Multiplicador = 1FLD qword [N] ; Valor de N

92 @BUCLE:FTST ; Compruebo la variableFSTSW AX

SAHF

JZ @SALIR ; Si la variable vale cero salgo97

FMUL ST1 ,ST0FLD1

FSUBP ST1

102 JMP @BUCLE

@SALIR:FSTP qword [RESUL]FSTP qword [RESUL]

107 RET

Page 188: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

188 Factorial

[SEGMENT DATOS ALIGN =16]N DQ 4.0 ; Valor del que hallar el factorialRESUL DQ 1.0 ; Resultado

112

[SEGMENT PILA STACK]RESW 512

; Contenido de la pila (CRECE HACIA ABAJO)117 ; Ejemplo

;; , DIR 1 , <= RESUL = 3.0*2.0 = 6.0; => , ,; , <3.0> ,

122 ; , , <=; => , DIR 2 , <= X = 2.0 RESUL = 2.0*1.0 = 2.0; => , ,; , <2.0> ,; , , <=

127 ; => , DIR 2 , <= X = 1.0 RESUL = 1.0*1.0 = 1.0; => , ,; , <1.0> ,; , , <=; => , DIR 2 , X = 0.0 -----> RESUL = 1.0

Page 189: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Capıtulo D. Problemas FPU 189

D.5. Funciones trigonometricas hiperbolicas

Enunciado

Implementar en lenguaje ensamblador una subrutina en punto flotante que calcule

las siguientes funciones hiperbolicas y almacene los tres resultados en tres posiciones de

memoria SenH, CosH y TanH:

senh(x) =exp(x) − exp(−x)

2

cosh(x) =exp(x) + exp(−x)

2

tanh(x) =exp(x) − exp(−x)

exp(x) + exp(−x)

Solucion

Listado D.5: Funciones trigonometricas hiperbolicas[BITS 16][SEGMENT CODIGO]..start:

MOV AX,DATOS5 MOV DS,AX ; Inicio el selector de Datos

; Hallo Exp(x)

FLDL2E ; ST0 = Log2(e)10

FLD QWORD [TempX] ; ST1 = Log2(e); ST0 = TempX

FMULP ST1 ; ST0 = TempX * Log2(e) =: X15

FLD ST0 ; ST1 = X; ST0 = X

FRNDINT ; ST1 = X20 ; ST0 = Trunc(X)

FXCH ST1 ; ST1 = Trunc(X); ST0 = X

25 FSUB ST0 ,ST1 ; ST1 = Trunc(X); ST0 = Decimal(X)

F2XM1 ; ST1; ST0 = 2^( TempX * Log2(e)) - 1

30

FLD1 ; ST2; ST1 = 2^( TempX * Log2(e)) - 1; ST0 = 1

35 FADDP ST1 ; ST1; ST0 = 2^( TempX * Log2(e))

Page 190: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

190 Funciones trigonometricas hiperbolicas

FSCALE ; ST1; ST0 = ST0* 2^ Trunc(ST1) = Exp(x)

40

FXCH ST1 ; ST1 = Exp(x); ST0 = Trunc(X)

FSTP QWORD [Temp] ; Elimino el valor45

; Hallo Exp(-x) = 1.0/ Exp(x)

FLD ST0 ; ST1 = Exp(x); ST0 = Exp(x)

50

FLD1 ; ST2 = Exp(x); ST1 = Exp(x); ST0 = 1.0

55 FDIVRP ST1 ; ST1 = Exp(x); ST0 = Exp(-x)

; Hallo Exp(x)+Exp(-x)

60 FLD ST1 ; ST2 = Exp(x); ST1 = Exp(-x); ST0 = Exp(x)

FLD ST1 ; ST3 = Exp(x)65 ; ST2 = Exp(-x)

; ST1 = Exp(x); ST0 = Exp(-x)

FADDP ST1 ; ST2 = Exp(x)70 ; ST1 = Exp(-x)

; ST0 = Exp(x) + Exp(-x)

FLD1 ; ST3 ..; ST0 = 1.0

75

FLD1 ; ST4 ..; ST1 = 1.0; ST0 = 1.0

80 FADDP ST1 ; ST3 ..; ST0 = 2.0

FDIVP ST1 ; ST2 ..; ST0 = (Exp(x) + Exp(-x))/2.0

85

FST QWORD [COSH]

FXCH ST2 ; ST2 = COSH(X); ST1 = Exp(-x)

90 ; ST0 = Exp(x)

FSUBRP ST1 ; ST1 = COSH(X); ST0 = Exp(x) - Exp(-x)

95 FLD1 ; ST2 ..; ST0 = 1.0

FLD1 ; ST3 ..; ST1 = 1.0

Page 191: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Capıtulo D. Problemas FPU 191

100 ; ST0 = 1.0

FADDP ST1 ; ST2 ..; ST0 = 2.0

105 FDIVP ST1 ; ST1 = COSH(X); ST0 = SINH(X)

FST QWORD [SINH]

110 FDIVRP ST1 ; ST = TANH(X)

FSTP QWORD [TANH]

MOV AX ,4C00H115 INT 21H ; Termino llamando al MSDOS

[SEGMENT DATOS ALIGN =16]TempX DQ 1.0 ; Valor de XSINH DQ 0.0 ; Valdr 1’1752

120 COSH DQ 0.0 ; Valdr 1.5430TANH DQ 0.0 ; Valdr 0’7615Temp DQ 0.0

[SEGMENT PILA STACK]125 RESW 512

Page 192: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

192 Polinomios de Legendre

D.6. Polinomios de Legendre

Enunciado

La formula de recurrencia de los polinomios de Legendre es la siguiente:

Pn+1(x) =2n + 1

n + 1Pn(x) − n

n + 1Pn−1(x)

donde sabemos que:

P0(x) = 1

P1(x) = x

Se pide la programacion de una subrutina que calcule el valor del polinomio de Legen-

dre de orden n (natural) para un cierto valor real x.

Solucion

Listado D.6: Polinomios de Legendre[BITS 16][SEGMENT CODIGO]..start:

MOV BX,DATOS5 MOV DS,BX ; Inicializo el Selector de Datos

MOV CX ,3 ; Grado del polinomio de LEGENDRE

CALL LEGENDRE ; Toma el valor x de la posicion de10 ; memoria X, y devuelve el resultado

; en RESUL.MOV AX ,4C00hINT 21h ; Termina llamando la MSDOS

15 LEGENDRE:FINIT ; Inicio el copro

AND CX,CXJZ GRADO0 ; Si es de grado CERO salto

20

CMP CX ,1JNZ GRADO ; Si es de grado > 1 salto

FLD QWORD [X] ; El resultado es X25 FSTP QWORD [RESULT] ; Y lo almaceno

RET

GRADO0:FLD1 ; El resultado es 1.030 FSTP QWORD [RESULT] ; Y lo almaceno

RET

; Si el grado es mayor necesito un procedimiento recursivo.35

GRADO: DEC CX ; Hallo Pn(x)

Page 193: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Capıtulo D. Problemas FPU 193

PUSH CX

CALL LEGENDRE ; En RESULT esta Pn(X)40 POP CX

MOV WORD [N],CX ; Guardo N

FILD WORD [N]45 FLD ST0

FADDP ST1

FLD1

FADDP ST1 ; Hallo 2*N+1

50 FILD WORD [N]FLD1

FADDP ST1 ; Hallo N+1

FDIVP ST1 ; Hallo (2*N+1)/(N+1)55

FLD QWORD [RESULT]FMULP ST1

FSTP QWORD [RESULT] ; Hallo (2*N+1)/(N+1) * Pn(X)

60 PUSH WORD [DS:RESULT]PUSH WORD [DS:RESULT +2]PUSH WORD [DS:RESULT +4]PUSH WORD [DS:RESULT +6]

; Guardo el primer sumando en la pila65 PUSH CX

DEC CX

CALL LEGENDRE ; Halla Pn -1(x)POP CX

70 MOV WORD [N],CX ; Actualizo N

FILD WORD [N]FLD ST0FLD1

75 FADDP ST1

FDIVP ST1 ; Hallo N/(N+1)

FLD QWORD [RESULT]FMULP ST1 ; Hallo N/(N+1) * Pn -1(X)

80

POP WORD [DS:RESULT +6]POP WORD [DS:RESULT +4]POP WORD [DS:RESULT +2]POP WORD [DS:RESULT]

85 ; Recupero el primer sumandoFLD QWORD [RESULT]FSUBRP ST1 ; Hallo Pn(X)

FSTP QWORD [RESULT] ; Lo guardo y salgo90

RET

[SEGMENT DATOS ALIGN =16]X DQ 2.0 ; Valor de la X

95 RESULT DQ 0.0 ; Resultado P0 (2)=1.0; P1 (2)=2.0; P2 (2)=2.5; P3 (2)=2.83333..

Page 194: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

194 Polinomios de Legendre

N DW 0100

[SEGMENT PILA STACK]RESW 512

Page 195: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Capıtulo D. Problemas FPU 195

D.7. Velocımetro

Enunciado

Un sistema basado en 8086 se utiliza para medir la velocidad con la que se desplaza

un vehıculo.

El sistema recibe una interrupcion INTR vectorizada (vector 100) cada segundo. En

ese momento puede leer del puerto de E/S (220h) una palabra que contiene el numero de

vueltas que ha dado la rueda del vehıculo durante ese tiempo.

Escribir el codigo y los organigramas necesarios para:

1o.- Inicializar el sistema para que la senal que llega a traves de la interrupcion vecto-

rizada 100, produzca un salto al servicio de interrupcion. Ademas deberemos actualizar la

variable RADIO (word) dada en centımetros, y la variable VELOCIDAD (0000:2000h word) dada

en km/h.

2o.- Realizar la subrutina de interrupcion para que calcule la velocidad a la que se

desplaza el vehıculo en km/h. Se pide hacer los calculos con la mayor precision posible y

despues almacenar el resultado redondeado como word en la variable VELOCIDAD.

Solucion

Listado D.7: Velocımetro[BITS 16]; Examen de Noviembre 1997 PROBLEMA 7[SEGMENT CODIGO]..start:

5 ; Inicio variables

mov ax ,VECTmov es ,axmov [es:2000h],ax ; Variable VELOCIDAD = 0

10

mov ax ,DATOSmov ds ,ax

mov ax ,40 ; El radio en centimetros15

mov [ds:RADIO],ax ; Lo actualizo

; Inicio vector de interrupciones

20 mov si ,100*4 ; Direccion del vector de interrupcion :; Segmento : 0; Desplazamiento : 100*4

cli ; Desactivo las int. vectorizadas25

mov ax ,CODIGOmov [es:si+2],ax ; Vector de interrupciones 100

; Primero el segmento

Page 196: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

196 Velocımetro

mov ax,Inter30 mov [es:si],ax ; Segundo el desplazamieto

sti ; Activo las interrupciones vectorizadas

; Devuelvo el control al sistema operativo35 ; deberıa dejar el programa residente con la int 27h

mov ax ,4c00hint 21h

40 ; Servicio de interrupcion

Inter:; Guardo los registros

45 push ds

push ax

push bx

push cx

50 ; Leo el numero de vueltas

mov dx ,220hin ax,dx ; Leo el numero de vueltas (word)

55 mov bx,DATOSmov ds,bx

mov [ds:VUELT],ax ; Lo guardo en memoria para leerlo: con el coprocesador

60

; Guardo el estado del coprocesador

fsave [ds:COPRO]

65 ; Lo inicializo

finit

; Hago cuentas70

fild word [ds:VUELT] ; Obtengo las vueltas

fld1

fld1

75 faddp st1 ; Obtengo un 2

fmulp st1

fldpi ; Obtengo Pi80

fmulp st1

fild word [ds:RADIO] ; Obtengo el radio

85 fmulp st1

fld qword [ds:FACTOR] ; Obtengo el factor de conversion

fmulp st1

90

Page 197: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Capıtulo D. Problemas FPU 197

; Almaceno el resultado redondeado en la variable VELOCIDADpush ds

mov ax ,VECTmov ds ,ax

95 fistp word [ds :2000h]pop ds

; Recupero el estado del coprocesador

100 frstor [ds:COPRO]

; Recupero los registros

pop cx

105 pop bx

pop ax

pop ds

; Retorno de interrupcion110

iret

[SEGMENT DATOS ALIGN =16]RADIO DW 0 ; Radio en centimetros

115 VUELT DW 0 ; Numero de vueltasFACTOR DQ 0.36 ; Conversion de cm/seg a km/h

; Podrıa incluir el 2*Pi; y serıa mas rapido !!

120 COPRO RESW 54 ; Total 108 bytes

[SEGMENT VECT ABSOLUTE 0X0000]

[SEGMENT PILA STACK]125 RESW 512

Page 198: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

198 Tecnica CORDIC

D.8. Tecnica CORDIC

Enunciado

La tecnica CORDIC (COordinate Rotation Digital Computer) ha sido muy utilizada

en las calculadoras cientıficas para implementar las funciones trigonometricas. La idea

que utiliza es que cualquier angulo puede descomponerse como:

θ = ±α0±α1±α2±...

para unos ciertos valores de angulos. En cada iteracion se escoge el signo mas o el

menos de forma que nos aproximemos cada vez mas al angulo. Llamando en cada iteracion

βi = ±α0±α1±.. ± αi puede ponerse βi = βi−1±αi , de donde:

sin(βi) = sin(βi−1) ∗ cos(αi)± cos(βi−1) ∗ sin(αi)

cos(βi) = cos(βi−1) ∗ cos(αi) ∓ sin(βi−1) ∗ sin(αi)

y los valores de cos(α) y sin(α) se toman de las tablas. Se parte de los valores iniciales

β = 0, cos(β) = 1,0, sin(β) = 0,0. En cada iteracion se suma o resta el angulo a para que

nos aproximemos al angulo dado, y calculamos el seno y coseno correspondientes mediante

las anteriores formulas.

Se piden los organigramas y programas en ensamblador para:

1o.- Generar las dos tablas de datos (angulos, coseno y seno del angulo) que seran

necesarias para obtener una precision de π/65536 (n=16). Los angulos a obtener estaran

en radianes y empezaran por π/2 y acabaran con π/2n. Para ello realizar una subrutina

que sea llamada desde el programa principal y que haga uso de las funciones trigonometri-

cas del coprocesador matematico. La segunda tabla tendra en cada entrada los valores

calculados para el coseno y para el seno.

2o.- Haciendo uso de las tablas y del coprocesador matematico se pide realizar una

subrutina que aplique la tecnica CORDIC para calcular los valores del SENO y del CO-

SENO de un angulo real (qword) dado en la variable de memoria X y los resultados se

almacenan en COS y SIN (qword´s) tambien en memoria.

Solucion

Listado D.8: Tecnica CORDIC: Programa principal.#include <stdio.h>#include <math.h>

extern void IniciaTablas(void);extern void HallaSenoYCoseno(double ,double*,double *);

Page 199: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Capıtulo D. Problemas FPU 199

int main(){double angulo , seno , coseno;IniciaTablas ();

angulo = M_PI /8;printf("--\n");for(angulo=-M_PI; angulo <=M_PI; angulo=angulo+M_PI /360){

HallaSenoYCoseno(angulo , &seno , &coseno );// if(fabs(seno -sin(angulo )) >0.0001)

printf("Angulo=␣ %9lf ,␣Seno␣=␣ %9lf␣( %9lf),␣Coseno␣=␣ %9lf␣( %9lf)\n",angulo , seno , seno -sin(angulo), coseno , coseno -cos(angulo ));

}return 0;

}

Listado D.9: Tecnica CORDIC: Rutinas ensamblador[BITS 32][SECTION .text]

3 ;==========================================================================[GLOBAL _IniciaTablas]_IniciaTablas: ; El selector DS apunta a .data y .bss

MOV ESI ,ANGLESMOV EDI ,COSINE ; Apunto a las tablas

8 MOV ECX ,16 ; Numero total de entradas

FINIT ; Inicializa el Coprocesador

FLDPI ; ST = Pi13 FLD1

FLD1

FADDP ST1 ; ST = 2.0, ST(1) = Pi

@Bucle:18 FDIV ST1 ,ST0 ; 2.0 Pi/2

FLD ST1

FST QWORD [ESI] ; Guarda el valor del angulo (radianes)ADD ESI ,8 ; Apunta al siguiente angulo

23

FSINCOS ; Calcula el seno y el coseno

FSTP QWORD [EDI]ADD EDI ,8 ; Guarda el coseno

28 FSTP QWORD [EDI]ADD EDI ,8 ; Guarda el seno

LOOP @Bucle ; Repite hasta rellenar las tablasRET ; Fin de la inicializacion

33 ;==========================================================================[GLOBAL _HallaSenoYCoseno]%define ANGULO EBP+8%define SENO EBP +16%define COSENO EBP +20

38 _HallaSenoYCoseno:PUSH EBP

MOV EBP ,ESP ; PrologoPUSHA

Page 200: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

200 Tecnica CORDIC

43 FINIT ; Inicio el coprocesador

MOV ESI ,ANGLESMOV EDI ,COSINE ; Inicializo los punteros a las tablas

48 FLDZ ; Acumulador a ceroFLD1 ; El coseno de ceroFLDZ ; El seno de cero

; ST0 = 0 sin(beta) : sb53 ; ST1 = 1 cos(beta) : cb

; ST2 = 0 beta : b

MOV ECX ,16 ; ST0 ST1 ST2 ST3 ST4@Buc: FLD QWORD [EDI] ; ci sb cb b

58 FMUL ST0 ,ST1 ; ci*sb sb cb b

FLD QWORD [EDI] ; ci ci*sb sb cb bFMUL ST0 ,ST3 ; ci*cb ci*sb sb cb b

63 ADD EDI ,8 ; Incremento puntero cos ,sin

FLD QWORD [EDI] ; si ci*cb ci*sb sb cb bFMUL ST0 ,ST3 ; si*sb ci*cb ci*sb sb cb b

68 FLD QWORD [EDI] ; si si*sb ci*cb ci*sb sb cbb

FMUL ST0 ,ST5 ; si*cb si*sb ci*cb ci*sb sb cbb

ADD EDI ,8 ; Incremento puntero cos ,sin

73 FLD QWORD [ANGULO] ; b si*cb si*sb ci*cb ci*sb sbcb b

FCOMP ST7 ; Comparo ANGULO con beta y elimino ANGULO

FSTSW AX

SAHF ; Le paso el resultado al procesador78 JZ @Coincide

JBE @Below; ST0 ST1 ST2 ST3 ST4

FADDP ST3 ,ST0 ; si*sb ci*cb ci*sb sb cb b; +si*cb

83 FSUBP ST1 ,ST0 ; ci*cb ci*sb sb cb b;-si*sb ,+si*cb

FLD QWORD [ESI] ; ai ci*cb ci*sb sb cb b; -si*sb ,+si*cb

FADDP ST5 ,ST0 ; ci*cb ci*sb sb cb b+ai88 ;-si*sb ,+si*cb

JMP @Cont@Below:

; ST0 ST1 ST2 ST3 ST493 FSUBP ST3 ,ST0 ; si*sb ci*cb ci*sb sb cb b

; -si*cbFADDP ST1 ,ST0 ; ci*cb ci*sb sb cb b

;+si*sb ,+si*cbFLD QWORD [ESI] ; ai ci*cb ci*sb sb cb b

98 ; +si*sb ,+si*cbFSUBP ST5 ,ST0 ; ci*cb ci*sb sb cb b-ai

;+si*sb ,+si*cb

Page 201: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Capıtulo D. Problemas FPU 201

@Cont: FXCH ST3 ; Actualiza sin(beta)103 FSTP QWORD [TEMP] ; viejo sin(beta) fuera

FXCH ST1 ; Actualiza cos(beta)FSTP QWORD [TEMP] ; viejo cos(beta) fuera

ADD ESI ,8 ; Incremento el puntero de angulos108

LOOP @Buc

@YaEsta: ; ST0 ST1 ST2 ST3 ST4MOV ESI ,[SENO] ; sb cb b-ai

113 MOV EDI ,[ COSENO]FSTP QWORD [ESI] ; cb b-aiFSTP QWORD [EDI] ; b-aiFSTP qword [TEMP] ; -

118 POPA

POP EBP ; Ep¡logoRET ; FIN

@Coincide:123 FINIT

FLD1 ; 1FLD QWORD [EDI -16] ; cb 1FLD QWORD [EDI - 8] ; sb cb 1JMP @YaEsta

128

[SECTION .data]

[SECTION .bss]ANGLES RESQ 16 ; En radianes

133 COSINE RESQ 16*2 ; Guarda las parejas COS , SINTEMP RESQ 1

Page 202: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

202 Calculo del arco tangente

D.9. Calculo del arco tangente

Enunciado

Se nos ha pedido realizar en ensamblador una subrutina que calcule el valor del

arctan(x) a partir de su desarrollo en serie de Taylor:

arctan(x) =∑∞

k=0 X(k) =∑∞

k=0(−1)kx2k+1

2k+1= x − x3

3+ x5

5− ...

siempre que |x| ≤ 1. Se nos pide que lo hagamos usando el algoritmo denominado

sumalt, que obtiene una alta precision sumando solamente los n primeros terminos de las

series con sumando alternados (sumados y restados) cuya descripcion en un lenguaje de

alto nivel es la siguiente, y que se debe a Cohen, Villegas y Zagier:

double sumalt_arctan_c(double x, int n){double d, c, s, b, X, X_k;int k, i;

d = 1.0;for( k=0; k<n; k++) d = d * 5.828427125;

d = (d+1/d)/2;b = 1.0;c = d;s = 0.0;for( k=0; k<n; k++){X = 1.0; for(i=0;i<2*k+1;i++) X = X * x;if(k&1==1) X=-X; // Si k impar termino negativoX_k = X/(2*k+1); // Halla X(k)c = c - b;s = s + c * X_k;b = b * (2*(n+k)*(n-k))/((2*k+1)*(k+1));

}return s/d;

};

La subrutina podra ser llamada desde C. Escrıbela en ensamblador de Pentium 4

utilizando la unidad de punto flotante. Recuerda que los datos de retorno en C vuelven

en el registro EAX si en entero o en ST0 si es un numero en punto flotante.

Solucion

El programa serıa el siguiente:

[BITS 32][GLOBAL _sumalt_arctan][SECTION .text]%define x [ebp +8]

5 %define N [ebp +16]

_sumalt_arctan:push ebp

mov ebp ,esp ; Prologo C10 pushad

Page 203: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Capıtulo D. Problemas FPU 203

finit ; ST0 ST1 ST2 ...fld1 ; 1.0mov ecx ,N

15 @BucN: fmul qword [Cte1]loop @BucN

; dfld st0 ; d dfld1 ; 1.0 d d

20 fdivrp st1 ; 1/d dfaddp st1 ; d+1/dfld qword [Dos] ; 2.0 d+1/dfdivp st1 ; d_nuevo

25 fld1 ; b=1 dfld st1 ; c=d b=1 dfldz ; s=0 c=d b=1 dfldz ; k=0 s=0 c=d b=1 dmov ecx ,N

30 @BucN_2:; Hallo 2k+1fld st0 ; kfadd st0 ; 2kfld1 ; 1 2k

35 faddp st1 ; 2k+1fist dword [DosKmas1]

; Hallo x^{2k+1}

40 mov ebx ,[ DosKmas1]fld1 ; 1.0 2k+1 .. total 7 regs

@BucN_3:fmul qword x ;dec ebx

jnz @BucN_345 ; x^{2k+1} 2k+1 ...

fdivrp st1 ; x^{2k+1}/(2k+1}, k , s, c, b, dfld st1 ; k, x^{2k+1}/(2k+1}, k , s, c, b, dfistp dword [Temp]; x^{2k+1}/(2k+1}, k , s, c, b, d

50 bt dword[Temp],0 ;jnc @NoCambiaSignofchs ; -x^{2k+1}/(2k+1}, k , s, c, b, d

@NoCambiaSigno:55 fxch st0 ,st3 ; c, k , s, -x^{2k+1}/(2k+1}, b, d

fsub st4 ; c-b, k , s, -x^{2k+1}/(2k+1}, b, dfxch st0 ,st3 ; -x^{2k+1}/(2k+1}, k , s, c_nuevo , b, d

fld st3 ; c, ***, k, s, c, b, d60 fmulp st1 ; c*X, k, s, c, b, d

faddp st2 ; k, s_nuevo , c, b, d

; Hallo 2k+1fld st0 ; k ...

65 fadd st0 ; 2k ...fld1 ; 1 2k ...faddp st1 ; 2k+1 ...

70 fld1 ; 1, 2k+1, k, s, c, b, dfadd st2 ; k+1, 2k+1, k, s, c, b, dfmulp st1 ; den , k, s, c, b, d

Page 204: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

204 Calculo del arco tangente

fld qword [Dos] ; 2.0, den , k, s, c, b, dfdivrp st1 ; 2/den , k, s, c, b, d

75 fmulp st4 ,st0 ; k, s, c, b_nuevo , dfild dword N ; N, k, s, c, b, dfild dword N ; N, N, k, s, c, b, dfadd st2 ; N+k, N, k, s, c, b, dfxch st0 ,st1

80 fsub st2 ; N+k, N-k, k, s, c, b, dfxch st0 ,st1fmulp st1 ; num , k, s, c, b, dfmulp st4 ; k, s, c, b, d,fld1

85 faddp st1 ; k_nuevo s c, b, d

loop @BucN_2

fxch st0 ,st1 ; s k c b d90 fdiv st4 ; s/d ...

fstp qword [Temp]finit

fld qword [Temp]95

popad

pop ebp ; Epilogoret

100 [SECTION .data]; El segmento .data en C es apuntado por DS , luego no es necesario; hacer que DS apunte aquiCte1 dq 5.828427125 ; 3*sqrt (8)Dos dq 2.000000000

105 DosKmas1dd 0

Temp dq 0.0

El programa en C para probarlo:

#include <stdio.h>

3 extern double sumalt_arctan(double x, int n);

double sumalt_arctan_c(double x, int n){double d, c, s, b, X, X_k;

8 int k, i;

/* d = (3+ sqrt (8))^n = 5.828427125^n, que se puede hacer asi */d = 1.0;for( k=0; k<n; k++) d = d * 5.828427125;

13

d = (d+1/d)/2;b = 1.0;c = d;s = 0.0;

18 for( k=0; k<n; k++){X = 1.0; for(i=0;i<2*k+1;i++) X = X * x;if(k&1==1) X=-X; // Si k impar termino negativoX_k = X/(2*k+1); // Halla X(k)

23 c = c - b;s = s + c * X_k;

Page 205: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Capıtulo D. Problemas FPU 205

b = b * (2*(n+k)*(n-k))/((2*k+1)*(k+1));}

return s/d;28 };

int main(){

double x;33 int n;

x=0.5; // Por ejemplo

// Comparo la funcion atan() de C con la version sumalt_arctan_C ()38 // del algoritmo escrito en C, con la version sumalt_arctan ()

// del algoritmo escrito en ensamblador.

for(n=2;n <=16;n++)printf(" %2d␣ %10f␣ %10f␣ %10f␣ %15e\n",

43 n, (double) atan(x), sumalt_arctan(x,n), sumalt_arctan_c(x,n),atan(x)-sumalt_arctan(x,n) );

}

Y el fichero makefile:

# Compilado desde CygWin (Windows XP)

atan.exe.exe: atan.c atan.asmnasm -fwin32 -g atan.asm -o atan_asm.o

5 gcc -c -g atan.cgcc atan.o atan_asm.o

Page 206: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

206 Calculo del arco tangente

Page 207: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Apendice E

3D Now!

La tecnologıa AMD 3D Now! provee 21 instrucciones adicionales para mejorar el ren-

dimiento de las aplicaciones que manejan graficos 3D y procesamiento de audio, ademas

de las instrucciones MMX, que tambien soporta. Estas instrucciones operan sobre los re-

gistros MMX de 64 bits, divididos en dos numeros de 32 bits de precision simple (punto

flotante) que son compatibles con la norma IEEE-754.

FEMMS. Idem EMMS de MMX.

PAVGUSB mmreg1, mmreg2/mem64. Calcula el promedio entre paquetes sin signo de 8 bits.

PF2ID mmreg1, mmreg2/mem64. Convierte operandos de punto flotante a un entero de

32 bits.

PFACC mmreg1, mmreg2/mem64. Acumula los dos words de cada operando en el operando

destino.

PFADD mmreg1, mmreg2/mem64. Suma de punto flotante con 24 bits significativos.

PFCMPEQ mmreg1, mmreg2/mem64. Si mmreg1 = mmreg2/mem64 devuelve todos unos

sino todos ceros.

PFCMPGE mmreg1, mmreg2/mem64. Si mmreg1 >= mmreg2/mem64 devuelve todos unos

sino todos ceros.

PFCMPGT mmreg1, mmreg2/mem64. Si mmreg1 > mmreg2/mem64 devuelve todos unos

sino todos ceros.

PFMAX mmreg1, mmreg2/mem64. Retorna el maximo entre los dos operandos.

PFMIN mmreg1, mmreg2/mem64. Retorna el mınimo entre los dos operandos.

207

Page 208: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

208

PFMUL mmreg1, mmreg2/mem64. Realiza la multiplicacion entre los dos operandos.

PFRCP mmreg1, mmreg2/mem64. Devuelve una aproximacion del recıproco al numero en

el operando fuente.

PFRCPIT1 mmreg1, mmreg2/mem64. Realiza un paso intermedio de la operacion anterior.

PFRCPIT2 mmreg1, mmreg2/mem64. Completa la operacion anterior, para generar el mis-

mo resultado que PFRCP.

PFRSQIT1 mmreg1, mmreg2/mem64. Realiza un paso intermedio de la operacion PFSQRT.

PFSQRT mmreg1, mmreg2/mem64. Devuelve una aproximacion del recıproco de la raız

cuadrada del numero.

PFSUB mmreg1, mmreg2/mem64. Realiza la resta de punto flotante entre los operandos

(op1=op1-op2).

PFSUBR mmreg1, mmreg2/mem64. Realiza la resta inversa al anterior (op1=op2-op1).

PI2FD mmreg1, mmreg2/mem64. Transforma un entero de 32 bits en un dato de punto

flotante.

PMULHRW mmreg1, mmreg2/mem64. Aproxima la multiplicacion de los datos en los ope-

randos y devuelve los 16 bits mas altos.

PREFETCH(W) mem8. Carga la lınea de la memoria cache de procesamiento apuntada

por mem8 en la cache de datos.

Page 209: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Apendice F

Extensiones SSE: Streaming SIMDExtensions

F.1. Introduccion

Estas extensiones fueron introducidas en la arquitectura Intel de 32 bits a partir del

Pentium III (Febrero de 1999, fabricado con tecnologıa de 250 nm). Extienden el modelo

SIMD presente en la tecnologıa MMX anadiendo recursos para manejar vectores o esca-

lares de numeros en punto flotante de precision sencilla contenidos en registros de 128

bits.

Las extensiones consisten en:

Se incorporan 8 registros (XMM0..XMM7) de 128 bits que solamente pueden trabajar

con vectores de 4 elementos de punto flotante de precision sencilla1.

XMM7

XMM6

XMM5

XMM4

XMM3

XMM2

XMM1

XMM0

127 0

El registro MXCSR de 32 bits que proporciona bits de estado y control para las opera-

ciones realizadas con los registros XMM.

1Las extensiones SSE2 permitiran su uso como vectores de datos en punto flotante de precision doble

209

Page 210: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

210 Conjunto de instrucciones

31 16

Overflow MaskDivide-by-Zero Mask

Denormal Operation Mask

Invalid Operation MaskDenormals Are Zeros*

Precision FlagUnderflow Flag

Underflow Mask

Flush to Zero

Rounding Control

15 1314 12 11 10 9 8 7 6 5 4 3 2 1 0

Precision Mask

Overflow FlagDivide-by-Zero Flag

Denormal FlagInvalid Operation Flag

FZ

RC

PM

ZE

OE

UE

PE

IM

DM

ZM

OM

UMReserved

D

E EID

AZ

* The denormals-are-zeros flag was introducedin the Pentium 4 and Intel Xeon processor.

Un tipo de datos vectorial de 4 elementos de punto flotante de precision sencilla.

0127

Contains 4 Single-Precision Floating-Point Values

64 63 31329596

Conjunto de instrucciones (70) que operan sobre los datos de los registros XMM y

una extension a las que trabajan con los registros MMX. Ademas otras que trabajan

con el nuevo registro MXCSR y otras referidas a la gestion de la memoria cache del

sistema.

Para activar las extensiones:

Se comprueba su presencia mediante la instruccion CPUID

Se activa la bandera CR4.OSFXSR.

Se activa la bandera CR4.OSXMMEXCPT.

Se establecen los bits mascara y banderas en el registro MXCSR de acuerdo con el

modo de operacion que se quiera para las instrucciones SSE/SSE2/SSE3 SIMD en

punto flotante.

F.2. Conjunto de instrucciones

F.2.1. Transferencia de datos

MOVAPS / MOVUPS Copia de 128 bits, alineados (A) o no alineados (U) en memoria.

MOVHPS / MOVLPS Copia de 64 bits de la parte alta o de la parte baja, respectivamente.

Page 211: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Capıtulo F. Extensiones SSE: Streaming SIMD Extensions 211

MOVHLPS / MOVLHPS Copia de 64 bits entre las partes alta y baja, y viceversa.

MOVMSKPS Extrae el signo de 4 paquetes en memoria (32 bits).

MOVSS Copia de 32 bits.

F.2.2. Aritmeticas

ADDPS / SUBPS Suma/Resta de cuatro paquetes de datos.

ADDSS / SUBSS Suma/Resta de un paquete de datos.

MULPS / DIVPS Multiplicacion/Division de cuatro paquetes de datos.

MULSS / DIVSS Multiplicacion/Division de un paquete de datos.

RCPPS Realiza la operacion 1/Fuente para cuatro paquetes de datos. El error relativo

cometido va a ser menor o igual que 1,52−12.

RCPSS Igual que el anterior pero para un unico paquete de datos.

SQRTPS / SQRTSS Raız cuadrada de cuatro o de un paquete de datos respectivamente.

RSQRTPS / RSQRTSS Inversa de raız cuadrada de cuatro o de un paquete de datos,

respectivamente.

MAXPS / MAXSS Calculo del maximo entre registros para cuatro o para un paquete de

datos, respectivamente.

MINPS / MINSS Calculo del mınimo entre registros para cuatro o para un paquete de

datos, respectivamente.

F.2.3. De comparacion

CMPPS / CMPSS Comparacion para cuatro o para un paquete de datos a traves de un

entero de 8 bits.

COMISS / UCOMISS Comparacion ordenada/desordenada modificando los flags.

Page 212: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

212 Conjunto de instrucciones

F.2.4. De entremezclado y empaquetamiento

SHUFPS Entremezclado de paquetes de datos a traves de un entero de 8 bits.

X3 X2 X1 X0

Y3 Y2 Y1 Y0

Y3 ... Y0 Y3 ... Y0 X3 ... X0 X3 ... X0

DEST

SRC

DEST

UNPCKHPS / UNPCKLPS Desempaqueta y entremezcla partes altas y partes bajas, res-

pectivamente.

X3 X2 X1 X0

Y3 Y2 Y1 Y0

Y3 X3 Y2 X2

DEST

SRC

DEST

F.2.5. Logicas

ANDPS AND logico.

ANDNPS NOT destino AND fuente.

ORPS OR logico.

XORPS XOR logico.

F.2.6. De conversion

CVTPI2PS / CVTPS2PI Convierte un paquete de dos dword a punto flotante de simple

precision y viceversa.

CVTSI2SS / CVTSS2SI Convierte un dword a punto flotante de simple precision y vi-

ceversa.

CVTTPS2PI Convierte un paquete de dos datos expresados en punto flotante de simple

precision en enteros de tamano dword usando truncamiento.

Page 213: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Capıtulo F. Extensiones SSE: Streaming SIMD Extensions 213

CVTTSS2SI Convierte un dato expresado en punto flotante de simple precision en

entero de tamano dword usando truncamiento.

F.2.7. De administracion del registro de estado (MXCSR)

LDMXCSR Carga el registro MXCSR desde memoria.

STMXCSR Salva el registro MXCSR en memoria.

F.2.8. Instrucciones con enteros

PAVGB / PAVGW Calculo de la media de datos enteros de tamano byte (B) y word (W),

respectivamente.

PEXTRW Extraccion de una palabra de un registro a traves de un numero inmediato

de 8 bits.

PINSRW Insercion de una palabra a traves de un numero inmediato de 8 bits.

PMAXUB Devuelve el maximo, comparando enteros sin signo de tamano byte.

PMAXSW Devuelve el maximo, comparando enteros con signo de tamano palabra.

PMINUB Devuelve el mınimo, comparando enteros sin signo de tamano byte.

PMINSW Devuelve el maximo, comparando enteros con signo de tamano palabra.

PMOVMSKB Copia de una mascara de byte.

PMULHUW Multiplica paquetes de datos enteros de tamano palabra sin signo y almacena

la parte alta de la multiplicacion.

X3 X2 X1 X0

Z3 = X3 ∗ Y3 Z2 = X2 ∗ Y2 Z1 = X1 ∗ Y1 Z0 = X0 ∗ Y0

SRC

DEST

DEST

Y3 Y2 Y1 Y0

TEMP

Z3[31-16] Z2[31-16] Z1[31-16] Z0[31-16]

PSADBW Suma de las diferencias absolutas.

Page 214: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

214 Conjunto de instrucciones

X3 X2 X1 X0SRC

DEST

TEMP

X4X5X6X7

Y3 Y2 Y1 Y0Y4Y5Y6Y7

ABS(X0-Y0)ABS(X7-Y7) ABS(X6-Y6) ABS(X5-Y5) ABS(X4-Y4) ABS(X3-Y3) ABS(X2-Y2) ABS(X1-Y1)

DEST 00H 00H00H00H00H00H SUM(TEMP7...TEMP0)

PSHUFW Desempaquetado y entremezclado a traves de un numero inmediato de 8 bits.

X3 X2 X1 X0SRC

DEST Y3 Y2 Y1 Y0

ORDER00B - X001B - X110B - X211B - X3

Encodingof Fields in

ORDER01234567

Operand

F.2.9. Otras instrucciones

MASKMOVQ Escribe los bytes seleccionados en memoria a traves de una mascara.

MOVNTQ Mueve una qword desde un registro a memoria directamente.

MOVNTPS Mueve cuatro paquetes de datos en punto flotante de simple precision desde

un registro a memoria directamente.

PREFETCHh Movimiento de datos entre caches usando T0(datos temporales), T1 (datos

temporales respecto al primer nivel de cache), T2 (datos temporales respecto al

segundo nivel de cache) o NTA (datos no temporales respecto a todos niveles de

cache).

SFENCE Serializa operaciones de memoria.

Page 215: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Apendice G

Extensiones SSE2: Streaming SIMDExtensions 2

G.1. Introduccion

Este conjunto de instrucciones aparecieron en diciembre de 2000 (Pentium 4 Netburst,

fabricado con la tecnologıa de 180 nm) operan con paquetes de datos en punto flotante de

doble precision localizados en registros XMM o en memoria. En total son 144 instrucciones

nuevas.

128-Bit Packed Word Integers

128-Bit Packed Byte Integers

128-Bit Packed DoublewordIntegers

0127

0127

0127

0127

0127

128-Bit Packed Quadword Integers

128-Bit Packed Double- Precision Floating-Point

64 63

G.2. Conjunto de instrucciones

G.2.1. Transferencia de datos

MOVAPD / MOVUPD Copia de 128 bits, alineados (A) o no alineados (U) en memoria.

MOVHPD / MOVLPD Copia de 64 bits de la parte alta o de la parte baja, respectivamente.

MOVHLPD / MOVLHPD Copia de 64 bits entre las partes alta y baja, y viceversa.

MOVMSKPD Extrae el signo de 4 paquetes en memoria (32 bits).

215

Page 216: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

216 Conjunto de instrucciones

MOVSD Copia de 64 bits.

G.2.2. Aritmeticas

ADDPD / SUBPD Suma/Resta de dos paquetes de datos.

ADDSD / SUBSD Suma/Resta de un paquete de datos.

MULPD / DIVPD Multiplicacion/Division de dos paquetes de datos.

MULSD / DIVSD Multiplicacion/Division de un paquete de datos.

SQRTPD / SQRTSD Raız cuadrada de dos o de un paquete de datos respectivamente.

MAXPD / MAXSD Calculo del maximo entre registros para dos o para un paquete de

datos, respectivamente.

MINPD / MINSD Calculo del mınimo entre registros para dos o para un paquete de

datos, respectivamente.

G.2.3. De comparacion

CMPPD / CMPSD Comparacion para cuatro o para un paquete de datos a traves de un

entero de 8 bits.

COMISD / UCOMISD Comparacion ordenada/desordenada modificando los flags.

G.2.4. De entremezclado y empaquetamiento

SHUFPD Entremezclado de paquetes de datos a traves de un entero de 8 bits.

X3 X2 X1 X0

Y3 Y2 Y1 Y0

Y3 ... Y0 Y3 ... Y0 X3 ... X0 X3 ... X0

DEST

SRC

DEST

UNPCKHPD / UNPCKLPD Desempaqueta y entremezcla partes altas y partes bajas, res-

pectivamente.

Page 217: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Capıtulo G. Extensiones SSE2: Streaming SIMD Extensions 2 217

X3 X2 X1 X0

Y3 Y2 Y1 Y0

Y3 X3 Y2 X2

DEST

SRC

DEST

G.2.5. Logicas

ANDPD AND logico.

ANDNPD NOT destino AND fuente.

ORPD OR logico.

XORPD XOR logico.

G.2.6. De conversion

CVTPS2P

ICVTTPS2DQ

CVTD

Q2P

S

CVTP

I2PS

CV

TP

D2P

S

CV

TP

S2P

D

CVTP

D2D

QCVTD

Q2P

D

CVTTPD2PI

CVTP

I2PD

CVTSS2S

I

CVTSI2SS

CVTS

I2SD

CVTTS

D2S

I

CV

TS

D2S

S

CV

TS

S2S

D

CVTPS2DQ

4 Doubleword

Integer (XMM)

Double-PrecisionFloating-Point

DoublewordInteger (r32)

2 DoublewordInteger (MM)

Single-PrecisionFloating Point

CVTS

D2S

I

CVTPD2PI CVTTP

D2D

Q

CVTTPS2P

ICVTTSS2S

I

2 Doubleword

Integer (XMM)

CVTPD2PI / CVTPI2PD Convierte un paquete de dos datos en expresados en punto

flotante de doble precision en enteros de tamano dword y viceversa.

CVTTPD2PI Convierte un paquete de dos datos en expresados en punto flotante de

doble precision en enteros de tamano dword con truncamiento.

Page 218: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

218 Conjunto de instrucciones

CVTPD2DQ / CVTDQ2PD Convierte un paquete de dos datos en expresados en punto

flotante de doble precision en enteros de tamano qword y viceversa.

CVTTPD2DQ Convierte un paquete de dos datos en expresados en punto flotante de

doble precision en enteros de tamano qword con truncamiento.

CVTPD2PS / CVTPS2PD Convierte un paquete de dos datos expresados en punto flotante

de doble precision en dos datos expresados en punto flotante de simple precision y

viceversa.

CVTSD2SS / CVTSS2SD Convierte un dato en expresado en punto flotante de doble

precision en un dato expresado en punto flotante de simple precision y viceversa.

CVTSD2SI / CVTSI2SD Convierte un dato expresado en punto flotante de doble preci-

sion en un entero de tamano dword y viceversa.

CVTTSD2SI Convierte un dato expresado en punto flotante de doble precision en un

entero de tamano dword con truncamiento.

G.2.7. Instrucciones con paquetes de datos en punto flotante desimple precision

CVTPS2DQ / CVTDQ2PS Convierte un paquete de cuatro datos expresados en punto flo-

tante de simple precision en enteros de tamano dword y viceversa.

CVTTPS2DQ Convierte un paquete de cuatro datos expresados en punto flotante de

simple precision en enteros de tamano dword con truncamiento.

G.2.8. Instrucciones con enteros

MOVDQA / MOVDQU Copia de 128 bits, alineados (A) o no alineados (U) en memoria.

MOVQ2DQ / MOVDQ2Q Copia de 64 bits entre registros MMX y XMM y viceversa.

PMULUDQ Multiplica datos enteros sin signo de tamano dword.

PADDQ Suma de paquete de datos de enteros de tamano qword con y sin signo.

PSUBQ Resta de paquete de datos de enteros de tamanp qword con y sin signo.

PSHUFLW / PSHUFHW Desempaquetado y entremezclado de partes bajas y de las par-

tes altas respectivamente, de enteros de tamano palabra, a traves de un numero

inmediato de 8 bits.

Page 219: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Capıtulo G. Extensiones SSE2: Streaming SIMD Extensions 2 219

PSHUFD Desempaquetado y entremezclado de enteros de tamano dword a traves de

un numero inmediato de 8 bits.

PSLLDQ Desplazamiento logico en bytes hacia la derecha.

PSRLDQ Desplazamiento logico en bytes hacia la izquierda.

PUNPCKHQDQ / PUNPCKLQDQ Desempaquetado y entremezclado de las partes altas y bajas

respectivamente, de enteros de tamano qword.

Page 220: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

220 Conjunto de instrucciones

Page 221: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Apendice H

Extensiones SSE3: Streaming SIMDExtensions 3

H.1. Introduccion

Este conjunto de instrucciones operan con paquetes de datos enteros, con paquetes de

datos en punto flotante de simple precision o con paquetes de datos en doble precision

localizados en registros XMM, que incluyen ademas el procesamiento en paralelo de ins-

trucciones. Aparecieron en febrero de 2004 incorporandose a los Pentium 4 fabricados con

tecnologıa de 90 nm. En total se anaden 13 instrucciones nuevas.

H.2. Conjunto de instrucciones

H.2.1. De carga o de movimiento o de duplicado

MOVSHDUP Copia o mueve 128 bits, duplicando la segunda y la cuarta doble palabra

del registro fuente. Trabaja con datos de 32 bits, tanto enteros de tamano dword

como datos en punto flotante de simple precision.

MOVSLDUP Copia o mueve 128 bits, duplicando la primera y la tercera doble palabra

del registro fuente. Trabaja con datos de 32 bits, tanto enteros de tamano dword

como datos en punto flotante de simple precision.

MOVDDUP Copia o mueve 128 bits, duplicando los 64 bits de la fuente. Trabaja con

datos de 64 bits, tanto enteros de tamano qword como datos en punto flotante de

doble precision.

H.2.2. De suma o resta

ADDSUBPD Suma/resta de 64 bits para paquetes de datos expresados en punto flotante

de doble precision.

221

Page 222: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

222 Conjunto de instrucciones

ADDSUBPS Suma de la segunda y de la cuarta doble palabra y resta de la primera y

de la tercera doble palabra para paquetes de datos expresados en punto flotante de

simple precision.

H.2.3. De suma o resta en procesamiento paralelo

HADDPD Suma de datos, expresados en punto flotante de doble precision, en paralelo.

HADDPS Suma de datos, expresados en punto flotante de simple precision, en paralelo.

HSUBPD Resta de datos, expresados en punto flotante de doble precision, en paralelo.

HSUBPS Resta de datos, expresados en punto flotante de simple precision, en paralelo.

Page 223: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Apendice I

Extensiones SSE3 suplementarias:Supplemental Streaming SIMDExtensions 3

I.1. Introduccion

Disponibles a partir de julio de 2006 en circuitos fabricados con tecnologıa de 65 nm

como el Intel Xeon 5100 o el Intel Core 2 Duo. Incorpora 32 nuevas instrucciones, que

incluyen alineamientos y multiplicacion y suma, para conseguir aumentar aun mas el ren-

dimiento.

SSSE3 instructions include:

• Twelve instructions that perform horizontal addition or subtraction operations.

• Six instructions that evaluate the absolute values.

• Two instructions that perform multiply and add operations and speed up the

evaluation of dot products.

• Two instructions that accelerate packed-integer multiply operations and produce

integer values with scaling.

• Two instructions that perform a byte-wise, in-place shuffle according to the

second shuffle control operand.

• Six instructions that negate packed integers in the destination operand if the

signs of the corresponding element in the source operand is less than zero.

• Two instructions that align data from the composite of two operands.

The operands of these instructions are packed integers of byte, word, or double word

sizes. The operands are stored as 64 or 128 bit data in MMX registers, XMM registers,

or memory.

The instructions are discussed in more detail in the following paragraphs.

223

Page 224: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

224 Introduccion

Page 225: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Apendice J

Extensiones SSE4: Streaming SIMDExtensions 4

J.1. Introduccion

Previstas a partir de 2008 para micros fabricados con tecnologıa de 45 nm (codenamed

Penryn). Incorporara sobre 50 instrucciones nuevas.

225

Page 226: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

226 Introduccion

Sub Group Instructions Description Expected Application BenefitsPacked DWORD Multiplies PMULLD, PMULDQ New support for four signed or unsigned 32x32

bit multiplications per instruction, as well assigned forms of 32x32->64 multiplication.

Broadly useful for improved automated compiler vectorization of data processing written in highlevel languages (like C and Fortran).

Floating Point Dot Product

DPPS, DPPD Improved performance for AOS (Array of Structs)data processing through support for single anddouble-precision dot products.

3-D content creation, gaming, and support forlanguages like CG and HLSL.

Packed Blending BLENDPS, BLENDPD, BLENDVPS, BLENDVPD, PBLENDVB, PBLENDDW

Blending conditionally copies one field in thesource onto the same field in the destination.These new instructions improve the perform-ance of blending operations for most field sizes through packing multiple operations in a single instruction.

Broadly useful for automated compiler vectorizationof data processing written in high level languages(like C and Fortran), and applications such as imageprocessing, video processing, multimedia, and gaming.

Packed Integer Min and Max

PMINSB, PMAXSB, PMINUW,PMAXUW, PMINUD, PMAXUD,PMINDS, PMAXSD

Compares packed signed/unsigned byte/word/dword integers in the destination operand andthe source operand, and returns the minimum ormaximum as per the instruction type for eachpacked operand in the destination operand.

Broadly useful for automated compiler vectorizationof data processing written in high level languages(like C and Fortran), and applications such as imageprocessing, video processing, multimedia, and gaming.

Floating Point Round ROUNDPS, ROUNDSS, ROUNDPD, ROUNDSD

Efficiently rounds the scalar and packed single-and double- precision operands to integers, withenhanced support for Fortran, JAVA and C99 language requirements.

Image processing, graphics, video processing, 2-D/3-D applications, multimedia, and gaming.

RegisterInsertion/Extraction

INSERTPS, PINSRB, PINSRD, PINSRQ, EXTRACTPS, PEXTRB,PEXTRD, PEXTRW, PEXTRQ

These new instruction simplify data insertionand extraction between GPR (or memory) andXMM registers.

Broadly useful for automated compiler vectorizationof data processing written in high level languages(like C and Fortran), and applications such as imageprocessing, video processing, multimedia, and gaming.

Packed Format Conversion PMOVSXBW, PMOVZXBW,PMOVSXBD, PMOVZXBD,PMOVSXBQ, PMOVZXBQ,PMOVSXWD, PMOVZXWD,PMOVSXWQ, PMOVZXWQ,PMOVSXDQ, PMOVZXDQ

Converts from a packed integer (from XMM register or memory) to a zero- or sign-extendedinteger with wider type.

Broadly useful for automated compiler vectorizationof data processing written in high level languages(like C and Fortran), and applications such as imageprocessing, video processing, multimedia, and gaming.

Packed Test and Set PTEST Faster branching from SIMD decisions to support conditionally vectorized code.

Useful for improved automated compiler vectorizationof data processing, image and video processing, 3-Dcontent creation, multimedia, and gaming.

Packed Compare for Equal PCMPEQQ, PCMPGTQ Performs SIMD compare for equality of thepacked QWORDs in the destination and thesource operand.

Broadly useful for automated compiler vectorizationof data processing written in high level languages(like C and Fortran), and applications such as imageprocessing, video processing, multimedia, and gaming.

Pack DWORD to Unsigned WORD

PACKUSDW Converts packed signed DWORDs into packedunsigned WORDs using unsigned saturation tohandle overflow condition. This new instructioncompletes the set of other instructions in this type.

Broadly useful for automated compiler vectorizationof data processing written in high level languages(like C and Fortran), and applications such as imageprocessing, video processing, multimedia, and gaming.

Sub Group Instructions Description Expected Application BenefitsAdvanced String Operations PCMPESTRI, PCMPESTRM,

PCMPISTRI, PCMPISTRMThese new instructions provide a rich set ofstring and text processing capabilities that traditionally required many more opcodes.

Improved performance for virus scan, text search,string processing libraries like ZLIB, databases, compilers and state machine-oriented applications.

Sub Group Instructions Description Expected Application BenefitsFast CRC (CyclicRedundancy Check)

CRC32 Finds the CRC value using a specific polynomialof a given source operand.

Fast and efficient data integrity checks in datatransfer protocols for networked storage (e.g., iSCSI, RDMA).

Accelerated searching andpattern recognition of largedata sets

POPCNT Calculates the number of bits set to 1 in thegiven operand.

Helps to deliver higher performance in applicationssuch as genome mining, handwriting recognition,digital health workloads, fast hamming algorithms,and others.

Page 227: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Apendice K

Modo de Gestion del Sistema(SMM)

K.1. Introduccion

Es un modo de operacion de proposito especial: control del consumo de potencia,

control del sistema hardware, codigo OEM (Original Equipment Manufacturer), etc. No

esta pensado para las aplicaciones de usuario. Proporciona un entorno de procesador

transparente a cualquier Sistema Operativo.

K.2. Interrupcion de Gestion del Sistema

La unica manera de entrar en el modo SMM es a traves de la activacion de la patilla

SMI# que es una interrupcion no enmascarable independiente del sistema de interrupcio-

nes/excepciones convencionales. No es reentrante.

K.3. Conmutacion de modos de operacion

Cuando se produce una peticion SMI#, se completan las interrupciones pendientes

y se salva el contexto de ejecucion actual en la memoria especial SMRAM que es una

memoria independiente e inaccesible desde otros modos de funcionamiento (aunque pue-

de hacerse ası si se quiere). La interrupcion SMI# tiene mas prioridad que las demas

interrupciones/excepciones.

Para salir del modo SMM hay que ejecutar la instruccion RSM, que por otra parte solo

es reconocida en modo SMM. Esta instruccion recupera el contexto de ejecucion y retorna

al programa y modo de operacion interrumpido.

Si al recuperar el contexto se encuentra informacion no coherente, el microprocesador

se para y es necesario reiniciarlo.

227

Page 228: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

228 SMRAM

K.4. SMRAM

Es una memoria mapeada en el espacio de direcciones fısico que contiene el codigo

que se ejecuta en modo SMM y que guarda el contexto del microprocesador y otras

informaciones del disenador (OEM).

Su tamano por defecto es de 64KB, aunque puede ser de hasta 4GB y comienza en

SMBASE=3000h. Cuando se entra en el modo SMM se ejecutan instrucciones a partir de la

posicion SMBASE+8000h y se guarda el contexto de ejecucion en SMBASE+FE00h.

K.5. Entorno de ejecucion de la rutina SMI

Despues de salvar el contexto de ejecucion del microprocesador, se funciona en un

modo real con algunas caracterısticas:

Se pueden direccionar 4GB. No se puede usar el direccionamiento extendido de 36

bits.

El tamano de los segmentos es de 4GB.

Se entienden los codigos de operacion como de 16 bits.

Para acceder a las instrucciones de 32 bits se codifican los prefijos de 32 bits.

Se inicializan todos los registros generales con unos valores especıficos.

Se inhiben todas las interrupciones y excepciones.

• EFLAGS.IF=0.

• EFLAGS.TF=0.

• DR7=0. Deshabilita los breakpoints.

• Las interrupciones NMI, SMI y A20M son bloqueadas por hardware.

Se podrıan habilitar las enmascarables pero requiere tener preparadas las tables,

etc.

El uso de la FPU

• Hay que identificar la FPU con CPUID.

• Habrıa que salvar el contexto de la FPU con la instruccion FSAVE.

• Hay que enmascarar todas las posibles excepciones de coprocesador si las ru-

tinas de atencion no estan.

Page 229: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Capıtulo K. Modo de Gestion del Sistema (SMM) 229

• Al retornar habra que recuperar el contexto de la FPU.

Page 230: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Indice alfabetico

Acarreo, 36Arquitectura

CISC, 20Harvard, 16RISC, 20Von Neumann, 16

ASIC, 14

Big endian, 19Bit pegajoso, 65, 102, 151

Codigo de error, 130

Desbordamiento, 36DSP, 14

InstruccionesAAA, 47AAD, 47AAM, 47AAS, 47ADC, 45ADD, 45AND, 48BOUND, 55BSF, 52BSR, 52BSWAP, 41BT, 51BTC, 51BTR, 51BTS, 51CALL, 54CBW, 44CDQ, 44CLC, 58CLD, 58CLI, 58CMC, 58CMOVcc, 40CMP, 47CMPSx, 56CMPXCHG, 42CMPXCHG8B, 42CPUID, 60CWD, 44

CWDE, 44DAA, 47DAS, 47DEC, 46DXOS, 71EMMS, 81ENTER, 56F2XM1, 72FABS, 70FADD, 69FBLD, 68FBSTP, 68FCHS, 70FCLEX, 72FCMOVcc, 68FCOM, 71FCOMI, 71FDECSTP, 73FDIV, 70FDIVR, 70FFREE, 73FIADD, 69FICOM, 71FIDIV, 70FIDIVR, 70FILD, 68FIMUL, 70FINCSTP, 73FINIT, 72FIST/FISTP, 68FISUB, 69FISUBR, 69FLD, 68FLD1, 72FLDCW, 72FLDENV, 72FLDL2E, 72FLDL2T, 72FLDLG2, 72FLDLN2, 72FLDPI, 72FLDZ, 72FMUL, 70FNOP, 73FPATAN, 71

230

Page 231: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

INDICE ALFABETICO 231

FPREM, 70FPREM1, 70FPTAN, 71FRNDINT, 70FRSTOR, 73FSAVE, 73FSCALE, 70FSIN, 71FSINCOS, 71FSQRT, 70FST/FSTP, 68FSTCW, 72FSTENV, 72FSTSW, 72FSUB, 69FSUBR, 69FTST, 71FUCOM, 71FUCOMI, 71FWAIT/WAIT, 73FXAM, 71FXCH, 68FXTRACT, 70FYL2X, 72FYL2XP1, 72HLT, 93IDIV, 46IMUL, 45IN, 43INC, 46INSx, 57INT, 55INT3, 55INTO, 55IRET, 55IRETD, 55Jcc, 53JMP, 52LAHF, 59LEA, 59LEAVE, 56LOCK, 93LODSx, 56LOOP, 53LOOPE, 53LOOPNE, 53LOOPNZ, 53LOOPZ, 53Lxx, 59MOV, 40MOVD, 78MOVQ, 78MOVSX, 44MOVSx, 56MOVZX, 44

MUL, 46NEG, 46NOP, 59NOT, 48OR, 48OUT, 43OUTSx, 57PACKSSxx, 79PACKUSWB, 80PADDSx, 78PADDx, 78PAND, 80PANDN, 80PCMPEQx, 79PCMPGTx, 79PMADDWD, 79PMULLW/PMULHW, 78POP, 43POPA, 43POPAD, 43POPF, 43POPFD, 43POR, 80PSLLx, 81PSRAx, 81PSRLx, 81PSUBSx, 78PSUBUSx, 78PSUBx, 78PUNPCKHxx, 80PUNPCKLxx, 80PUSH, 42PUSHA, 43PUSHAD, 43PUSHF, 42PUSHFD, 42PXOR, 80RCL, 51RCR, 50RDMSR, 93RDPMC, 93RDTSC, 94REP, 57REPE, 58REPNE, 58REPNZ, 58REPZ, 58RET, 54ROL, 50ROR, 50RSM, 93SAHF, 59SAL, 49SAR, 48SBB, 45

Page 232: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

232 INDICE ALFABETICO

SCASx, 56SETcc, 52SHL, 49SHLD, 49SHR, 49SHRD, 49STC, 58STD, 58STI, 58STOSx, 57SUB, 45TEST, 52UD2, 60WRMSR, 93XADD, 42XCHG, 41XLATB, 60XOR, 48

Little endian, 19

Mapa de permisos de E/S, 136Memoria

modelo direccionamiento real, 33modelo plano, 32modelo segmentado, 32

Microcontroladores, 14Microprocesador

definicion, 15Modo de funcionamiento

gestion del sistema, 32protegido, 31real, 31virtual 86, 31

MTRR, 144

Paridad, 36Pila

Maquina, 17Pipelining, 21Procesadores paralelos, 14Punto flotante, 61

Segmento de estado de tarea, TSS, 135Semiacarreo, 36

Time Stamp Counter, 94, 155

Page 233: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

Bibliografıa

[1] 80386 Manual de Referencia Hardware. Anaya Multimedia, 1989. ISBN: 84-7614-210-2.

[2] Introduccion al 80386. Anaya Multimedia, 1989. ISBN: 84-7614-182-3.

[3] Intel Architecture Software Developer’ s Manual Volume 1: Basic Architecture. Intel,1999.

[4] Intel Architecture Software Developer’ s Manual Volume 2: Instruction Set Reference.Intel, 1999.

[5] Intel Architecture Software Developer’ s Manual Volume 3: System Programming.Intel, 1999.

[6] The Netwide Assembler (NASM Project), 1999. http://www.cryogen.com/Nasm.

[7] J.M. Angulo. Microprocesadores 8086, 80286 y 80386. Paraninfo, 1990. ISBN: 84-283-1753-4.

[8] Jose M. Angulo and Enrique M. Funke. 386 y 486. Microprocesadores avanzados.Introduccion al Pentium. Paraninfo, 1994. ISBN: 84-283-2066-7.

[9] Kenneth J. Ayala. The 8086 Microprocessor: Programming and Interfaceing The PC.Delmar Publishers, 1994. ISBN: 0-314-01242-7.

[10] Birmelin. Manual de los Procesadores 80xxx y Pentium. Marcombo, 1995.

[11] B. Brey. Los microprocesadores Intel avanzados. Megabyte Noriega, 1994.

[12] Barry B. Brey. Los microprocesadores Intel. Arquitectura, programacion, e interfaces.Prentice-Hall, 1994. ISBN: 968-880-481-9.

[13] Paul A. Carter. PC Assembly Language. 2001.

[14] Francisco Charte Ojeda. Ensamblador para DOS, Linux y Windows. Anaya Multi-media, 2003. ISBN: 84-415-1482-8.

[15] Intel Corporation. The Complete Guide to MMXTM Technology. Computing McGrawHill, 1997. ISBN: 0-07-006192-01.

[16] John H. Crawford and Patrick P. Gelsinger. Programacion del 80386. Anaya Multi-media, 1991. ISBN: 84-7614-294-3.

[17] Richard C. Detmer. 80x86 Assembly Language and Computer Architecture. Jonesand Bartlett Computer Science, 2001. ISBN: 0-7637-1773-8.

233

Page 234: Sistemas Electr onicos para el Tratamiento de la Informaci on 1jesman/BigSeti/seti1/Protegido/...la asignatura de Sistemas Electr´onicos para el Tratamiento de la Informaci´on 1,

234 BIBLIOGRAFIA

[18] Glenn Hinton, Dave Sager, Mike Upton, Darrell Boggs, Doug Carmean, Alan Kyker,and Patrice Roussel. The microarchitecture of the pentium[tm] 4 processor. IntelTechnology Journal, Q1, 2001.

[19] Peter L.B. Johnson. ECE 291: Computer Engineering II, January 2003 LaboratoryNotes. 2003.

[20] Mohamed Rafiquzzaman. Microprocessors and Microcomputer-Based System Design.CRC-Press, 1995. ISBN: 0-8493-4475-1.

[21] William Stallings. Organizacion y Arquitectura de Computadores. Prentice Hall,2000. ISBN: 84-205-2993-1.