Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Apleu1 PDF
Apleu1 PDF
Apuntes de clase
Un agradecimiento especial a:
- Anne Boutrell? estudiante -de intercambio- de la carrera de ingeniería en automatización y
control, por la transcripción del texto.
- David Villa Márquez, estudiante de ing. en electrónica por la revisión del texto y la
realización de esquemas.
Introducción
Se conoce como Lenguaje Ensamblador al conjunto de instrucciones que una unidad de
procesamiento puede realizar.
Las PC de ambas compañías se comercializan con gran éxito durante un par de años, sin
embargo ocurre un evento sustancial, hacia 1984 tanto Intel como Motorola adquieren la
experiencia y técnica necesaria como para dar un salto en el diseño y fabricación de
microprocesadores, significando con esto obtener un canal de datos y de direccionamiento
mayor, así como en en los registros internos del mismo, todo ello significando mayor.
La familia de µP 8088 es empleado en las computadoras personales (PC) compatibles con IBM,
emplearlo necesariamente requiere conocer la parte física de la maquina: el hardware (su
construcción); y sobre la que trabajara: el software (lo abstracto).
La memoria interacciona entre el CPU y el sistema de E/S. Los programas se cargan en memoria,
se relocalizan y se ejecutan.
– El primer modelo pasa el manejo de memoria es la “maquina desnuda” que tiene un control
completo sobre la memoria. Esto implica un sistema con aplicación especifica
Al encender la maquina se ejecuta un programa llamado “boot strap loader”, el cual se carga a sí
mismo, esto lo hace leyendo los primeros 512 bytes de un disco.
Al encender la maquina o en el reset, el µP inicia direccionando la parte mas alta de la memoria
(FFFF0 -coloca en el registro CS: F000 e ip: FFF0-), ésta localidad de memoria corresponde
físicamente al ROM. El µP lee el contenido de esta dirección mediante el ducto de datos.
La instrucción que se encuentra es un salto lejano hacia la dirección F000: E05B lugar de la
memoria en la que se encuentra la secuencia de rutinas del POST (Power On System Test) la
cual es un programa que se encarga de ejecutar pruebas e inicializar la circuitería tanto de la
tarjeta madre como la de los periféricos.
El grado y forma de probar/inicializar varia dependiendo de los diferentes BIOS existentes pero
en general la secuencia es la siguiente:
- Checa los registros del CPU
- Configura temporizador para la RAM dinámica.
- Configura el DMA para refrescar le RAM dinámica.
- Verifica que la actualización de RAM dinámica este operando.
- Prueba la parte baja de la RAM (16-64 KB).
- Cargar los vectores de interrupción y conseguirá un área stock en la parte baja de le
RAM.
- Inicializa dispositivos de video y teclado.
- Prueba y verifica el tamaño de la RAM restante.
- Inicializa los puertos COM, LPT y des juegos.
- Inicializa el sistema de disco flexible.
- Inicializa el sistema de disco duro.
- Llama a la interrupción de ejecución de Bootstrap.
Si la prueba encuentra algún error el programa regresa señales audibles (beeps), por lo que se
tienen diferentes códigos de beeps dependiendo del tipo de error encontrado (aproximadamente
45 diferentes para errores fatales).
Bootstrap
En caso de no encontrar errores o ninguno fatal, el programa genera la interrupción 19 de
ejecución de “boostrap loader”, el cual es un programa que lee el contenido de los primeros 512
bytes de un disco cargándolos en memoria para ser ejecutados.
Estos módulos de ROM pueden reemplazar las rutinas originales del BIOS y en dado caso tomar
los recursos de la maquina para una aplicación especifica.
05000 00000
Memoria de Aplicación Tabla de vectores de
(640KB) interrupción
0FFFF 001DF (480 Bytes)
A0000 001E0
VRAM para EGA y VGA Tabla de vectores de
(128 KB) usuario
BFFFF 002FF (288 Bytes)
C0000 00300
Área de expansión de ROM Área de Stack de
BIOS de video BIOS
C7FFF (32 KB) 003FF (256 Bytes)
C8000 00400
Adaptador ROM Área de Datos de
(32 KB) BIOS
C8FFF 004FF (256 Bytes)
D0000 00500
Adaptador de ROM Uso de DOS (Si S.O. DOS es
(64 KB) (256 Bytes) el residente)
DFFFF 005FF
E0000 00600
Ext. de BIOS, Redes o Memoria RAM para
Adaptador de ROM usuario
EFFFF (64 KB) 9FFFF (638 KB)
F0000 BIOS ← FFFF0
(64 KB) Dirección de arranque
del µP
FFFFF
En el área de datos del BIOS se encuentran las direcciones de los dispositivos. Estos datos se
encuentran en memoria entre las direcciones 0040:0000 – 0040:00FF por lo que teniendo
dirección de base 00400 (0040:0000) cada 2 bytes se tiene:
Corrimiento:
00 - Dirección del COM1
02 - Dirección del COM2
04 - Dirección del COM3
06 - Dirección del COM4
08 - Dirección del LPT1
0A - Dirección del LPT2
0C - Dirección del LPT3
0E - No usado (apuntador a datos de extensión de bios)
10 - Dirección de equipamiento variable- no usada
12 - tamaño de memoria en bloqueo de 1 Kbyte
15 - no usada
17 - bandera1 de teclado
18 - bandera2 de teclado
19 - buffer de la tecla <ALT>
1A - inicio del buffer de teclado
1C - final del buffer de teclado
1E - buffer del teclado
3E - bandera de recalibracion del floppy
3F - estado del motor de floppy
40 - contador del apagado del motor de floppy
41 - byte de estado del floppy
42 - bytes de estado del floppy
REGISTROS DEL ΜP
Se dividen en:
- registros de uso general
- registros apuntadores y de índice
- registros de segmentos
Existe un registro de banderas que señala el estado de la unidad aritmética y lógica (ALU).
CS Código
DS Datos
ES Extra
SS Pila
FS
GS
Registros de segmentos
Estos generan direcciones en la memoria al combinarse con otros registros del µP
- CS (código): Indica el segmento de memoria que contiene el código del programa.
Define la dirección inicial de la sección de memoria que contiene el código
- DS (datos): Indica el segmento de memoria que contiene los utilizados por el programa.
Se accede a los datos por medio de un desplazamiento o a través del contenido de otros
registros que contienen la dirección de desplazamiento.
- ES (extra o adicional): Lo utilizan algunas instrucciones de cadenas para constituir el
destino de los datos
- SS (pila): Indica el segmento de memoria utilizada para la pila. El punto de entrada de
la pila esta definido por los registros de este segmento, así como por los registros de los
apuntadores de pila.
- FS y GS: Registros de segmentos complementarios que permiten que los programas
accedan a dos segmentos de memoria adicionales.
Registro de banderas
Es un registro en el que cada bit indica un estado particular del µP, estos son:
- C (acarreo): Indica que hubo acarreo después de una suma o un “préstamo” después de
una resta. Tambien indica condiciones de error, según lo establezcan algunos
programas o procedimientos.
- P (paridad): Es 0 para paridad impar y 1 para la par. La paridad es el conteo de unos en
un numero así por ejemplo un digito 01101 tiene paridad impar y el numero 11011 es
de paridad par.
- A (acarreo auxiliar): Se “enciende” si en una operación de suma o resta existe un
acarreo o un préstamo respectivamente entre las posiciones de los bits 3 y 4 del
resultado. Esta bandera ajusta el valor posteriormente del registro AL
- Z (cero): Indica si el resultado de una operación aritmética o lógica es cero. Si Z=1, el
resultado es cero; si Z=0, el resultado es diferente de cero
- S (signo): Indica el signo aritmético del resultado después de una operación aritmética o
lógica. Si S=1, el bit del signo (el bit del extremo izquierdo de un número) se encuentra
activado o es negativo; si S=0, el bit de signo esta inactivado o es positivo.
- T (trampa): Habilita la función de captura de errores por medio de una característica de
depuración del µP. Si la bandera T esta habilitada (1), el µP interrumpe el flujo de un
programa bajo las condiciones especificadas en los registros de depuración y los de
control. Si T esta en cero lógico, la función de depuración se encuentra deshabilitada.
- I (interrupción): Controla la operación de la terminar de entrada INTR(solicitud de
interrupción). El estado del bit de bandera I es controlado por las instrucciones STI
(activar bandera de interrupción) y CLI (borrar bandera de interrupción)
- D (dirección): Controla la selección de incremento o decremento de los registros DI o
SI en instrucciones de cadenas. Si D=1, los registros disminuyen automáticamente; si
D=0, los registros aumentan automáticamente. La bandera D se activaron la instrucción
STD(activar bandera de dirección) y se desactiva con la instrucción CLD (borrar
bandera de dirección)
- O (sobre flujo): Se actúa si ocurre un sobre flujo al sumar o restar números con signo y
se excede la capacidad de la maquina
El formato del registro es:
0 D I T S Z A P C
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
31 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
IOP IOP
ID VIP VIF AC VM RF NT 1 0 O D I T S Z A P C
←––––8086/8088/80186/80188–––––––→
←––––––––––––––––––––––80286––––––––––––––––→
←––––––––––––––––––––––––––––––––80386/8986DX––––––––––––→
←––––––––––––––––––––––––––––––––––––––80486SX–––––––––––––––→
←––––––––––––––––––––––––––––––––––––––––––––––––Pentium/Pentium II–––––––––––→
- IOPL: (nivel de privilegio de E/S) Dependiendo el nivel de privilegio actual, determina
si se ejecuta E/S sin impedimento o si es menor que el nivel actual, y ocurre una
interrupción.
- NT (tarea anidada): Señala que tarea actual esta anidada pro software dentro de otra, en
el modo protegido de operación.
- RF (reanudar): Se utiliza durante la depuración para controlar la reanudacion de la
ejecución después de la siguiente instrucción.
- VM (modo virtual): Selecciona la operación en modo virtual de un sistema que se
encuentra en modo protegido, permitiendo la coexistencia en memoria de múltiples
particiones del DOS
- AC (verificación de alineación): Se activa al direccionar una palabra o una doble
palabra en una dirección que no es un número par (para palabras) o múltiplo de 4 (para
palabras dobles)
- VIF (bandera de interrupción virtual): Copia del bit de bandera de interrupción
- VIP (interrupción virtud pendiente): proporciona información sobre una interrupción en
modo virtual o interrupciones pendientes.
- ID (identificación): Señala la aceptación de la instrucción CDPUID (instrucción que
proporciona al sistema información sobre el microprocesador, tal como el num. de
versión y el fabricante)
Modos de direccionamientos
LSD – (solo para 386 y 486) carga registros con una dirección de desplazamiento y al registro ds.
Ejemplo: lds bx,[di] ► carga el dato de 32 bits en [di] en bx y ds.
LES, LFS, LGS y LSS se usan como lo anterior pero cada una empleada con su respectivo
segmento.
XCHG – intercambia el contenido de un registro con el otro o alguna localidad de memoria. Por
ejemplo:
xchg[di],ax ► hace [di] ↔ ax
No funciona con registros de segmentos ni intercambio entre localidades de memoria.
XLAT – carga en el registro al dato en memoria cuya dirección es [Alt+bx] asi xlat hace al ←
[al+bx]
IN – transfiere un dato desde un dispositivo de E/S al registro al o ax del µP. Por ejemplo: in
ax,dx o in al,0B10
OUT – transfiere un dato en al o ax a un dispositivo de E/S. Por ejemplo: out 0B10,ax o out
dx,al.
Para hacer cambios de segmentos al que se refiere una instrucción de movimiento de datos se
añade al principio de una instrucción un prefijo con el segmento al que se hace referencia, asi por
ejemplo:
mov ax,[di] hace ax ← [di] el dato se obtiene del segmento de datos
mov ax,cs:[di] el dato se obtiene del segmento de código
SBB – resta con préstamo, igual que una resta pero ahora al resultado también se le resta la
bandera de acarreo. Por ejemplo:
sbb ah,al → ah = ah - al - acarreo
sbb ax,cx → ax = ax - cx - acarreo
sbb di,[bx] → di = di – [bx] – acarreo
CMP – comparación, es una resta que solo afecta los bits de bandera, se compara el contenido de
un registro o el de una localidad de memoria contra otro valor. No se permiten comparaciones
entre localidad de memoria y con registros de segmento. Por ejemplo:
cmp cl,bl → cl – bl y solo cambian las banderas
cmp [di],ch → [di] – ch y solo cambian las banderas
cmp ax,CA01 → ax-CA0 y solo cambian las banderas
IMUL – multiplicación de enteros con signos; el producto requiere encontrarse en al, el resultado
se encuentre en ax. Por ejemplo:
imul [bx] → ax = al * [bx]
imul dh → ax = al * dh
imul di → dx_ax = ax * di
IDIV – división de enteros con signo, el dividendo se encuentra en ax, en al regresa el cociente y
en ah el residuo. Por ejemplo:
idiv bl →
idiv si →
OR - Suma lógica, genera un 1 de salida si cualquiera de las entradas es 1. La salida es cero solo
si ambas son cero. Por ejemplo:
or ah,bl
or dx,[bx]
or [bx],cl
TEST – Efectúa la operación AND pero no realiza el cambio en a prueba por lo que solo afecta
el registro de banderas. Es muy similar a la instrucción cmp (comparar). La instrucción hace
variar el bit cero del registro de banderas; al igual que ‘cmp’ test se usa antes de las instrucciones
de salto. Por ejemplo:
test al,1 → prueba bit menos significativo
jnz otro → si no fue cero salta a ‘otro’
test al,128 → prueba bit mas significativo
jnz mas → no es uno salta a ‘mas’
BTC – Prueba y complementa el bit del operando destino especificado en el operando fuente. Por
ejemplo:
btc ax,3 → prueba y complementa el bit 3 de ax.
BTR – Prueba y hace 0 el bit del operando destino especificado en el operando fuente. Por
ejemplo:
btr ax,1 → prueba y hace cero el primer bit de ax.
}
NOT – Inversión lógica (complemento a uno), contiene un solo operando el cual se le invierte
todos los bits. Por ejemplo:
not ax → invierte los bits de ax
not [bx] → invierte los bits de dato en [bx]
NEG – Inversión aritmética con signo (complemento a dos), se efectúa el complemento a dos del
operando por lo que el signo del dato se invierte. Por ejemplo:
neg ch → ch se complementa a dos
neg [dl] → [dl] se complementa a dos
Instrucciones de corrimiento
Mueven o colocan números a izquierda o derecha dentro de un registro o localidad de memoria.
SAR – corrimiento aritmético a la derecha por lo que el signo se copia igual (no se pierde).
Complemento a 2
Se emplea para representar números con signo:
Los números enteros son signo. Un registro de 16 bits representa cualquier numero entero entre 0
y 65535 (216-1), si el bit mas significativo se emplea para indicar el signo del numero, entonces
el mayor dato entero que puede representarse es de 15 bits mas uno de signo, o sea, datos entre -
32767 y +32767. El µP utiliza aritmética con el complemento a 2, en parte, los números
positivos se representan de manera normal y los negativos por su complemento. Por ejemplo, el
número -79 se representa:
01001111b → 79d
complemento a 1
10110000b → se invierten todos los bits representativos
+ 1b → se agrega 1 para complemento a 2
10110001b = – 79d
Rotaciones:
Estas instrucciones hacen “rotar” los bits del dato en un registro o localidad de memoria.
ROL – Rota a la izquierda los bits en una localidad de memoria o registro. Los bits que salen del
registro se colocan al principio del mismo. Ejemplo:
rol si,1 → rota si en un lugar a la izquierda
rol ax,cl → rota ax a la izquierda el numero de lugares indicados en cl
ROR – Rota a la derecha los bits de una localidad de memoria o registro. Los bits que salen del
registro se colocan al final del mismo. Ejemplo:
ror [bp],cl → rota el dato en [bp] cl veces a la derecha.
ror bx,1 → rota bx de un lugar a la derecha
RCL – Similar a ROL pero el dato rota además a trabes del bit de acarreo del registro de
banderas. Ejemplo:
rcl bl,1 → rota el dato en bl 1 vez a la derecha
rcl ax,cl → rota el dato ax el numero de veces indicado en cl a la izquierda
RCR – Similar a ROR pero el dato rota además a través del bit de acarreo del registro de
banderas. Ejemplo:
rcr ah,cl → rota ah el numero de lugares indicado en cl.
BSF – Rastreo hacia delante el cual realiza la operación rol buscando el primer bit que sea a uno,
si se encuentra en 1 la instrucción pone a 1 la bandera de cero del registro de banderas y la
posición de dicho bit se carga en el operador de destino. Por ejemplo:
bsf ax,cx → en cx se pone el numero del bit donde se encuentro el primer 1 de ax.
En caso de no encontrar ningún 1 las instrucciones coloca 0 en el bit de cero del registro de
banderas.
SCASW – Igual que el anterior pero ahora es para palabra por lo que usa el registro ax.
SCASD – Igual que los anteriores pero para dobles palabras por lo que se compara el registro
EAX (solo para el µP 386 y 486).
Estas instrucciones pueden usar la bandera de dirección (D) del registro de banderas para
seleccionar incrementos o decrementos automáticos del registro DI así usando un prefijo es
posible repetir una búsqueda a lo largo de un bloque de memoria completo. Por ejemplo:
mov di,0140
mov cx,0100
mov al,55
repne scasb
Se apunta a una localidad de memoria, el contador se pone a 100 y se busca el dato 55 a lo largo
de todo ese bloque de memoria.
El prefijo repne (repite mientras no sea igual) hace que la instrucción scasb se repita mientras cx
no sea cero o hasta que exista la condición de igualdad.
El otro prefijo que puede usarse es repe (repetir mientras sea igual).
CMPSD – Igual que los anteriores pero para dobles palabras (solo µP 386 y 486).
Saltos: Es un grupo de instrucciones para control del programa y que permita saltar secciones de
un programa transfiriendo el control a otra parte de la memoria. Se ejecutan cálculos numéricos y
basados en el resultado de estos los bits del registro de banderas cambian y estos son los
indicadores para ejecutar o no un salto.
JMP – Salto incondicional. No depende de ninguna bandera del registro de banderas para
llevarse a cabo, puede ser de tres tipos:
- corto
- cercano
- lejano
El salto corto ocupa 2 bytes así lo que permite transferir el programa a localidades entre +127 y –
128 bytes desde la localidad donde esta la instrucción.
El salto lejano es una instrucción de 3 bytes así que permite cambiar el flujo hasta de -/+32
Kbytes desde donde se localiza la instrucción.
El salto lejano es una instrucción de 5 bytes permitiendo brincar a cualquier localidad de
memoria dentro de la maquina. En µP 386 y 486 el brinco corto esta entre +/- 2 Gbytes si se
trabaja en el modo protegido y de 4 Gbytes si es lejano.
Salto Corto
Un salto corto se le llama también “salto relativo” porque se da hacia la misma dirección la
misma distancia encuéntrese en donde se encuentre la instrucción ya que la dirección a la que se
salta no esta en el código de operación sino que se almaneca el código y el desplazamiento a
ejecutarse, entonces: [codigo/desplazamiento] como por ejemplo jmp 100 de tal forma que al
registro ip se la suma el desplazamiento.
Salto Cercano
Similar al anterior pero ahora la distancia se encuentra dentro del tamaño del segmento de
código, ocupa un byte para el código y dos bytes para el desplazamiento por lo que el salto es de
una distancia de 16 bits con signo o sea +/-32 Kbytes de distancia e el salto. En los µP 386 y
486 el desplazamiento es de 32 bits con el signo o sea +/- 2 Gbytes.
Una característica importante de ambos tipos de salto es que al ser relativos al punto donde se
origina esto permite que el código colocado en cualquier parte de la memoria y funcionar
apropiadamente, esto se le llama programa relocalizable por lo que un S.O. puede cargarlo en
cualquier parte de la memoria.
Salto Lejano
Estos ocupan un byte de le instrucción y 4 con la dirección hacia donde se desea saltar, esto
implica desplazarse a cualquier parte de la memoria (salto entre-segmentos).
Brincos condicionales
En µP 386 y 486 los brincos condicionales son cortos y en 386 y 486 pueden ser cortos o
cercanos. Las instrucciones de brinco condicional prueban las banderas de signo cero o acarreo
o paridad o sobreflujo y si la condición es verdadera se ejecuta la transferencia. Estas son:
ja c = 0 y z = 0 salta si esta por arriba de
jae c=0 salta si esta arriba o no es igual a
jb c=1 salta si esta por abajo de
jbe c = 1 o z = 1 salta si esta por abajo o es igual a
jc c=1 salta si hubo acarreo
je o jz z=1 salta si fue igual a cero
jg z = 0 y s = 0 salta si es mayor a
jge s=0 salta si es mayor o igual a
jl s≠0 salta si es menor que
jle z = 1 o s ≠ 0 salta si es menor o igual a
jnc c=0 salta si hubo acarreo
jne o jnz z=0 salta si no fue igual a o no fue cero
jno o=0 salta si no hubo sobreflujo
jns s=0 salta si no hay signo
jnp/jpo p=0 salta si no hay paridad o fue impar
jo o=1 salta si no hubo sobreflujo
jp/jpe p=1 salta si hay paridad
js s=1 salta si hay signo
jcxz cx = 0 salta si cx = 0
jecxz ecx = 0 salta si ecx = 0
LOOPE – Es un loop condicional (similar al “rep”) “repite mientras sea igual”, el ciclo se
mantiene mientras la condición sea igual o cx no sea cero y sale del ciclo si la condición no es
igual o cx es cero, por ejemplo:
mov cx,10
otro :
cmp ah,al
loop otro → salto a ‘otro’ si cx = 0 y se cumple la comparación
Memoria
0000
S. O.
cs:ip → Código
Registros a modificar
para desplazarse entre ds:bx → Datos
la memoria del Programa
código, datos y pila ss:sp → Pila
de un programa es →
Extra
FFFFF
Call Cercano
Ocupa 3 bytes de longitud. El primer contiene el código de la operación. 2do y 3er el
desplazamiento o sea +/- 32 bytes.
En 386 y 486 el desplazamiento es de 32 bits o sea +/- 2 Gbytes.
Al ejecutar el call cercano se salva en la pila el registro ip y a ip = ip + desplazamiento (igual
que jmp cercano).
Call Lejano
Ocupa 5 bytes uno del código y dos para el desplazamiento por lo que puede saltar 2 pares, el
segmento cs a cualquier lugar de la memoria.
Al ejecutarse se guarda en la pila el ip y luego is.
RET – Instrucción para retornar de una subrutina, obtiene de la pila un numero de 2 bytes y lo
coloca en ip (retorno cercano). En los µP 386 y 486 activos en modo registro protegido extrae 4
bytes de la pila y los coloca en EIP.
RETF – Instrucción para retorna de una subrutina, obtiene de la pila 4 bytes y los coloca en cs e
ip respectivamente.
En los µP 386 y 486 en modo protegido el retorno lejano obtiene de la pila 6 bytes, los primeros
4 se colocan en EIP y los 2 restantes en CS.
Vector de interrupción
Este es un numero de 4 bytes y se almacenan en los primeros 1024 bytes de la memoria (00000-
003FF) que direcciona el µP en modo real por lo que no hay 256 vectores diferentes. Cada vector
contiene la dirección de una rutina de servicio (servicio de interrupción).
Cada vector contiene un valor de ip y uno de cs con la que se forma la dirección de memoria
donde se localiza el servicio de interrupción. Los dos primeros bytes se cargan en el ip y los dos
siguientes en cs.
Memoria CMOS en la AT
El CMOS es un tipo de memoria respaldada con batería por lo que no es volátil, se encuentra
ubicada en el mapa de memoria como dispositivo de E/S en las direcciones 070-071 por lo que el
acceso a elle es a través de las instrucciones “in” y “out”.
Intel reserva los primeros 32 vectores de interrupción para emplearse en el mismo µP (para
manejo de errores o excepciones), por ejemplo es posible generar interrupción 0 (la cual es un
servicio en caso de división por cero o por sobreflujo).
Los primeros 5 vectores de interrupción son idénticos en todos los µP desde 8086 hasta 486.
Las interrupciones dedicadas al µP son las siguientes:
- Int 0: división por cero.
- Int 1: modo paso a paso o de rampa; se de eso cada ejecución de una instrucción si esta
activo el bit TF (bandera de trampa) de registro de banderas. Al aceptar esta
interrupción se borra el bit TF para ejecutar ahora un interrupción.
- Int 2: interrupción de hardware no enmascaradle, se genera l colocar ‘1’ en la terminal
NMI del µP.
- Int 3: interrupción de un byte. Ocupa un solo byte y se emplea comúnmente para parar
un punto de ruptura en un programa para depararlo (se genera por la bandera TF).
- Int 4: interrupción de sobreflujo. Interrumpe el programa si existe un sobreflujo (la
bandera OF en alto).
- Int 5: Bound: Instrucción; compara un registro con dos palabras de datos en memoria.
Por ejemplo:
bound ax,[bx]; se genera si ax ≥ [bx] y ax ≤ [bx +1]
- Int 6: código invalido. Se genera si se encuentra una instrucción indefinida.
- Int 7: Coprocesador no disponible. Se genera cuando no se encuentra un coprocesador
después de ejecutar alguna instrucción ESC o WAIT y no se encuentra el coprocesador.
- Int 8: Falta Doble. Ocurre cuando se dan dos interrupciones durante la misma
instrucción.
- Int 9: Sobreflujo del segmento del coprocesador; se genera si la instrucción ESC se
extiende mas allá del desplazamiento FFFF.
- Int 10: Segmento de estado de tarea no valido; se genera si el segmento de estado de
tarea (TSS) es mayor a 002B.
- Int 11: Segmento no presente, se genera si el bit P ≠ 0 en un descriptor (el segmento no
esta presente o no es valido).
- Int 12: Desborde del segmento de piles, se genera si el segmento de pila no esta
presente o se ha excedido el limite del mismo.
- Int 13: Protección general. Se genera al ocurre violaciones de la protección del µP
activo en modo protegido (µP 8028 a 486), estas violaciones son:
a) Limite excedido de la tabla de descripciones.
b) Reglas de privilegio violadas.
c) Se cargo un tipo no valido para el segmento del descriptor.
d) A escribir en el segmento de código que esta protegido.
e) Leer el segmento de solo ejecutar código.
f) Escribir el segmento de solo leer datos.
g) Limite excedido del segmento.
h) CPL ≠ 0 al ejecutar CTS, ALT, LGDT, LIOT, LLDT, LMSW o LTR.
i) CPL > IOPL al ejecutar CLI, IN, NS, LOCK, OUT, OUTS y STI
- Int 14: Falla de acceso a pagina; se genera cuando falla el acceso a una pagina de
memoria en 386 y 486.
- Int 16: Error del coprocesador; se genera cuando ocurre un error del coprocesador en
las instrucciones ESC y WAIT (µP 386).
Orden de prioridad
Las interrupciones tienen un orden de prioridad, de forma que si ocurren dos de forma
simultánea es atendida la de prioridad más alta. El orden en que se atienden es el siguiente:
1º: Interrupciones (o excepciones) del procesador.
2º: Interrupciones software.
3º: Interrupciones de hardware (o periféricos) no enmascarables.
4º: Interrupciones hardware (o periféricos) enmascarables.
o INT 1: paso a paso, se produce tras cada instrucción cuando el procesador está en
modo traza (utilizada en depuración de programas).
o INT 6: código de operación inválido (sólo a partir del 286). Se produce al ejecutar
una instrucción indefinida, en la pila se almacena el CS:IP de la instrucción ilegal.
Interrupciones hardware:
Son las generadas por la circuitería del ordenador en respuesta a algún evento. Las más
importantes son:
o INT 8: Se produce con una frecuencia periódica determinada por el canal 0 del
chip temporizador 8253/8254 (en la práctica, unas 18,2 veces por segundo). Como
desde esta interrupción se invoca a su vez a INT 1Ch -porque así lo dispuso IBM-
, es posible ligar un proceso a INT 1Ch para que se ejecute periódicamente.
o INT 9: generada al pulsar o soltar una tecla.
o INT 0Ah, 0Bh, 0Ch, 0Dh, 0Eh, 0Fh: Puertos serie, impresora y controladores de
disquete.
o INT 70h, 71h, 72h, 73h, 74h, 75h, 76h, 77h: Generadas en los AT y máquinas
superiores por el segundo chip controlador de interrupciones.
Interrupciones de periféricos
FFFFFFFF