You are on page 1of 26

Lenguaje Ensamblador

Apuntes de clase Facultad de Ciencias Químicas e Ingeniería Universidad Autónoma de Baja California – Campus Tijuana Prof. Juan Jesús López García 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 actuales unidades de procesamiento se incluyen en un solo circuito integrado, conocido como microprocesador (µP); cada instrucción que ejecuta la unidad de procesamiento es en realidad un conjunto de instrucciones más simples incluidas en el hardware del mismo circuito (firmware), el conjunto de dichas instrucciones simples es conocido como microprogramación ya que se encuentran incluidas en el microprocesador. En 1978, la compañía XXX fabricante de calculadoras solicitó a la compañía Intel -fabricante de semiconductores- la construcción de un circuito integrado capaz de ejecutar un conjunto de instrucciones que le permitiría reducir la cantidad de circuitos, permitiéndole la reducción del tamaño y costo en la fabricación de calculadoras, en respuesta, Intel desarrolló el primer circuito µP al que nombró 4004 (poseía un canal de datos de 4 bits), un juego de NNN instrucciones (suma, resta, comparación...), registros de ¿?? bits y capacidad para direccionar YYY KB de memoria. Otros fabricantes de aparatos electrónicos (calculadoras, juguetes, ...) se interesaron por el circuito y su venta ascendió exponencialmente, fue entonces que Intel notó la importancia del desarrollo e invirtió esfuerzo en la fabricación de un µP mejorado, en 1980 saca al mercado el µP 8008 (canal de datos de 8 bits), tenía un juego de NNN instrucciones, registros de 16 bits y capacidad para direccionar 65,536 bloques diferentes de memoria (64 KB). A la par, la compañía Motorola -fabricante también de semiconductores- desarrolla el µP 6800 similar en capacidad al 8008 de Intel. Empieza entonces la competencia entre ambas compañías para ganar el mercado de venta de µP, produciendo las mejoras, casi a la par, en sus microprocesadores. La siguiente versión de Intel poseía mismo juego de instrucciones, velocidad de procesamiento similar, pero a diferencia del 8008, era capaz de direccionar hasta 1,048,576 bloques de memoria (1MB), Intel lo nombró µP 8088. La forma en que Intel aumentó su capacidad de direccionar memoria fue manipulando dos de sus registros de 16 bits para seleccionar localidades de 20 bits, para ello ideó un sistema lógico-físico de direccionamiento.

La compañía Apple, recientemente formada por Steve Jobs y ¿?????? armaron una computadora para uso casero (computadora personal ó PC por sus siglas en inglés) usando el µP 6800 de Motorola, un mes después la compañía IBM (fundada en ‘???? por ¿???) saca al mercado una PC basada en el procesador 8088 de Intel. 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. Cada µP posee su propio conjunto de instrucciones (juego de instrucciones), el juego de instrucciones mas conocido es el del µP 8088 del fabricante de semiconductores INTEL. 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). El software básicamente se enfoca al manejo de memoria, esto es:

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 – El segundo modelo es el de “monitor residente”, se divide la memoria en dos secciones, una para el usuario y otra para el S.O. Esto implica un sistema para aplicaciones múltiples. 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.

Inicializa el sistema de disco duro. Inicializa el sistema de disco flexible. En general el formato es el siguiente: 55. Cargar los vectores de interrupción y conseguirá un área stock en la parte baja de le RAM. 40 Call C000 : 1F4E ↓ RETF ––––– ––––– ––––– ––––– ←40Hx512Byts=8000 . las tarjetas de video EGA. el cual es un programa que lee el contenido de los primeros 512 bytes de un disco cargándolos en memoria para ser ejecutados. VGA o SVGA tienen sus propias funciones de BIOS que reemplazan a la interrupción original 10 N del BIOS (la que en realidad esta diseñada para manejo de tarjetas MDA y CGA). el sistema se detiene sin mostrar ningún indicio visual o audible. Bootstrap En caso de no encontrar errores o ninguno fatal. sus registros y algunas instrucciones. Extensiones del BIOS: En termines generales el POST revisa las funciones individuales del procesador.). controlador de interrupciones. Prueba la parte baja de la RAM (16-64 KB). Si existe error. Continua con dispositivos periféricos como teclado. Si la prueba encuentra algún error el programa regresa señales audibles (beeps). etc. Llama a la interrupción de ejecución de Bootstrap. controlador DMA temporizador. empieza la búsqueda para las extensiones del BIOS. Inicializa dispositivos de video y teclado. Si el contenido de estos 2 bytes son 55H y AAH respectivamente. por lo que se tienen diferentes códigos de beeps dependiendo del tipo de error encontrado (aproximadamente 45 diferentes para errores fatales). Prueba y verifica el tamaño de la RAM restante. etc. Los últimos 2 bytes del total de bloques de 512 bytes de la memoria deben indicar un “checksum” del contenido. El POST hace pruebas buscando extensiones de ROM revisando los desplazamientos 00 y 01 del rango de memoria reservado para funciones de BIOS.- Verifica que la actualización de RAM dinámica este operando. Otros dispositivos como los controladores para discos duros colocan las suyas reemplazando la int 13 del BIOS. unidades de disco. A continuación se revisa el mismo código del BIOS y allí no hay error continua con los dispositivos de la tarjeta madre (RAM. AA. El programa ejecutable propiamente empieza en el desplazamiento 03N. puertos serie y paralelo. Finalizando las pruebas. Por ejemplo. el POST asume que existe código ejecutable en donde el desplazamiento 02 indica el tamaño de la ROM en bloques de 512 bytes. LPT y des juegos. el programa genera la interrupción 19 de ejecución de “boostrap loader”. Inicializa los puertos COM.

con ellos es posible decidir que sistema operativo se desea arrancar cuando existen varios de ellos en el disco duro.El segundo rango va de C000:8000 – D000:HF. de BIOS. Redes o Adaptador de ROM (64 KB) BIOS (64 KB) Área de expansión de ROM BIOS de video (32 KB) Adaptador ROM (32 KB) 00000 001DF 001E0 002FF 00300 003FF 00400 004FF 00500 005FF 00600 9FFFF ← FFFF0 Dirección de arranque Memoria RAM para usuario (638 KB) Tabla de vectores de interrupción (480 Bytes) Tabla de vectores de usuario (288 Bytes) Área de Stack de BIOS (256 Bytes) Área de Datos de BIOS (256 Bytes) Uso de DOS (256 Bytes) (Si S. En términos generales la memoria de la computadora queda dividida de la siguiente manera: 00000 Vectores de Interrupciones 1 KByte 002FF 00000 Tabla de vectores de interrupción (768 Bytes) Área de stack para BIOS (256 bytes) 05000 Memoria de Aplicación (640KB) 0FFFF A0000 VRAM para EGA y VGA (128 KB) BFFFF C0000 C7FFF C8000 C8FFF D0000 Adaptador de ROM (64 KB) DFFFF E0000 EFFFF F0000 Ext. Rangos para extensiones del BIOS: . este segmento no estará disponible. A continuación se carga a memoria el código encontrado a inicio del disco.O. Generalmente el segmento que va de D000:0000 – D000:FFFF se usa para paginas de memoria en tarjetas EMS (para rango de memoria extendida) por lo que si es una tarjeta de éste tipo. Esta se reserva para extensiones de BIOS dadas por controladores de disco duro. . Esta es una extensión reservada para extensiones de BIOS dadas por las tarjetas VGA. Esta parte del disco es comúnmente la que “infectan” los virus de computadoras. EGA y SVGA. entonces esta rutina busca otra unidad de deseo conectada a la PC o a una localidad determinada en el disco duro existente. 4F ← Checksum 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. colocan como primer instrucción su salto hacia su propio código para ser ejecutado al cargarse esa parte en memoria.El primer rango va de C000:0000 – C000:7FFF. . Si no existe disco o es de arranque. También éste lugar del disco es donde se coloca los programas administradores de arranque. DOS es el residente) . Si no encontrase se envía el mensaje de “insertes un disco con sistema y oprimes una tecla”. Al terminar las inicializaciones del bios el proceso que continúa es el de arranque de sistema.––––– BC. Este es el punto al que se transfiere el control cuando se oprime <CTRL><ALT><DEL> hacia algún disco determinado. se lleva a cabo generando la int 19h y conocido como “bootstrap loader” el cual intenta cargar alguna forma de sistema operativo básico.El tercer rango va de E000:0000 – E000:FFFF y se reserva para sistemas con bios de diferente índole (misceláneos).

inicio del buffer de teclado 1C . de esto su nombre. En el EBX puede direccionar datos de memoria. AL.final del buffer de teclado 1E .bytes de estado del floppy REGISTROS DEL ΜP Se dividen en: .bandera2 de teclado 19 . DN y DL) o como de 16 bits (AX.bandera de recalibracion del floppy 3F .tamaño de memoria en bloqueo de 1 Kbyte 15 .estado del motor de floppy 40 .bandera1 de teclado 18 . Aunque se emplean por uso general tienen tareas específicas.Dirección del COM2 04 . Se pueden direccionar como de 8 bits (AW.Dirección del LPT1 0A . ECX y EDX).Dirección del COM1 02 .contador del apagado del motor de floppy 41 . CX y DX). .no usada 17 . También puede contener la dirección de desplazamiento de una localidad en el sistema de memoria (EAX) BX (índice de base): comúnmente conserva la dirección base de los datos que hay en memoria.no usada 12 . BW.Dirección del COM4 08 .Dirección del LPT2 0C .Dirección del LPT3 0E . Registros de propósito general Para el uso que más convenga al usuario. BX. EBX. CN.No usado (apuntador a datos de extensión de bios) 10 .byte de estado del floppy 42 .Dirección de equipamiento variable.registros de segmentos Existe un registro de banderas que señala el estado de la unidad aritmética y lógica (ALU). CL. BL.buffer del teclado 3E .Dirección del COM3 06 .buffer de la tecla <ALT> 1A .registros apuntadores y de índice . 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 .registros de uso general .del µP FFFFF En el área de datos del BIOS se encuentran las direcciones de los dispositivos. AX (acumulador): comúnmente conserva el resultado temporal después de una operación aritmética. En los µP 80386 y 80486 además pueden direccionarse como de 32 bits (EAX.

Define la dirección inicial de la sección de memoria que contiene el código . así como por los registros de los apuntadores de pila. primero en salir) la cual se emplea al usar instrucciones push y pop.SP (apuntador de pila): Direcciona datos en memoria funcionando como pila LIFO (ultimo en entrar. . estas son: . DX (datos): comúnmente contiene la parte más significativa de un producto o la de una división así como el número de puerto E/S. .IP (apuntador de instrucciones): Direcciona siempre la siguiente instrucción a ejecutar el µP. 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.BP (apuntador de base): Usado comúnmente para direccionar un conjunto de datos en memoria. Registros de segmentos Estos generan direcciones en la memoria al combinarse con otros registros del µP .ES (extra o adicional): Lo utilizan algunas instrucciones de cadenas para constituir el destino de los datos . .DS (datos): Indica el segmento de memoria que contiene los utilizados por el programa.CS (código): Indica el segmento de memoria que contiene el código del programa.SS (pila): Indica el segmento de memoria utilizada para la pila. . Registros apuntadores e índices Se utilizan generalmente para apuntar a la localidad de memoria que contiene los datos del operando en muchas instrucciones.Nombres de 32 bits Nombres de 8 bits Nombres de 16 bits Nombres de 8 bits EAX EBX ECX EDX ESP EBP EDI ESI EIP EFLAGS AH BH CH DH -AX-BX-CX-DXSP BP DI SI IP BANDERAS CS DS ES SS FS GS AL BL CL DL Acumulador Índice de base Contador Datos Apuntador de pila Apuntador de base Índice destino Índice de fuente Apuntador de instrucción Banderas Código Datos Extra Pila - CX (contador): contiene el valor de conteo de ciertas instrucciones.SI (índice de fuente): Usado para dimensionar datos (de origen) para usarse en instrucciones de cadenas o arreglos. FLAGS (banderas): Indica la condición del microcontrolador y controla su operación. .DI (índice de destino): Direcciona datos (de destino) para usarse en instrucciones de cadenas o arreglos. El punto de entrada de la pila esta definido por los registros de este segmento. . El apuntador puede ser modificado con una instrucción de salto o de llamada de subrutina. En el ECX puede contener la dirección de desplazamiento de los datos de memoria.

Si D=1. Si Z=1.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 ID VIP VIF AC VM RF NT 13 IOP 1 12 IOP 0 11 10 9 8 7 6 5 4 3 2 1 0 O D I T S Z A P C ←––––8086/8088/80186/80188–––––––→ ←––––––––––––––––––––––80286––––––––––––––––→ ←––––––––––––––––––––––––––––––––80386/8986DX––––––––––––→ ←––––––––––––––––––––––––––––––––––––––80486SX–––––––––––––––→ ←––––––––––––––––––––––––––––––––––––––––––––––––Pentium/Pentium II–––––––––––→ . 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. Si S=1. Tambien indica condiciones de error. 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) .P (paridad): Es 0 para paridad impar y 1 para la par. el bit de signo esta inactivado o es positivo. Esta bandera ajusta el valor posteriormente del registro AL . estos son: . Registro de banderas Es un registro en el que cada bit indica un estado particular del µP.Z (cero): Indica si el resultado de una operación aritmética o lógica es cero. según lo establezcan algunos programas o procedimientos. Si T esta en cero lógico. si Z=0. .- FS y GS: Registros de segmentos complementarios que permiten que los programas accedan a dos segmentos de memoria adicionales. la función de depuración se encuentra deshabilitada. . .S (signo): Indica el signo aritmético del resultado después de una operación aritmética o lógica. los registros aumentan automáticamente.I (interrupción): Controla la operación de la terminar de entrada INTR(solicitud de interrupción). si D=0. el resultado es diferente de cero .C (acarreo): Indica que hubo acarreo después de una suma o un “préstamo” después de una resta.D (dirección): Controla la selección de incremento o decremento de los registros DI o SI en instrucciones de cadenas. el resultado es cero. el bit del signo (el bit del extremo izquierdo de un número) se encuentra activado o es negativo.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). los registros disminuyen automáticamente. 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) . el µP interrumpe el flujo de un programa bajo las condiciones especificadas en los registros de depuración y los de control. si S=0.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. .

Direccionamiento por registro: Transfiere el dato de un registro a otro registro. NT (tarea anidada): Señala que tarea actual esta anidada pro software dentro de otra. VM (modo virtual): Selecciona la operación en modo virtual de un sistema que se encuentra en modo protegido. y ocurre una interrupción.directo .- IOPL: (nivel de privilegio de E/S) Dependiendo el nivel de privilegio actual. Por ejemplo: mov ax.relativo por registros .relativo por base más índice Los modos de direccionamiento de memoria de programa son: .indirecto Modos de direccionamiento de datos Para explicarlos se usa la instrucción mov usada de la siguiente forma: mov destino.22 . de versión y el fabricante) Modos de direccionamientos Los modos de direccionamientos de datos incluyen los de: . fuente . dx .indirecto por registro . determina si se ejecuta E/S sin impedimento o si es menor que el nivel actual.[ab23] .inmediato . 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.directo . Por ejemplo: mov cx. Por ejemplo: mov cx. tal como el num.base mas índice .Direccionamiento indirecto por registro: Transfiere un dato entre un registro a una localidad de memoria direccionada por bx.Direccionamiento directo: Transfiere un dato entre una localidad de memoria y un registro.relativo al programa . ID (identificación): Señala la aceptación de la instrucción CDPUID (instrucción que proporciona al sistema información sobre el microprocesador.registro . Por ejemplo: mov al. RF (reanudar): Se utiliza durante la depuración para controlar la reanudacion de la ejecución después de la siguiente instrucción. [bx] .Direccionamiento inmediato: Transfiere un dato (constante) a un registro. en el modo protegido de operación.

Direccionamiento relativo de memoria de programa. [DI]. SP. Así por ejemplo si se hace: mov ax.[bx + 4] . El termino “relativo” indica “relación con el ip”. Por ejemplo: mov [BX + di]. Se utiliza en los µP en los saltas incondicionales (brincos) y llamadas.Direccionamiento indirecto de memoria de programa. DX.. Por ejemplo: mov ax. F000 . [BX].Direccionamiento relativo por registro: Transfiere un dato entre un registro y una localidad de memoria direccionada por un registro índice o un registro de base + un desplazamiento. lo que se realiza usando cualquier registro (AX. Cuando el “brinco es corto” el desplazamiento es de solo un byte (cuyo valor esta entre +127 y – 128). tiene 3 configuraciones distintas: directa. el brinco (jmp) cuando se realiza entre segmentos (como el del ejemplo) se dice que es un “brinco lejano” y cuando solo es dentro de su mismo segmento se dice que es un “brinco cercano” como por ejemplo: jmp 0100 en el que solo carga ip con 0100. De la familia de µP 8086 permite cierto numero de formas de direccionamiento indirecto de la memoria de programa usando las instrucciones jmp y call. o [SI]) y registro relativo con un desplazamiento. Se utilizan en las instrucciones jump (salto) y call (llamada). Por ejemplo: jmp F000:FFF0 o call F000:FFF0 Estas instrucciones cargan cs con F000 e ip con FFF0. los datos se colocan en la pila con una instrucción push y se recuperan con una pop. . cl . DI. relativa e indirecta. BP. Las instrucciones que realizan direccionamiento directo a la memoria almacenan la dirección junto con el código de operación.Direccionamiento directo a la memoria del programa. o SI) o relativo a registro ([BP]. . Los ensambladores calculan en forma automática la distancia del desplazamiento y seleccionan el tipo de direccionamiento relativo (1 o 2 bytes y hasta 4 bytes en µP 386 y 486). . La pila de memoria emplea el sistema LIFO (ultimo en entrar.Direccionamiento de la pila de memoria. primero en salir). CX.Direccionamiento base mas índice: Transfiere un dato entre un registro y una localidad de memoria direccionada por un registro base (BP o BX) + un registro índice (DI o SI). BX.Direccionamiento relativo base mas índice: Transfiere un dato entre un registro y una localidad de memoria direccionada por un registro índice o un registro de base + un índice + un desplazamiento.[bx + di + 4] Modos de direccionamiento de memoria de programa. Por ejemplo: mov ax. si el “brinco es cerceno” el desplazamiento es de 2 bytes (en tal caso el valor esta entre +32k y –32k). La instrucción call usa la pila para guardar la dirección de la que partió y la instrucción ret recupera de la pila la dirección a la que hay que retornar. Por ejemplo: jmp[2] carga en ip = ip + 2 de tal forma que se “brinca” el numero de bytes indicados desde donde actualmente se encuentra. así por ejemplo: jmp ax -brinca a localidad direccionada por ax del segmento actual jmp [bx] -brinca a localidad del segmento actual almacenada en ds:bx jmp[di + 2] -brinca a localidad (del segmento actual) almacenada en la dirección ds: di + 2 jmp saltos [bx] -brinca a la localidad (en el segmento actual) direccionada por salto + bx donde saltos dw A0C0 dw F0C1 dw 00C2 dw B0C3 .

LEA – carga un registro con la dirección de desplazamiento de los datos especificada en el operando. PUSH salva en la pila cualquier registro interno. LFS. mov word ptr[bx+0100]. FFF0 ret se colocan en cs: ip tales valores.tabla cargan la dirección de desplazamiento de la localidad “tabla” de la memoria en bx. LODS – carga al o ax con datos almacenadas en la dirección de desplazamiento dada por si en el segmento de datos. popf ► recupera el dato en pila y coloca en registro de banderas.dl :transfiere el contenido del registro dl a la localidad de memoria 1000 del segmento de datos. bx. di. si. La pila de memoria se mantiene con el registro sp (apuntador de pila) y el ss (segmento de pila) formando la dirección ss:sp Instrucciones para transferir datos (uso de mov) El mas común es empleando la instrucción mov. sp. Los almacena en el orden ax.push ax mov ax. bp.offset tabla lea bx. LGS y LSS se usan como lo anterior pero cada una empleada con su respectivo segmento.dl : igual a la anterior pero ahora es apuntador a memoria de tamaño de un byte. pop ► (lo contrario de push). datos inmediatos o datos de memoria. Por ejemplo lea bx. LES. si. Transferencia de cadenas de datos. popa ► recupera todos los registros en el orden di. dx. transfiere datos de la pila y los carga en los distintos que pueden ser registros o localidad de memoria.[di] ► carga el contenido de [di] en ax es muy parecido a mov y es equivalente en la instrucción en el ejemplo que mov bx. pushf ► salva registro de bandera. Ejemplo: LODS Lista ► se hace Al=[si] LODSB Lista ► se hace al=[si] cargando solo un byte LODSW Lista ► igual pero carga una palabra en ax . mov byte ptr[bx+0100].[di] ► carga el dato de 32 bits en [di] en bx y ds. pusha ► salva todos los registros internos excepto al de segmento de pila. cx. dx. Por ejemplo: mov dl.al : esta instrucción transfiere el contenido del registro al al la localidad de memoria de tamaño de palabra direccionada por ds:bx0100. sp.[di] : transfiere el contenido de la memoria de datos al registro dl. Ejemplo: lds bx. LSD – (solo para 386 y 486) carga registros con una dirección de desplazamiento y al registro ds. cx y ax. bx. Uso de la instrucción push En µP 8086 y 286 transfiere 2 bytes de datos a la pila y en µP 80380 y 486 transfiere 2 o 4 bytes según sea el tamaño del registro o la localidad de memoria. bp. mov [1000].

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.ax ► hace [di] ↔ ax No funciona con registros de segmentos ni intercambio entre localidades de memoria. asi por ejemplo: mov ax. Ejemplos: mov sb ► transfiere un byte de [DI] ← [SI] mov sw ► transfiere una palabra de [DI] ← [SI] XCHG – intercambia el contenido de un registro con el otro o alguna localidad de memoria. se agrega un 1 a un registro o a una localidad de la memoria.cs:[di] el dato se obtiene del segmento de código Instrucciones aritméticas y lógicas ADD – suma binaria. Es la única transferencia de memoria a memoria que realiza el µP. 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.dx o in al. Se transfiere un byte o palabra desde la localidad DS[SI] a la localidad ES:DI.bl → al = al + bl add bx. Por ejemplo: inc di → di = di + 1 inc ax → ai = ai + 1 . Por ejemplo: xchg[di]. Por ejemplo: in ax.ax o out dx. acarreo auxiliar. Ejemplos add al.dl → contenido de [bx+di] = contenido de [bx+di]+dl en la operación de suma se modifica el contenido de las banderas de signo. paridad y sobreflujo del registro de banderas.0ABC → bx = bx + 0ABC add [bx+di].0B10 OUT – transfiere un dato en al o ax a un dispositivo de E/S. cero. Esta instrucción puede sumar 1 a cualquier registro o localidad de la memoria excepto a registro de segmento.[di] hace ax ← [di] el dato se obtiene del segmento de datos mov ax. Ejemplos: STOSB [di] ← al STOSW [di] ← ax Si se usa REP hace que se repita la instrucción de cadena decrementandose cx hasta que cx = 0 y dado que di se autoincrementa o autodecrementa dependiendo de la bandera de dirección D (D = 0 autoincrementa). INC – suma de incremento.al. MOV – transfiere datos de una localidad a otra en memoria. Por ejemplo: out 0B10.STOS – almacena al o ax en el segmento extra en la localidad direccionada por el registro di.

Por ejemplo: sbb ah.dh → [bx] = [bx] + dh + acarreo SUB – resta binaria.ch → [di] – ch y solo cambian las banderas cmp ax.[bx] → di = di – [bx] – acarreo CMP – comparación. Por ejemplo: idiv bl → idiv si → DIV – división de enteros sin signo.acarreo sbb di. es una resta que solo afecta los bits de bandera. el producto requiere encontrarse en al. igual que add pero además suma el bit de la bandera C de acarreo a los datos des operando.bl → cl = cl . Por ejemplo: cmp cl. en al regresa el cociente y en ah el residuo.cx → ax = ax .CA01 → ax-CA0 y solo cambian las banderas IMUL – multiplicación de enteros con signos. Por ejemplo: dec bx → bx = bx – 1 dec sp → sp = sp – 1 dec [di] → [di] = [di] – 1 SBB – resta con préstamo.al .bl → cl – bl y solo cambian las banderas cmp [di].ADC – suma binaria con acarreo. el resultado se encuentre en ax.acarreo sbb ax. Por ejemplo: imul [bx] → ax = al * [bx] imul dh → ax = al * dh imul di → dx_ax = ax * di MUL – multiplicación de enteros sin signo. Por ejemplo: adc al. Por ejemplo: sub cl. Por ejemplo: div cl → .cx . No se permiten comparaciones entre localidad de memoria y con registros de segmento. se compara el contenido de un registro o el de una localidad de memoria contra otro valor.al → ah = ah .sp → ax = ax – sp sub [di]’A6 → [di] = [di] – A6 DEC – resta un 1 a un registro o al contenido de una localidad de memoria. el dividendo se encuentra en ax. Por ejemplo: mul cl → ax = al * cl mul cx → dx_ax = ax * cx IDIV – división de enteros con signo. igual que una resta pero ahora al resultado también se le resta la bandera de acarreo.bl sub ax.ah → al = al + ah + acarreo adc [bx].

[si] xor bx. AND – Ejecuta multiplicación lógica genera un 1 si la entra es 1 y 0 en el otro caso. Es muy similar a la instrucción cmp (comparar).37 and al. genera un 1 de salida si cualquiera de las entradas es 1.3 → prueba y complementa el bit 3 de ax.cl xor dx. .2 → prueba bit 4 de ax BTC – Prueba y complementa el bit del operando destino especificado en el operando fuente. Por ejemplo: xor ch. Por ejemplo: bt ax.bl or dx.0F → enmascara los 4 bits mas significados de al por lo que al = 7 por lo que se usa para convertir números ASCII a BCD and ax. prueba un bit del operando destino (especificado) en el operador fuente. La instrucción hace variar el bit cero del registro de banderas. Por ejemplo: test al.cl OR . Por ejemplo: btc ax. Las operaciones lógicas afecten el registro de banderas haciendo cero la de acarreo y sobreflujo y las restantes dependen del resultado de la operación.Suma lógica. Así por ejemplo: mov al.cl XOR – Es un or exclusivo.128 → prueba bit mas significativo jnz mas → no es uno salta a ‘mas’ (para únicamente los 386 y 486) { BT – “Bit test”.1 → prueba bit menos significativo jnz otro → si no fue cero salta a ‘otro’ test al. Se emplea para borrar los bits de algún dato. La instrucción se usa para invertir o complementar un dato. al igual que ‘cmp’ test se usa antes de las instrucciones de salto.[di] o and [bx]. La salida es cero solo si ambas son cero. Por ejemplo: or ah. Si ambos entradas son iguales la salida es 0 y si son diferentes la salida es 1.[bx] or [bx].0FA3h TEST – Efectúa la operación AND pero no realiza el cambio en a prueba por lo que solo afecta el registro de banderas.div cx → Instrucciones lógicas básicas Estas instrucciones proporcionan el control directo de los bits de algún dato.

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. Complemento a 2 Se emplea para representar números con signo: Los números enteros son signo. por ejemplo: Si se desean restar los números 57d – 23d = 34d Si representamos el –23d por su complemento a 2. datos entre 32767 y +32767. 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). esto es: 57d + (76 + 1) = 57d + 77d = 134d .2 (1 o cl) → hace corrimiento lógico de ax 2 lugares a la izquierda. } NOT – Inversión lógica (complemento a uno). Por ejemplo: shr bx. Por ejemplo: shl ax. SHL – corrimiento a la izquierda.3 (1 o cl) → hace corrimiento a la derecha de 3 posiciones. 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 La representación es útil para realizar operación aritméticas.1 → prueba y hace cero el primer bit de ax. es igual a shl.BTR – Prueba y hace 0 el bit del operando destino especificado en el operando fuente. Por ejemplo: btr ax. los números positivos se representan de manera normal y los negativos por su complemento. Por ejemplo. se efectúa el complemento a dos del operando por lo que el signo del dato se invierte. La misma operación puede realizarse como una suma. entonces el mayor dato entero que puede representarse es de 15 bits mas uno de signo. contiene un solo operando el cual se le invierte todos los bits. si el bit mas significativo se emplea para indicar el signo del numero. o sea. SHR – corrimiento lógico a la derecha. SAL – corrimiento aritmético a la izquierda. en parte. Un registro de 16 bits representa cualquier numero entero entre 0 y 65535 (216-1). El µP utiliza aritmética con el complemento a 2. SAR – corrimiento aritmético a la derecha por lo que el signo se copia igual (no se pierde).

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.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.0140 . SCASD – Igual que los anteriores pero para dobles palabras por lo que se compara el registro EAX (solo para el µP 386 y 486). Ejemplo: rcr ah. 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. ROL – Rota a la izquierda los bits en una localidad de memoria o registro.1 → rota el dato en bl 1 vez a la derecha rcl ax. SCASW – Igual que el anterior pero ahora es para palabra por lo que usa el registro ax. Instrucciones para comparación de cadenas Permiten probar el registro al. En caso de no encontrar ningún 1 las instrucciones coloca 0 en el bit de cero del registro de banderas.cl → rota el dato en [bp] cl veces a la derecha. Por ejemplo: mov di.1 → rota si en un lugar a la izquierda rol ax.cx → en cx se pone el numero del bit donde se encuentro el primer 1 de ax. Ejemplo: rcl bl.↑ se elimina el digito más significativo el cual acarreo Rotaciones: es el Estas instrucciones hacen “rotar” los bits del dato en un registro o localidad de memoria.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: ror [bp]. contra un dato en memoria. Los bits que salen del registro se colocan al principio del mismo. Los bits que salen del registro se colocan al final del mismo. Ejemplo: rol si. Instrucciones para rastreo de bits (solo en µP 386 y 486) Estas instrucciones realicen una rotación de los bits de un operando buscando un 1. Por ejemplo: bsf ax.cl → rota ah el numero de lugares indicado en cl. ror bx. 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.

Instrucciones de control de flujo 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.0100 mov al. El salto lejano es una instrucción de 5 bytes permitiendo brincar a cualquier localidad de memoria dentro de la maquina.cercano .2 Gbytes si se trabaja en el modo protegido y de 4 Gbytes si es lejano. 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. En µP 386 y 486 el brinco corto esta entre +/. 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. 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.mov cx. . 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. entonces: [codigo/desplazamiento] como por ejemplo jmp 100 de tal forma que al registro ip se la suma el desplazamiento.2 Gbytes. puede ser de tres tipos: . No depende de ninguna bandera del registro de banderas para llevarse a cabo. el contador se pone a 100 y se busca el dato 55 a lo largo de todo ese bloque de memoria. 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. CMPSW – Igual al anterior pero para palabras CMPSD – Igual que los anteriores pero para dobles palabras (solo µP 386 y 486).55 repne scasb Se apunta a una localidad de memoria.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 otro prefijo que puede usarse es repe (repetir mientras sea igual). JMP – Salto incondicional. En los µP 386 y 486 el desplazamiento es de 32 bits con el signo o sea +/. Salto Cercano Similar al anterior pero ahora la distancia se encuentra dentro del tamaño del segmento de código. CMPSB – compara un byte en memoria direccionado por si se compara con el contenido de memoria direccionado por di.corto .

puede cargarlo en cualquier parte de la memoria. por ejemplo: mov cx. esto se le llama programa relocalizable por lo que un S. 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 LOOP – Es realmente un decremento de cx y un brinco condicionado. Brincos condicionales En µP 386 y 486 los brincos condicionales son cortos y en 386 y 486 pueden ser cortos o cercanos.al loop otro → salto a ‘otro’ si cx = 0 y se cumple la comparación LOOPNE – Similar al anterior pero ahora el salto se da si a condición no es igual o cx ≠ 0.10 otro : cmp ah.O. esto implica desplazarse a cualquier parte de la memoria (salto entre-segmentos). 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. Salto Lejano Estos ocupan un byte de le instrucción y 4 con la dirección hacia donde se desea saltar. esta instrucción decrementa cx y si este no es igual a cero brinca a la dirección especificada. .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. 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. LOOPE – Es un loop condicional (similar al “rep”) “repite mientras sea igual”. En µP 386 y 486 se usa LOOPW para usar el registro cx y LOOPD si se usa ecx.

RET con operando Si se usa ret 8 la instrucción suma el número 8 a SP antes del retorno de tal forma que se extraen no últimos datos metidos a la pila sino anteriores a ellos. Registros a modificar para desplazarse entre la memoria del código.2 Gbytes. obtiene de la pila un numero de 2 bytes y lo coloca en ip (retorno cercano). En los µP 386 y 486 en modo protegido el retorno lejano obtiene de la pila 6 bytes. 2do y 3er el desplazamiento o sea +/. En 386 y 486 el desplazamiento es de 32 bits o sea +/. por ejemplo: call si call cs:bx RET – Instrucción para retornar de una subrutina. Al ejecutarse se guarda en la pila el ip y luego is.CALL Transfiere el flujo del programa a un procedimiento (o subrutina). 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 primer contiene el código de la operación. los primeros 4 se colocan en EIP y los 2 restantes en CS. el segmento cs a cualquier lugar de la memoria. al ejecutarse se salvan en la pila la dirección para el retorno y se regresan con la instrucción “net”. . Memoria 0000 S. obtiene de la pila 4 bytes y los coloca en cs e ip respectivamente. En los µP 386 y 486 activos en modo registro protegido extrae 4 bytes de la pila y los coloca en EIP. O. datos y pila de un programa cs:ip → ds:bx → ss:sp → es → Código Datos Programa Pila Extra FFFFF Call Cercano Ocupa 3 bytes de longitud.32 bytes. Call con operandos registro La instrucción call puede contener un operando registro el cual contiene la dirección del salto. RETF – Instrucción para retorna de una subrutina.

. Ocurre cuando se dan dos interrupciones durante la misma instrucción. se de eso cada ejecución de una instrucción si esta activo el bit TF (bandera de trampa) de registro de banderas. se genera si ax ≥ [bx] y ax ≤ [bx +1] . . Cada vector contiene la dirección de una rutina de servicio (servicio de interrupción).INTERRUPCIONES Una interrupción es una llamada generada por algún dispositivo físico del sistema (hardware) o una llamada generada por un programa (software). Memoria CMOS en la AT El CMOS es un tipo de memoria respaldada con batería por lo que no es volátil. se genera si la instrucción ESC se extiende mas allá del desplazamiento FFFF. se genera l colocar ‘1’ en la terminal NMI del µP. . 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).[bx]. . 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”.Int 8: Falta Doble.Int 1: modo paso a paso o de rampa. se genera si el segmento de estado de tarea (TSS) es mayor a 002B. el µP detendrá la operación actual y cambiara el flujo de operaciones a otro lugar de la memoria.Int 9: Sobreflujo del segmento del coprocesador. . .Int 10: Segmento de estado de tarea no valido. Intel reserva los primeros 32 vectores de interrupción para emplearse en el mismo µP (para manejo de errores o excepciones). Las interrupciones dedicadas al µP son las siguientes: .Int 7: Coprocesador no disponible. Los primeros 5 vectores de interrupción son idénticos en todos los µP desde 8086 hasta 486.Int 6: código invalido. . Se genera si se encuentra una instrucción indefinida. Interrumpe el programa si existe un sobreflujo (la bandera OF en alto).Int 3: interrupción de un byte. compara un registro con dos palabras de datos en memoria. Al aceptar esta interrupción se borra el bit TF para ejecutar ahora un interrupción. por ejemplo es posible generar interrupción 0 (la cual es un servicio en caso de división por cero o por sobreflujo). .Int 2: interrupción de hardware no enmascaradle. 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. . . Por ejemplo: bound ax.Int 0: división por cero. 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 5: Bound: Instrucción. sea cual sea su origen. Vector de interrupción Este es un numero de 4 bytes y se almacenan en los primeros 1024 bytes de la memoria (00000003FF) que direcciona el µP en modo real por lo que no hay 256 vectores diferentes.Int 4: interrupción de sobreflujo.

Se salva el contenido del registro de banderas en la pila. LIOT. esto deshabilita la terminal INTR y la característica de trampa. LOCK. 5. ip. se genera si el bit P ≠ 0 en un descriptor (el segmento no esta presente o no es valido). Manejo de la interrupción dependiendo del registro de banderas La bandera de interrupción (IF) y la de trampa (TF) se borran una vez que se salvan en la pila al ocurrir una interrupción. NS. LMSW o LTR. de forma que si ocurren dos de forma simultánea es atendida la de prioridad más alta. 2. LLDT. c) Se cargo un tipo no valido para el segmento del descriptor. .- - Int 11: Segmento no presente. Cuando IF = 1 se permite que de la terminal INTR del µP pueda ocasionar una interrupción. Las instrucciones: STI: carga un ‘1’ en IF por lo que habilita la terminal INTR del µP (activa interrupciones). Int 12: Desborde del segmento de piles. Cuando TF = 1 se ocasiona una interrupción de trampa de tal forma que al ejecutar una instrucción se genera la interrupción 1. estas violaciones son: a) Limite excedido de la tabla de descripciones. OUTS y STI Int 14: Falla de acceso a pagina. Se recupera el contenido del vector de interrupción colocándolo en ip y cs de tal forma que la siguiente instrucción que se ejecuta es el código de servicios de la interrupción. Int 13: Protección general. g) Limite excedido del segmento. Se genera al ocurre violaciones de la protección del µP activo en modo protegido (µP 8028 a 486). Int 16: Error del coprocesador. i) CPL > IOPL al ejecutar CLI. Se salva el contenido del registro cs en la pila. e) Leer el segmento de solo ejecutar código. b) Reglas de privilegio violadas. d) A escribir en el segmento de código que esta protegido. f) Escribir el segmento de solo leer datos. h) CPL ≠ 0 al ejecutar CTS. Para terminar el código de servicio de la interrupción debe existir la instrucción IRET la cual devuelve el estado original de las banderas IF y TF y se recuperan de la pila los registros cs. Cuando TF = 0 la ejecución del programa es normal. 4. Generando una interrupción Al ocurrir alguna condición de interrupción ocurre lo siguiente: 1. se genera cuando falla el acceso a una pagina de memoria en 386 y 486. se genera si el segmento de pila no esta presente o se ha excedido el limite del mismo. LGDT. por esta razón se le llama trampa de paso a paso. 3. Se desactivan las banderas de interrupción (IF) y de trampa (TF) del registro de banderas. CLI: desactiva interrupciones del hardware (terminal INTR del µP). El orden en que se atienden es el siguiente: 1º: Interrupciones (o excepciones) del procesador. IN. Orden de prioridad Las interrupciones tienen un orden de prioridad. se genera cuando ocurre un error del coprocesador en las instrucciones ESC y WAIT (µP 386). Se salva el contenido del registro ip en la pila. ALT. OUT.

tiene prioridad absoluta y se produce incluso aunque estén inhibidas las interrupciones (con CLI) para indicar un hecho muy urgente (fallo en la alimentación o error de paridad en la memoria). Por desgracia. o o o o o o o Interrupciones hardware: Son las generadas por la circuitería del ordenador en respuesta a algún evento. se produce tras cada instrucción cuando el procesador está en modo traza (utilizada en depuración de programas). se dispara cuando se ejecuta un INTO y había desbordamiento. Hay una sutil diferencia de comportamiento ante esta interrupción según el tipo de procesador: el 8088/8086 y los NEC V20 y V30 almacenan en la pila. debido a que es una instrucción de un solo byte muy cómoda de utilizar. Sólo puede ser generada mediante DIV o IDIV. IBM se saltó olímpicamente la especificación de Intel que reserva las interrupciones 0-31 para el procesador. o INT 0: error de división. INT 1: paso a paso. Como desde esta interrupción se invoca a su vez a INT 1Ch -porque así lo dispuso IBM. generada automáticamente cuando el cociente no cabe en el registro o el divisor es cero.2º: Interrupciones software. INT 3: utilizada para poner puntos de ruptura en la depuración de programas. unas 18. INT 5: rango excedido en la instrucción BOUND (sólo 286 y superiores). 4º: Interrupciones hardware (o periféricos) enmascarables. el 286 y superiores almacenan la dirección del DIV o IDIV que causa la excepción. es posible ligar un proceso a INT 1Ch para que se ejecute periódicamente. la dirección de la instrucción que sigue a la que causó la excepción. . Sin embargo. INT 7: dispositivo no disponible (sólo a partir del 286). Interrupciones internas o excepciones: Las genera la propia CPU cuando se produce una situación anormal o cuando llega el caso. 3º: Interrupciones de hardware (o periféricos) no enmascarables. 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. en la pila se almacena el CS:IP de la instrucción ilegal. INT 2: interrupción no enmascarable. Se produce al ejecutar una instrucción indefinida. INT 6: código de operación inválido (sólo a partir del 286). INT 4: desbordamiento. Ha sido incorrectamente empleada por IBM para volcar la pantalla por impresora. como cabría esperar.2 veces por segundo).

0Eh. 0Ch. Instrucciones para el control de µP Son instrucciones que comúnmente se emplean en el control de hardware. . INT 0Ah. 76h. .interrupción no enmascaradle NMI y . 0Fh: Puertos serie.INTA: Es una terminal del µP pero es de salida y se utiliza como respuesta a la entrada INTR. 0Dh. 72h.Control de bit de la bandera de acarreo (CF) mediante las instrucciones STC (activa acarreo) y CLC (desactiva acarreo) y CMC (complemento del acarreo). BUSY es una terminal de entrada al µP y comúnmente se conecta a la terminal BUSY del coprocesador numérico 8087-80387. Al ejecutar la instrucción WAIT y la terminal BUSY = 0 no ocurre nada y se ejecuta la siguiente instrucción normalmente pero si BUSY = 1 el µP espera hasta que la terminal BUSY regresa a 0.WAIT: Esta instrucción monitorea la terminal BUSY de los µP 286 y 386 y la terminal TEST de los µP 8086 y 8088.o o INT 9: generada al pulsar o soltar una tecla. . o Interrupciones de periféricos El µP posee 2 terminales de entrada para interrupciones de periféricos: . 73h. 0Bh. impresora y controladores de disquete. 75h. 71h. 74h. 77h: Generadas en los AT y máquinas superiores por el segundo chip controlador de interrupciones.Solicitud de interrupción INTR Cuando se activa la terminal NMI ocurre la interrupción 2 La terminal INTR se debe decodificar externamente para seleccionar un vector. . Es posible escoger cualquier vector de interrupción para la terminal INTR el cual generalmente se establezca como interrupción entre ZON y FFN. INT 70h.

segundo 8259 del AT IRQ 3: COM2 IRQ 4: COM1 IRQ 5: disco duro XT. LPT2 en AT. retrazo vertical PCjr IRQ 6: Controlador del disquete IRQ 7: LPT1 Servicios de vídeo (BIOS) Listado del equipo (BIOS) Tamaño de memoria (BIOS) Servicios de disco (BIOS) Comunicaciones en serie (BIOS) Servicios del sistema (BIOS) Servicios de teclado (BIOS) Servicios de impresora (BIOS) IBM Basic (ROM del BASIC) Arranque del sistema (BIOS) Fecha/hora del sistema .TABLA DE INTERRUPCIONES DEL SISTEMA INT 00: INT 01: INT 02: INT 03: INT 04: INT 05: INT 06: INT 07: INT 08: INT 09: INT 0A: INT 0B: INT 0C: INT 0D: INT 0E: INT 0F: INT 10: INT 11: INT 12: INT 13: INT 14: INT 15: INT 16: INT 17: INT 18: INT 19: INT 1A: División por cero Ejecución paso a paso No Enmascarable (NMI) Puntos de ruptura Desbordamiento (INTO) Volcar pantalla por impresora (BIOS) Código de operación incorrecto Reservada IRQ 0: Contador de hora del sistema (BIOS) IRQ 1: Interrupción de teclado (BIOS) IRQ 2: canal E/S.

INT 1B: INT 1C: INT 1D: INT 1E: INT 1F: INT 20: INT 21: INT 22: INT 23: INT 24: INT 25: INT 26: INT 27: INT 28: INT 29: INT 2A: INT 2E: INT 2F: INT 30: INT 31: INT 32: INT 33: INT 40: INT 41: INT 42: INT 43: INT 46: INT 4A: Acción de CTRL-BREAK (BIOS) Proceso periódico del usuario (Usuario) Parámetros de vídeo (BIOS) Parámetros del disquete (BIOS) Tabla de caracteres gráficos (BIOS) Fin de programa (DOS) Servicio del sistema operativo (DOS) Dirección de terminación (DOS) DOS CTRL-BREAK (DOS) Manipulador de errores críticos (DOS) Lectura absoluta de disco (DOS) Escritura absoluta en disco (DOS) Terminar permaneciendo residente (DOS) DOS Idle (programas residentes que usan funciones DOS) DOS TTY (impresión en pantalla) Red local MS net Procesos Batch (DOS) Multiplex (DOS) Compatibilidad CP/M-80 (xx:YYyy en JMP XXxx:YYyy) Compatibilidad CP/M-80 (XX en JMP XXxx:YYyy) Reservada Controlador del ratón Interrupción de disquete (BIOS) Parámetros del disco duro 1 (BIOS) Apunta a la INT 10h original del BIOS si existe VGA Caracteres gráficos EGA (BIOS) Parámetros del disco duro 2 (BIOS) Alarma del usuario INT 2B-2D: Uso interno del DOS INT 34-3F: Reservadas INT 44-45: Reservadas INT 47-49: Reservadas INT 4B-5F: Reservadas INT 60-66: Para uso de los programas INT 67: INT 70: INT 71: INT 72: Interrupción de EMS (controlador EMS) IRQ 8: Reloj de tiempo real AT (2º chip 8259-AT) IRQ 9: IRQ 2 redireccionada (2º chip 8259-AT) IRQ 10: reservada (2º chip 8259-AT) INT 68-6F: Reservadas .

98 Gb Memoria extendía (386) Memoria extendida FFFFFF 14.zona mas alta accesible por el DOS 64 Kb ROM BIOS (y/o memoria superior 386) F0000 64 Kb EMS (PC/XT/AT) (o memoria superior 386) E0000 Memoria Superior (máximo 384 Kb) D0000 64 Kb extensiones de ROM (y/o memoria superior 386 C0000 128 Kb Memoria máxima de video direccionable A0000 Memoria Convencional (640 Kb) 00600 638.9 Mb Memoria extendida (286/386) 110000 Memoria alta (64 Kb) 100000 64 Kb HMA (286/386) para el nuvleo del DOS (AT) .5 Kb RAM de usuario (y núcleo del DOS PC/XT) 64 Kb EMS (PC/XT/AT) (o memoria superior 386) .INT 73: INT 74: INT 75: INT 76: INT 77: IRQ 11: reservada (2º chip 8259-AT) IRQ 12: interrupción de ratón IBM (2º chip 8259-AT) IRQ 13: error de coprocesador matemático (2º chip 8259-AT) IRQ 14: controlador disco fijo (2º chip 8259-AT) IRQ 15: reservada (2º chip 8259-AT) INT 78-7F: Reservadas INT 80-85: Reservadas para el Basic INT 86-F0: Usadas por el Basic INT F1-FF: Para uso de los programas Plan de memoria de IBM FFFFFFFF 3.

Área de datos del DOS y del BASIS 00500 Variables de la BIOS y de las extensiones de ROM 00400 00000 Vectores de interrupción .