Sunteți pe pagina 1din 26

Lenguaje Ensamblador

Apuntes de clase Facultad de Ciencias Qumicas e Ingeniera Universidad Autnoma de Baja California Campus Tijuana Prof. Juan Jess Lpez Garca Un agradecimiento especial a: - Anne Boutrell? estudiante -de intercambio- de la carrera de ingeniera en automatizacin y control, por la transcripcin del texto. - David Villa Mrquez, estudiante de ing. en electrnica por la revisin del texto y la realizacin de esquemas.

Introduccin
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 instruccin que ejecuta la unidad de procesamiento es en realidad un conjunto de instrucciones ms simples incluidas en el hardware del mismo circuito (firmware), el conjunto de dichas instrucciones simples es conocido como microprogramacin ya que se encuentran incluidas en el microprocesador. En 1978, la compaa XXX fabricante de calculadoras solicit a la compaa Intel -fabricante de semiconductores- la construccin de un circuito integrado capaz de ejecutar un conjunto de instrucciones que le permitira reducir la cantidad de circuitos, permitindole la reduccin del tamao y costo en la fabricacin de calculadoras, en respuesta, Intel desarroll el primer circuito P al que nombr 4004 (posea un canal de datos de 4 bits), un juego de NNN instrucciones (suma, resta, comparacin...), registros de ?? bits y capacidad para direccionar YYY KB de memoria. Otros fabricantes de aparatos electrnicos (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 fabricacin de un P mejorado, en 1980 saca al mercado el P 8008 (canal de datos de 8 bits), tena 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 compaa Motorola -fabricante tambin de semiconductores- desarrolla el P 6800 similar en capacidad al 8008 de Intel. Empieza entonces la competencia entre ambas compaas para ganar el mercado de venta de P, produciendo las mejoras, casi a la par, en sus microprocesadores. La siguiente versin de Intel posea 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 lgico-fsico de direccionamiento.

La compaa Apple, recientemente formada por Steve Jobs y ?????? armaron una computadora para uso casero (computadora personal PC por sus siglas en ingls) usando el P 6800 de Motorola, un mes despus la compaa IBM (fundada en ???? por ???) saca al mercado una PC basada en el procesador 8088 de Intel. Las PC de ambas compaas se comercializan con gran xito durante un par de aos, sin embargo ocurre un evento sustancial, hacia 1984 tanto Intel como Motorola adquieren la experiencia y tcnica necesaria como para dar un salto en el diseo y fabricacin 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 fsica de la maquina: el hardware (su construccin); y sobre la que trabajara: el software (lo abstracto). El software bsicamente 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 aplicacin 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 mltiples. 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 fsicamente al ROM. El P lee el contenido de esta direccin mediante el ducto de datos. La instruccin que se encuentra es un salto lejano hacia la direccin 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 circuitera tanto de la tarjeta madre como la de los perifricos. 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 dinmica. - Configura el DMA para refrescar le RAM dinmica.

Verifica que la actualizacin de RAM dinmica este operando. Prueba la parte baja de la RAM (16-64 KB). Cargar los vectores de interrupcin y conseguir un rea stock en la parte baja de le RAM. Inicializa dispositivos de video y teclado. Prueba y verifica el tamao 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 interrupcin de ejecucin de Bootstrap.

Si la prueba encuentra algn error el programa regresa seales audibles (beeps), por lo que se tienen diferentes cdigos 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 interrupcin 19 de ejecucin de boostrap loader, el cual es un programa que lee el contenido de los primeros 512 bytes de un disco cargndolos en memoria para ser ejecutados. Extensiones del BIOS: En termines generales el POST revisa las funciones individuales del procesador, sus registros y algunas instrucciones. Si existe error, el sistema se detiene sin mostrar ningn indicio visual o audible. A continuacin se revisa el mismo cdigo del BIOS y all no hay error continua con los dispositivos de la tarjeta madre (RAM, controlador de interrupciones, controlador DMA temporizador, etc.). Continua con dispositivos perifricos como teclado, unidades de disco, puertos serie y paralelo, etc. Finalizando las pruebas, empieza la bsqueda para las extensiones del BIOS. Por ejemplo, las tarjetas de video EGA, VGA o SVGA tienen sus propias funciones de BIOS que reemplazan a la interrupcin original 10 N del BIOS (la que en realidad esta diseada para manejo de tarjetas MDA y CGA). Otros dispositivos como los controladores para discos duros colocan las suyas reemplazando la int 13 del BIOS. El POST hace pruebas buscando extensiones de ROM revisando los desplazamientos 00 y 01 del rango de memoria reservado para funciones de BIOS. Si el contenido de estos 2 bytes son 55H y AAH respectivamente, el POST asume que existe cdigo ejecutable en donde el desplazamiento 02 indica el tamao de la ROM en bloques de 512 bytes. El programa ejecutable propiamente empieza en el desplazamiento 03N. Los ltimos 2 bytes del total de bloques de 512 bytes de la memoria deben indicar un checksum del contenido. En general el formato es el siguiente: 55, AA, 40 Call C000 : 1F4E RETF 40Hx512Byts=8000

BC, 4F Checksum Estos mdulos de ROM pueden reemplazar las rutinas originales del BIOS y en dado caso tomar los recursos de la maquina para una aplicacin especifica. Rangos para extensiones del BIOS: - El primer rango va de C000:0000 C000:7FFF. Esta es una extensin reservada para extensiones de BIOS dadas por las tarjetas VGA, EGA y SVGA. - El segundo rango va de C000:8000 D000:HF. Esta se reserva para extensiones de BIOS dadas por controladores de disco duro. 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, este segmento no estar disponible. - El tercer rango va de E000:0000 E000:FFFF y se reserva para sistemas con bios de diferente ndole (miscelneos). Al terminar las inicializaciones del bios el proceso que contina es el de arranque de sistema, se lleva a cabo generando la int 19h y conocido como bootstrap loader el cual intenta cargar alguna forma de sistema operativo bsico. Este es el punto al que se transfiere el control cuando se oprime <CTRL><ALT><DEL> hacia algn disco determinado. Si no existe disco o es de arranque, entonces esta rutina busca otra unidad de deseo conectada a la PC o a una localidad determinada en el disco duro existente. Si no encontrase se enva el mensaje de insertes un disco con sistema y oprimes una tecla. A continuacin se carga a memoria el cdigo encontrado a inicio del disco. Esta parte del disco es comnmente la que infectan los virus de computadoras, colocan como primer instruccin su salto hacia su propio cdigo para ser ejecutado al cargarse esa parte en memoria. Tambin ste lugar del disco es donde se coloca los programas administradores de arranque, con ellos es posible decidir que sistema operativo se desea arrancar cuando existen varios de ellos en el disco duro. En trminos generales la memoria de la computadora queda dividida de la siguiente manera:
00000 Vectores de Interrupciones 1 KByte 002FF 00000 Tabla de vectores de interrupcin (768 Bytes)

rea de stack para BIOS (256 bytes)

05000 Memoria de Aplicacin (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. de BIOS, Redes o Adaptador de ROM (64 KB) BIOS (64 KB) rea de expansin de ROM BIOS de video (32 KB) Adaptador ROM (32 KB)

00000 001DF 001E0 002FF 00300 003FF 00400 004FF 00500 005FF 00600 9FFFF FFFF0 Direccin de arranque Memoria RAM para usuario (638 KB) Tabla de vectores de interrupcin (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.O. DOS es el residente)

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 direccin de base 00400 (0040:0000) cada 2 bytes se tiene: Corrimiento: 00 - Direccin del COM1 02 - Direccin del COM2 04 - Direccin del COM3 06 - Direccin del COM4 08 - Direccin del LPT1 0A - Direccin del LPT2 0C - Direccin del LPT3 0E - No usado (apuntador a datos de extensin de bios) 10 - Direccin de equipamiento variable- no usada 12 - tamao 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 seala el estado de la unidad aritmtica y lgica (ALU). Registros de propsito general Para el uso que ms convenga al usuario. Se pueden direccionar como de 8 bits (AW, AL, BW, BL, CN, CL, DN y DL) o como de 16 bits (AX, BX, CX y DX). En los P 80386 y 80486 adems pueden direccionarse como de 32 bits (EAX, EBX, ECX y EDX). Aunque se emplean por uso general tienen tareas especficas, de esto su nombre. AX (acumulador): comnmente conserva el resultado temporal despus de una operacin aritmtica. Tambin puede contener la direccin de desplazamiento de una localidad en el sistema de memoria (EAX) BX (ndice de base): comnmente conserva la direccin base de los datos que hay en memoria. En el EBX puede direccionar datos de memoria.

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 instruccin Banderas Cdigo Datos Extra Pila

CX (contador): contiene el valor de conteo de ciertas instrucciones. En el ECX puede contener la direccin de desplazamiento de los datos de memoria. DX (datos): comnmente contiene la parte ms significativa de un producto o la de una divisin as como el nmero de puerto E/S.

Registros apuntadores e ndices Se utilizan generalmente para apuntar a la localidad de memoria que contiene los datos del operando en muchas instrucciones, estas son: - SP (apuntador de pila): Direcciona datos en memoria funcionando como pila LIFO (ultimo en entrar, primero en salir) la cual se emplea al usar instrucciones push y pop. - BP (apuntador de base): Usado comnmente para direccionar un conjunto de datos en memoria. - SI (ndice de fuente): Usado para dimensionar datos (de origen) para usarse en instrucciones de cadenas o arreglos. - DI (ndice de destino): Direcciona datos (de destino) para usarse en instrucciones de cadenas o arreglos. - IP (apuntador de instrucciones): Direcciona siempre la siguiente instruccin a ejecutar el P. El apuntador puede ser modificado con una instruccin de salto o de llamada de subrutina. FLAGS (banderas): Indica la condicin del microcontrolador y controla su operacin. Registros de segmentos Estos generan direcciones en la memoria al combinarse con otros registros del P - CS (cdigo): Indica el segmento de memoria que contiene el cdigo del programa. Define la direccin inicial de la seccin de memoria que contiene el cdigo - 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 travs del contenido de otros registros que contienen la direccin 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 despus de una suma o un prstamo despus de una resta. Tambien indica condiciones de error, segn 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 operacin de suma o resta existe un acarreo o un prstamo 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 operacin aritmtica o lgica es cero. Si Z=1, el resultado es cero; si Z=0, el resultado es diferente de cero - S (signo): Indica el signo aritmtico del resultado despus de una operacin aritmtica o lgica. Si S=1, el bit del signo (el bit del extremo izquierdo de un nmero) se encuentra activado o es negativo; si S=0, el bit de signo esta inactivado o es positivo. - T (trampa): Habilita la funcin de captura de errores por medio de una caracterstica de depuracin 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 depuracin y los de control. Si T esta en cero lgico, la funcin de depuracin se encuentra deshabilitada. - I (interrupcin): Controla la operacin de la terminar de entrada INTR(solicitud de interrupcin). El estado del bit de bandera I es controlado por las instrucciones STI (activar bandera de interrupcin) y CLI (borrar bandera de interrupcin) - D (direccin): Controla la seleccin de incremento o decremento de los registros DI o SI en instrucciones de cadenas. Si D=1, los registros disminuyen automticamente; si D=0, los registros aumentan automticamente. La bandera D se activaron la instruccin STD(activar bandera de direccin) y se desactiva con la instruccin CLD (borrar bandera de direccin) - O (sobre flujo): Se acta si ocurre un sobre flujo al sumar o restar nmeros 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

I T S Z

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 interrupcin. NT (tarea anidada): Seala que tarea actual esta anidada pro software dentro de otra, en el modo protegido de operacin. RF (reanudar): Se utiliza durante la depuracin para controlar la reanudacion de la ejecucin despus de la siguiente instruccin. VM (modo virtual): Selecciona la operacin en modo virtual de un sistema que se encuentra en modo protegido, permitiendo la coexistencia en memoria de mltiples particiones del DOS AC (verificacin de alineacin): Se activa al direccionar una palabra o una doble palabra en una direccin que no es un nmero par (para palabras) o mltiplo de 4 (para palabras dobles) VIF (bandera de interrupcin virtual): Copia del bit de bandera de interrupcin VIP (interrupcin virtud pendiente): proporciona informacin sobre una interrupcin en modo virtual o interrupciones pendientes. ID (identificacin): Seala la aceptacin de la instruccin CDPUID (instruccin que proporciona al sistema informacin sobre el microprocesador, tal como el num. de versin y el fabricante)

Modos de direccionamientos Los modos de direccionamientos de datos incluyen los de: - registro - inmediato - directo - indirecto por registro - base mas ndice - relativo por registros - relativo por base ms ndice Los modos de direccionamiento de memoria de programa son: - relativo al programa - directo - indirecto Modos de direccionamiento de datos Para explicarlos se usa la instruccin mov usada de la siguiente forma: mov destino, fuente - Direccionamiento por registro: Transfiere el dato de un registro a otro registro. Por ejemplo: mov cx, dx - Direccionamiento inmediato: Transfiere un dato (constante) a un registro. Por ejemplo: mov al,22 - Direccionamiento directo: Transfiere un dato entre una localidad de memoria y un registro. Por ejemplo: mov cx,[ab23] - Direccionamiento indirecto por registro: Transfiere un dato entre un registro a una localidad de memoria direccionada por bx. Por ejemplo: mov ax, [bx]

- 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). Por ejemplo: mov [BX + di], cl - 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. Por ejemplo: mov ax,[bx + 4] - 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. Por ejemplo: mov ax,[bx + di + 4] Modos de direccionamiento de memoria de programa. Se utilizan en las instrucciones jump (salto) y call (llamada), tiene 3 configuraciones distintas: directa, relativa e indirecta. - Direccionamiento directo a la memoria del programa. Se utiliza en los P en los saltas incondicionales (brincos) y llamadas. Las instrucciones que realizan direccionamiento directo a la memoria almacenan la direccin junto con el cdigo de operacin. Por ejemplo: jmp F000:FFF0 o call F000:FFF0 Estas instrucciones cargan cs con F000 e ip con FFF0; 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. - Direccionamiento relativo de memoria de programa. El termino relativo indica relacin con el ip. 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. Cuando el brinco es corto el desplazamiento es de solo un byte (cuyo valor esta entre +127 y 128); si el brinco es cerceno el desplazamiento es de 2 bytes (en tal caso el valor esta entre +32k y 32k). Los ensambladores calculan en forma automtica la distancia del desplazamiento y seleccionan el tipo de direccionamiento relativo (1 o 2 bytes y hasta 4 bytes en P 386 y 486). - Direccionamiento indirecto de memoria de programa. 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, lo que se realiza usando cualquier registro (AX, BX, CX, DX, SP, BP, DI, o SI) o relativo a registro ([BP], [BX], [DI], o [SI]) y registro relativo con un desplazamiento, 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 direccin 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 - Direccionamiento de la pila de memoria. La pila de memoria emplea el sistema LIFO (ultimo en entrar, primero en salir), los datos se colocan en la pila con una instruccin push y se recuperan con una pop. La instruccin call usa la pila para guardar la direccin de la que parti y la instruccin ret recupera de la pila la direccin a la que hay que retornar. As por ejemplo si se hace: mov ax, F000

push ax mov ax, FFF0 ret se colocan en cs: ip tales valores. La pila de memoria se mantiene con el registro sp (apuntador de pila) y el ss (segmento de pila) formando la direccin ss:sp Instrucciones para transferir datos (uso de mov) El mas comn es empleando la instruccin mov. Por ejemplo: mov dl,[di] : transfiere el contenido de la memoria de datos al registro dl. mov [1000],dl :transfiere el contenido del registro dl a la localidad de memoria 1000 del segmento de datos. mov word ptr[bx+0100],al : esta instruccin transfiere el contenido del registro al al la localidad de memoria de tamao de palabra direccionada por ds:bx0100. mov byte ptr[bx+0100],dl : igual a la anterior pero ahora es apuntador a memoria de tamao de un byte. Uso de la instruccin 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 segn sea el tamao del registro o la localidad de memoria. PUSH salva en la pila cualquier registro interno, datos inmediatos o datos de memoria. pusha salva todos los registros internos excepto al de segmento de pila. Los almacena en el orden ax, cx, dx, bx, sp, bp, si, di. pushf salva registro de bandera. pop (lo contrario de push), transfiere datos de la pila y los carga en los distintos que pueden ser registros o localidad de memoria. popf recupera el dato en pila y coloca en registro de banderas. popa recupera todos los registros en el orden di, si, bp, sp, bx, dx, cx y ax. LEA carga un registro con la direccin de desplazamiento de los datos especificada en el operando. Por ejemplo lea bx,[di] carga el contenido de [di] en ax es muy parecido a mov y es equivalente en la instruccin en el ejemplo que mov bx,offset tabla lea bx,tabla cargan la direccin de desplazamiento de la localidad tabla de la memoria en bx. LSD (solo para 386 y 486) carga registros con una direccin 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. Transferencia de cadenas de datos. LODS carga al o ax con datos almacenadas en la direccin de desplazamiento dada por si en el segmento de datos. 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

STOS almacena al o ax en el segmento extra en la localidad direccionada por el registro di. Ejemplos: STOSB [di] al STOSW [di] ax Si se usa REP hace que se repita la instruccin de cadena decrementandose cx hasta que cx = 0 y dado que di se autoincrementa o autodecrementa dependiendo de la bandera de direccin D (D = 0 autoincrementa). MOV transfiere datos de una localidad a otra en memoria. Es la nica transferencia de memoria a memoria que realiza el P. Se transfiere un byte o palabra desde la localidad DS[SI] a la localidad ES:DI. 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. 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 direccin 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 instruccin de movimiento de datos se aade al principio de una instruccin 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 cdigo Instrucciones aritmticas y lgicas ADD suma binaria. Ejemplos add al,bl al = al + bl add bx,0ABC bx = bx + 0ABC add [bx+di],dl contenido de [bx+di] = contenido de [bx+di]+dl en la operacin de suma se modifica el contenido de las banderas de signo, cero, acarreo auxiliar, paridad y sobreflujo del registro de banderas. INC suma de incremento, se agrega un 1 a un registro o a una localidad de la memoria. Esta instruccin puede sumar 1 a cualquier registro o localidad de la memoria excepto a registro de segmento. Por ejemplo: inc di di = di + 1 inc ax ai = ai + 1

ADC suma binaria con acarreo, igual que add pero adems suma el bit de la bandera C de acarreo a los datos des operando. Por ejemplo: adc al,ah al = al + ah + acarreo adc [bx],dh [bx] = [bx] + dh + acarreo SUB resta binaria. Por ejemplo: sub cl,bl cl = cl - bl sub ax,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. Por ejemplo: dec bx bx = bx 1 dec sp sp = sp 1 dec [di] [di] = [di] 1 SBB resta con prstamo, igual que una resta pero ahora al resultado tambin 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 comparacin, 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 multiplicacin 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 MUL multiplicacin de enteros sin signo. Por ejemplo: mul cl ax = al * cl mul cx dx_ax = ax * cx IDIV divisin 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 DIV divisin de enteros sin signo. Por ejemplo: div cl

div cx Instrucciones lgicas bsicas Estas instrucciones proporcionan el control directo de los bits de algn dato. Las operaciones lgicas afecten el registro de banderas haciendo cero la de acarreo y sobreflujo y las restantes dependen del resultado de la operacin. AND Ejecuta multiplicacin lgica genera un 1 si la entra es 1 y 0 en el otro caso. Se emplea para borrar los bits de algn dato. As por ejemplo: mov al,37 and al,0F enmascara los 4 bits mas significados de al por lo que al = 7 por lo que se usa para convertir nmeros ASCII a BCD and ax,[di] o and [bx],cl OR - Suma lgica, 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 XOR Es un or exclusivo. Si ambos entradas son iguales la salida es 0 y si son diferentes la salida es 1. La instruccin se usa para invertir o complementar un dato. Por ejemplo: xor ch,cl xor dx,[si] xor bx,0FA3h TEST Efecta la operacin AND pero no realiza el cambio en a prueba por lo que solo afecta el registro de banderas. Es muy similar a la instruccin cmp (comparar). La instruccin 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 (para nicamente los 386 y 486) { BT Bit test, prueba un bit del operando destino (especificado) en el operador fuente. Por ejemplo: bt ax,2 prueba bit 4 de ax 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 Inversin lgica (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 Inversin aritmtica con signo (complemento a dos), se efecta 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 nmeros a izquierda o derecha dentro de un registro o localidad de memoria. SHL corrimiento a la izquierda. Por ejemplo: shl ax,2 (1 o cl) hace corrimiento lgico de ax 2 lugares a la izquierda. SHR corrimiento lgico a la derecha. Por ejemplo: shr bx,3 (1 o cl) hace corrimiento a la derecha de 3 posiciones. SAL corrimiento aritmtico a la izquierda, es igual a shl. SAR corrimiento aritmtico a la derecha por lo que el signo se copia igual (no se pierde). Complemento a 2 Se emplea para representar nmeros con signo: Los nmeros 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 aritmtica con el complemento a 2, en parte, los nmeros positivos se representan de manera normal y los negativos por su complemento. Por ejemplo, el nmero -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 representacin es til para realizar operacin aritmticas, por ejemplo: Si se desean restar los nmeros 57d 23d = 34d Si representamos el 23d por su complemento a 2. La misma operacin puede realizarse como una suma, esto es: 57d + (76 + 1) = 57d + 77d = 134d

se elimina el digito ms significativo el cual acarreo Rotaciones:

es el

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 adems 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 adems a travs del bit de acarreo del registro de banderas. Ejemplo: rcr ah,cl rota ah el numero de lugares indicado en cl. Instrucciones para rastreo de bits (solo en P 386 y 486) Estas instrucciones realicen una rotacin de los bits de un operando buscando un 1. BSF Rastreo hacia delante el cual realiza la operacin rol buscando el primer bit que sea a uno, si se encuentra en 1 la instruccin pone a 1 la bandera de cero del registro de banderas y la posicin 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 ningn 1 las instrucciones coloca 0 en el bit de cero del registro de banderas. Instrucciones para comparacin de cadenas Permiten probar el registro al, contra un dato en memoria. 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 direccin (D) del registro de banderas para seleccionar incrementos o decrementos automticos del registro DI as usando un prefijo es posible repetir una bsqueda 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 instruccin scasb se repita mientras cx no sea cero o hasta que exista la condicin de igualdad. El otro prefijo que puede usarse es repe (repetir mientras sea igual). CMPSB compara un byte en memoria direccionado por si se compara con el contenido de memoria direccionado por di. CMPSW Igual al anterior pero para palabras CMPSD Igual que los anteriores pero para dobles palabras (solo P 386 y 486). 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. Se ejecutan clculos numricos 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 instruccin. El salto lejano es una instruccin de 3 bytes as que permite cambiar el flujo hasta de -/+32 Kbytes desde donde se localiza la instruccin. El salto lejano es una instruccin 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 tambin salto relativo porque se da hacia la misma direccin la misma distancia encuntrese en donde se encuentre la instruccin ya que la direccin a la que se salta no esta en el cdigo de operacin sino que se almaneca el cdigo 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 tamao del segmento de cdigo, ocupa un byte para el cdigo 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 caracterstica importante de ambos tipos de salto es que al ser relativos al punto donde se origina esto permite que el cdigo 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 instruccin y 4 con la direccin 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 condicin 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 s0 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, esta instruccin decrementa cx y si este no es igual a cero brinca a la direccin especificada. En P 386 y 486 se usa LOOPW para usar el registro cx y LOOPD si se usa ecx. LOOPE Es un loop condicional (similar al rep) repite mientras sea igual, el ciclo se mantiene mientras la condicin sea igual o cx no sea cero y sale del ciclo si la condicin 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 comparacin LOOPNE Similar al anterior pero ahora el salto se da si a condicin no es igual o cx 0.

CALL Transfiere el flujo del programa a un procedimiento (o subrutina), al ejecutarse se salvan en la pila la direccin para el retorno y se regresan con la instruccin net.
Memoria 0000 S. O.

Registros a modificar para desplazarse entre la memoria del cdigo, datos y pila de un programa

cs:ip ds:bx ss:sp es

Cdigo Datos Programa Pila Extra

FFFFF

Call Cercano Ocupa 3 bytes de longitud. El primer contiene el cdigo de la operacin. 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 cdigo 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. Call con operandos registro La instruccin call puede contener un operando registro el cual contiene la direccin del salto, por ejemplo: call si call cs:bx RET Instruccin 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 Instruccin 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. RET con operando Si se usa ret 8 la instruccin suma el nmero 8 a SP antes del retorno de tal forma que se extraen no ltimos datos metidos a la pila sino anteriores a ellos.

INTERRUPCIONES Una interrupcin es una llamada generada por algn dispositivo fsico del sistema (hardware) o una llamada generada por un programa (software), sea cual sea su origen, el P detendr la operacin actual y cambiara el flujo de operaciones a otro lugar de la memoria. Vector de interrupcin 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. Cada vector contiene la direccin de una rutina de servicio (servicio de interrupcin). Cada vector contiene un valor de ip y uno de cs con la que se forma la direccin de memoria donde se localiza el servicio de interrupcin. 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 batera por lo que no es voltil, 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 travs de las instrucciones in y out. Intel reserva los primeros 32 vectores de interrupcin para emplearse en el mismo P (para manejo de errores o excepciones), por ejemplo es posible generar interrupcin 0 (la cual es un servicio en caso de divisin por cero o por sobreflujo). Los primeros 5 vectores de interrupcin son idnticos en todos los P desde 8086 hasta 486. Las interrupciones dedicadas al P son las siguientes: - Int 0: divisin por cero. - Int 1: modo paso a paso o de rampa; se de eso cada ejecucin de una instruccin si esta activo el bit TF (bandera de trampa) de registro de banderas. Al aceptar esta interrupcin se borra el bit TF para ejecutar ahora un interrupcin. - Int 2: interrupcin de hardware no enmascaradle, se genera l colocar 1 en la terminal NMI del P. - Int 3: interrupcin de un byte. Ocupa un solo byte y se emplea comnmente para parar un punto de ruptura en un programa para depararlo (se genera por la bandera TF). - Int 4: interrupcin de sobreflujo. Interrumpe el programa si existe un sobreflujo (la bandera OF en alto). - Int 5: Bound: Instruccin; 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: cdigo invalido. Se genera si se encuentra una instruccin indefinida. - Int 7: Coprocesador no disponible. Se genera cuando no se encuentra un coprocesador despus de ejecutar alguna instruccin ESC o WAIT y no se encuentra el coprocesador. - Int 8: Falta Doble. Ocurre cuando se dan dos interrupciones durante la misma instruccin. - Int 9: Sobreflujo del segmento del coprocesador; se genera si la instruccin 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: Proteccin general. Se genera al ocurre violaciones de la proteccin 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 cdigo que esta protegido. e) Leer el segmento de solo ejecutar cdigo. 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).

Generando una interrupcin Al ocurrir alguna condicin de interrupcin ocurre lo siguiente: 1. Se salva el contenido del registro de banderas en la pila. 2. Se desactivan las banderas de interrupcin (IF) y de trampa (TF) del registro de banderas; esto deshabilita la terminal INTR y la caracterstica de trampa. 3. Se salva el contenido del registro cs en la pila. 4. Se salva el contenido del registro ip en la pila. 5. Se recupera el contenido del vector de interrupcin colocndolo en ip y cs de tal forma que la siguiente instruccin que se ejecuta es el cdigo de servicios de la interrupcin. Para terminar el cdigo de servicio de la interrupcin debe existir la instruccin IRET la cual devuelve el estado original de las banderas IF y TF y se recuperan de la pila los registros cs, ip. Manejo de la interrupcin dependiendo del registro de banderas La bandera de interrupcin (IF) y la de trampa (TF) se borran una vez que se salvan en la pila al ocurrir una interrupcin. Cuando IF = 1 se permite que de la terminal INTR del P pueda ocasionar una interrupcin. Cuando TF = 1 se ocasiona una interrupcin de trampa de tal forma que al ejecutar una instruccin se genera la interrupcin 1, por esta razn se le llama trampa de paso a paso. Cuando TF = 0 la ejecucin del programa es normal. Las instrucciones: STI: carga un 1 en IF por lo que habilita la terminal INTR del P (activa interrupciones). CLI: desactiva interrupciones del hardware (terminal INTR del P). Orden de prioridad Las interrupciones tienen un orden de prioridad, de forma que si ocurren dos de forma simultnea es atendida la de prioridad ms alta. El orden en que se atienden es el siguiente: 1: Interrupciones (o excepciones) del procesador.

2: Interrupciones software. 3: Interrupciones de hardware (o perifricos) no enmascarables. 4: Interrupciones hardware (o perifricos) enmascarables. Interrupciones internas o excepciones: Las genera la propia CPU cuando se produce una situacin anormal o cuando llega el caso. Por desgracia, IBM se salt olmpicamente la especificacin de Intel que reserva las interrupciones 0-31 para el procesador.
o

INT 0: error de divisin, generada automticamente cuando el cociente no cabe en el registro o el divisor es cero. Slo puede ser generada mediante DIV o IDIV. Hay una sutil diferencia de comportamiento ante esta interrupcin segn el tipo de procesador: el 8088/8086 y los NEC V20 y V30 almacenan en la pila, como cabra esperar, la direccin de la instruccin que sigue a la que caus la excepcin. Sin embargo, el 286 y superiores almacenan la direccin del DIV o IDIV que causa la excepcin. INT 1: paso a paso, se produce tras cada instruccin cuando el procesador est en modo traza (utilizada en depuracin de programas). INT 2: interrupcin no enmascarable, tiene prioridad absoluta y se produce incluso aunque estn inhibidas las interrupciones (con CLI) para indicar un hecho muy urgente (fallo en la alimentacin o error de paridad en la memoria). INT 3: utilizada para poner puntos de ruptura en la depuracin de programas, debido a que es una instruccin de un solo byte muy cmoda de utilizar. INT 4: desbordamiento, se dispara cuando se ejecuta un INTO y haba desbordamiento. INT 5: rango excedido en la instruccin BOUND (slo 286 y superiores). Ha sido incorrectamente empleada por IBM para volcar la pantalla por impresora. INT 6: cdigo de operacin invlido (slo a partir del 286). Se produce al ejecutar una instruccin indefinida, en la pila se almacena el CS:IP de la instruccin ilegal. INT 7: dispositivo no disponible (slo a partir del 286).

Interrupciones hardware: Son las generadas por la circuitera del ordenador en respuesta a algn evento. Las ms importantes son:
o

INT 8: Se produce con una frecuencia peridica determinada por el canal 0 del chip temporizador 8253/8254 (en la prctica, unas 18,2 veces por segundo). Como desde esta interrupcin 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 peridicamente.

o o

INT 9: generada al pulsar o soltar una tecla. INT 0Ah, 0Bh, 0Ch, 0Dh, 0Eh, 0Fh: Puertos serie, impresora y controladores de disquete. INT 70h, 71h, 72h, 73h, 74h, 75h, 76h, 77h: Generadas en los AT y mquinas superiores por el segundo chip controlador de interrupciones.

Interrupciones de perifricos El P posee 2 terminales de entrada para interrupciones de perifricos: - interrupcin no enmascaradle NMI y - Solicitud de interrupcin INTR Cuando se activa la terminal NMI ocurre la interrupcin 2 La terminal INTR se debe decodificar externamente para seleccionar un vector. Es posible escoger cualquier vector de interrupcin para la terminal INTR el cual generalmente se establezca como interrupcin entre ZON y FFN. - INTA: Es una terminal del P pero es de salida y se utiliza como respuesta a la entrada INTR. Instrucciones para el control de P Son instrucciones que comnmente se emplean en el control de hardware. - Control de bit de la bandera de acarreo (CF) mediante las instrucciones STC (activa acarreo) y CLC (desactiva acarreo) y CMC (complemento del acarreo). - WAIT: Esta instruccin monitorea la terminal BUSY de los P 286 y 386 y la terminal TEST de los P 8086 y 8088. Al ejecutar la instruccin WAIT y la terminal BUSY = 0 no ocurre nada y se ejecuta la siguiente instruccin normalmente pero si BUSY = 1 el P espera hasta que la terminal BUSY regresa a 0. BUSY es una terminal de entrada al P y comnmente se conecta a la terminal BUSY del coprocesador numrico 8087-80387.

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: Divisin por cero Ejecucin paso a paso No Enmascarable (NMI) Puntos de ruptura Desbordamiento (INTO) Volcar pantalla por impresora (BIOS) Cdigo de operacin incorrecto Reservada IRQ 0: Contador de hora del sistema (BIOS) IRQ 1: Interrupcin de teclado (BIOS) IRQ 2: canal E/S, 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 vdeo (BIOS) Listado del equipo (BIOS) Tamao 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

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:

Accin de CTRL-BREAK (BIOS) Proceso peridico del usuario (Usuario) Parmetros de vdeo (BIOS) Parmetros del disquete (BIOS) Tabla de caracteres grficos (BIOS) Fin de programa (DOS) Servicio del sistema operativo (DOS) Direccin de terminacin (DOS) DOS CTRL-BREAK (DOS) Manipulador de errores crticos (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 (impresin 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 ratn Interrupcin de disquete (BIOS) Parmetros del disco duro 1 (BIOS) Apunta a la INT 10h original del BIOS si existe VGA Caracteres grficos EGA (BIOS) Parmetros 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: Interrupcin 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

INT 73: INT 74: INT 75: INT 76: INT 77:

IRQ 11: reservada (2 chip 8259-AT) IRQ 12: interrupcin de ratn IBM (2 chip 8259-AT) IRQ 13: error de coprocesador matemtico (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.98 Gb Memoria extenda (386) Memoria extendida FFFFFF 14.9 Mb Memoria extendida (286/386) 110000 Memoria alta (64 Kb) 100000 64 Kb HMA (286/386) para el nuvleo del DOS (AT) - 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 (mximo 384 Kb) D0000 64 Kb extensiones de ROM (y/o memoria superior 386 C0000 128 Kb Memoria mxima de video direccionable A0000 Memoria Convencional (640 Kb) 00600 638.5 Kb RAM de usuario (y ncleo del DOS PC/XT) 64 Kb EMS (PC/XT/AT) (o memoria superior 386)

rea de datos del DOS y del BASIS 00500 Variables de la BIOS y de las extensiones de ROM 00400 00000 Vectores de interrupcin

S-ar putea să vă placă și