Professional Documents
Culture Documents
La mquina fsica, o hardware, es el nivel ms bajo de la jerarqua. En este nivel existen muchas diferencias entre los sistemas. Sin embargo, los aspectos comunes entre diferentes mquinas incluyen: Un procesador de la familia 80x86 de Intel: 8086, 8088, 80186, 80286, 80386, u 80486. Un mapeo similar de equipo fsico dentro del sistema (en otras palabras, direcciones e interrupciones similarmente asignadas). Uno de un nmero limitado de diseos de bus. La mquina lgica, el software, incluye al BIOS, el Sistema Operativo de Disco (DOS) y los manejadores de dispositivos
1.2. El Hardware
Todos los miembros de la familia de computadoras PC's se forman de un procesador, chips de memoria y varios circuitos de chips programables. Los componentes del circuito principal necesarios para hacer trabajar a la computadora se localizan en la tarjeta del sistema; otras partes importantes estn localizadas en tarjetas de expansin, que pueden ser conectadas a la tarjeta del sistema.
La tarjeta del sistema contiene al microprocesador -ya sea 8088, 8086, 80186, 80286, 80386 u 80486conectado a cuando menos 640K bytes de memoria, algunos programas interconstruidos en ROM, tales como ROM-BIOS, y varios chips de soporte muy importantes. Algunos de estos chips controlan dispositivos externos, como los manejadores de disco o el monitor y otros ayudan al microprocesador a realizar sus tareas.
Procesador 80386 Este es un procesador de 16 y 32 bits. Es completamente compatible con el 80286, pero en el nivel del sistema implementa muchas nuevas caractersticas, incluyendo memoria virtual, mltiples procesos del 8086 y direccionamiento hasta para cuatro gigabytes de memoria. Procesador 80486
Coprocesadores matemticos 8087, 80287 y 80387 Existen coprocesadores matemticos que trabajan concurrentemente con la familia de procesadores 8086. Estos coprocesadores efectan clculos matemticos ms rpida y precisamente que realizndolo con la familia de procesadores 8086. Aunque existen diferencias tcnicas y de desempeo entre los tres coprocesadores, la diferencia principal para los programadores de aplicaciones, es que el 80287 y el 80387 pueden operar en modo protegido.
Los registros de propsito general son usados mayormente como reas de trabajo temporal, particularmente en las operaciones aritmticas. La adicin y la substraccin puede realizarse en memoria sin usar los registros, pero stos son ms rpidos de accesar. Aunque estos registros estn disponibles para cualquier tipo de trabajo, cada uno tiene un uso especial. El registro AX, tambin conocido como el Acumulador, es el registro principal usado para efectuar operaciones aritmticas. Es tambin el registro ms eficiente a usar en algunas operaciones aritmticas, lgicas y de transferencia de datos. El registro BX (Base) es usado a menudo para apuntar a localizaciones de memoria. Un valor de 16 bits almacenada en BX puede ser usado como parte de una direccin de memoria a ser accesada.
El registro CX (Contador) es usado como un contador de repeticin para control de iteracin y movimientos repetidos de datos. Por ejemplo la instruccin LOOP en lenguaje ensamblador utiliza a CX para almacenar la cuenta del nmero de iteraciones. Ninguno de los otros registros puede realizar esta funcin. El registro DX es usado para almacenar datos de 16 bits para propsitos generales. Es el nico registro que puede ser usado como apuntador de direcciones de E/S en las instrucciones de acceso a puertos. En operaciones aritmticas de 32 bits, el registro DX complementa al registro AX. Los registros de segmentos La arquitectura segmentada del 8086 nicamente permite direccionar 1 Mb de memoria. Se requieren direcciones de memoria de 20 bits para direccionar todas las localizaciones en un espacio de 1 Mb. Sin embargo, el 8086 usa apuntadores a memoria de 16 bits -recurdese que el registro BX de 16 bits puede ser utilizado para apuntar a memoria-, por lo tanto, es necesario utilizar un esquema de direccionamiento de memoria de 2 partes: cada apuntador de memoria de 16 bits, conocido tambin como parte de desplazamiento, se combina con el contenido de un un registro de segmento de 16 bits para formar una direccin de memoria de 20 bits, denominada parte de segmento. Cuatro registros, llamados CS, DS, SS y ES, son usados para identificar cuatro segmentos especficos de memoria de 64K. De los cuatro registros, los siguientes tres estan dedicados a propsitos especiales: El registro CS apunta al inicio de un bloque de 64 Kb de memoria, o Segmento de Cdigo, en el que reside la siguiente instruccin a ser ejecutada. En otras palabras, apunta al bloque de direcciones que contiene al programa que se est ejecutando. El 8086 nunca buscar la siguiente instruccin a ejecutar en un segmento que no sea el definido por el registro CS. El registro DS apunta al inicio del Segmento de Datos, el rea de memoria de 64 Kb donde normalmente se almacenan los datos. 4
El registro SS apunta al inicio del Segmento de Pila (o Stack), un lugar de trabajo temporal de 64 Kb donde los valores pueden ser almacenados y del cual pueden ser recuperados utilizando el esquema el Ultimo en Entrar es el Primero en Salir (Last In - First Out, o LIFO). El cuarto registro de segmento, el registro ES, apunta al inicio de un bloque de memoria conocido como Segmento Extra, que normalmente es usado para suplementar el segmento de datos y tener acceso a ms de 64K de memoria para almacenar datos. Tambin se usa para transferencia de datos entre segmentos. Es importante apuntar que es ms eficiente accesar memoria en el segmento de datos que en el segmento extra. Los registros de desplazamiento Cinco registros de desplazamiento son usados para localizar un byte o palabra dentro de un segmento especfico de 64K. Un registro, llamado el apuntador de instruccin (IP), localiza la siguiente instruccin a ejecutar en el segmento de cdigo; dos registros ms, conocidos como los registros de pila, estn ntimamente relacionados con la pila (o stack), un lugar en memoria donde el 8086 mantiene un seguimiento de direcciones y datos que necesita recordar para uso posterior; y los dos registros restantes, llamados los registros ndices, se utilizan para apuntar a los operandos actuales en el segmento de datos. El apuntador de instruccin (IP), tambin llamado el contador del programa (PC), proporciona la direccin de desplazamiento dentro del segmento de cdigo donde se almacena la siguiente instruccin a ser ejecutada. Conforme una instruccin se ejecuta, el apuntador de instrucciones es avanzado para que apunte a la instruccin en la siguiente direccin de memoria. Normalmente, la instruccin en la siguiente direccin de memoria es la siguiente instruccin a ejecutar, pero algunas instrucciones, como las llamadas a procedimientos y los saltos, pueden causar que el apuntador de instrucciones sea actualizado con un nuevo valor, que no sea la siguiente direccin. Los programas no tienen acceso directo al registro IP, pero existen ciertas instrucciones, tales como JMP y CALL, que cambian indirectamente el contenido de este registro o los salvan y restauran en o de la pila. Los registros apuntadores de la pila, llamados el apuntador de la pila (SP) y el apuntador base (BP), proporcionan desplazamientos en el segmento de pila. SP da la localizacin del tope actual de la pila y es anlogo al IP. BP es usado para tomar una "instantnea" de la localizacin del tope actual de la pila, para as posteriormente saber exactamente dnde se localiza en la pila cierta informacin. BP es particularmente importante para rutinas de interfase entre lenguajes de alto nivel y lenguaje ensamblador. Los registros ndice, llamados el ndice fuente (SI) y el ndice destino (DI), son registros de desplazamiento especializados. Tpicamente, SI y DI son usados en conjuncin con los registros de segmento DS y ES. En operaciones de cadena, por ejemplo, deber usarse DS:SI para apuntar a la direccin de la cadena fuente y ES:DI para apuntar a la cadena destino. Tambin, pueden usarse con otros registros (AX, BX, CX o DX) o un desplazamiento de instruccin, para proporcionar el desplazamiento relativo del inicio de un campo de datos, dentro del segmento de datos. Los registros SI y DI, entonces, proporcionan desplazamientos relativos dentro del campo de datos. El registro de banderas El registro de banderas, mostrado en la Figura 1.3, es realmente una coleccin de bits de control individual conocidos como banderas o flags. Las banderas estn disponibles en la forma de un registro para que puedan ser salvados y restaurados como un conjunto coordinado o inspeccionados como datos ordinarios. Sin embargo, normalmente las banderas son puestas y probadas como elementos independientes -no como un conjunto-, utilizando instrucciones especficas a cada bandera.
Existen 9 banderas de 1 bit en el registro de banderas de 16 bits, lo que deja 7 bits sin uso. Las banderas pueden dividirse lgicamente en dos grupos: seis banderas de estado, que son puestas para registrar la informacin de estado del procesador (usualmente indicando qu sucedi con una comparacin u operacin aritmtica), y tres banderas de control, que dirigen algunas de las instrucciones del 8086. Las Tablas 1.1 y 1.2 muestran la divisin de las 9 banderas de 1 bit.
Cdigo CF OF
Nombre Bandera de acarreo Bandera de desborde Bandera de cero Bandera de signo Bandera de paridad Bandera de acarreo auxiliar
Uso Es puesta (a uno) cuando una operacin genera un acarreo a o un prstamo de un operando destino Es puesta (a uno) si el resultado de un operacin es demasiado grande o pequeo para ajustarse en el operando destino Es puesta (a uno) si el resultado de una operacin es cero, o el de una comparacin es igual Igual al bit de mayor orden del resultado de una operacin (0 es positivo, 1 es negativo) Es puesta (a uno) si los de orden bajo del resultado de un operacin contiene un nmero par de bits 1 Es puesto (a uno) si una operacin genera un acarreo a o un prstamo de los 4 bits de orden bajo de un operando. Indica un ajuste necesitado en las operaciones aritmticas en decimal codificado en binario (BCD)
ZF SF PF AF
Tabla 1.1. Las seis banderas de estado en el registro bandera del 8088.
Cdigo DF
Uso Puede ser puesta a uno para hacer las que las operaciones de cadena se procesen de direcciones altas de memoria a direcciones bajas. O pueden ser aclaradas a cero para hacer que las operaciones de cadena se procesen de direcciones bajas de memoria a direcciones altas Si est puesta a uno las interrupciones sern reconocidas y atendidas conforme son recibidas. El bit puede ser aclarado a cero temporalmente para apagar el procesamiento de interrupciones Si est puesta a uno, el procesador genera una interrupcin de paso simple despus de ejecutar cada instruccin de un programa. Un programa depurador puede utilizar esta caracterstica para ejecutar un programa instruccin por instruccin
IF
Bandera de interrupcin
TF
Bandera de trampa
Tabla 1.2. Las tres banderas de control en el registro bandera del 8088.
cada una de ellas transporta un bit simple. Estos significa que los datos son transmitidos a travs del bus de 8 lneas en unidades de 8 bits (1 byte). Los microprocesadores 8086 y 80286 de la AT usa un bus de datos de 16 bits, y por lo tanto transportan datos en unidades de 16 bits (1 palabra). El 8088, siendo un microprocesador de 16 bits, puede trabajar con 16 bits de datos a la vez, tal como lo hacen sus homlogos, el 8086 y el 80286. Aunque el 8088 puede trabajar internamente con nmeros de 16 bits, slo puede pasar 8 bits de datos a la vez cuando est trabajando con la circuitera a su alrededor, debido al tamao de su bus de datos. El bus de datos de 16 bits del 80286 le ayuda a mover los datos en su alrededor ms eficientemente que el 8088. El Bus de control Consiste de varias seales discretas que incluyen lectura a memoria, escritura a memoria, lectura de entrada/salida, escritura de entrada/salida, peticin de interrupcin (8 niveles).
algunos puntos de vista, almacenar una palabra de esta forma es opuesto a lo que se espera. Debido a la apariencia hacia atrs (backward) de este esquema de almacenamiento, es extravagantemente llamado almacenamiento "back-words" (almacenamiento de palabras al reves, traduccin literal). Vase la Figura 1.4.
Si se trabaja con bytes y palabras en memoria, deber tenerse cuidado para no confundirse con el almacenamiento back-words. La fuente de la confusin tiene que ver generalmente con la manera de escribir los datos. Por ejemplo, si se escribe un valor de palabra en hexadecimal, se acostumbra a escribir algo como esto: ABCDh. El orden de significancia es el mismo que se utiliza cuando se escribe un nmero decimal: el dgito ms significativo se escribe primero. Pero cuando se escribe una palabra tal y como se almacena en memoria, debe escribirse primero la localizacin de la direccin inferior. As, en memoria, se escribe el nmero hexadecimal ABCDh como CDABh, con los bytes cambiados.
Segmentacin de direcciones de memoria El 8086 divide el espacio direccionable de memoria en un nmero arbitario de segmentos, cada uno conteniendo no ms de 64K bytes (Fig. 1.5). Cada segmento inicia en una localizacin que es divisible por 16 bytes, conocida como su direccin de segmento o prrafo de segmento. Para accesar bytes individuales o palabras, se utiliza una direccin adicional llamada una direccin de desplazamiento que apunta a una localizacin exacta de byte dentro del segmento de 64K designado por el prrafo de segmento. Debido a que las direcciones de desplazamiento son medidas siempre en relacin al inicio del prrafo de segmento, tambin son conocidas como direcciones relativas o desplazamientos relativos. Las direcciones son creadas y manipuladas combinando un prrafo de segmento de 16 bits y un desplazamiento relativo de 16 bits. El prrafo de segmento es desplazado hacia la izquierda 4 bits y sumado al desplazamiento relativo, para producir una direccin completa de 20 bits, como se muestra en la Figura 1.6. Juntas, las dos palabras de 16 bits son usualmente denominadas direccin segmentada; tambin son conocidas como vector, particularmente cuando se hace referencias a interrupciones.
10
Cuando se escribe una direccin de 20 bits dividida en sus partes de segmento y desplazamiento relativo, se utiliza la notacin 0000:0000, con el segmento en el lado izquierdo del signo de dos puntos (:) y el desplazamiento relativo en el lado derecho. Por ejemplo, una direccin de 20 bits escrita como FFE6E podra escribirse como FFE4:002E en notacin segmentada. La figura 1.7 muestra que es posible expresar una direccin simple de 20 bits en una amplia variedad de formas usando notacin segmentada, dependiendo de qu segmento de prrafo se elija.
Figura 1.7. Mltiples direcciones segmentadas diferentes para la misma direccin de memoria.
La pila Los procesadores de la familia 80x86 utilizan una estructura llamada pila para seguir la pista de la informacin durante las llamadas a funciones y otras operaciones. El procesador pone los registros en la pila siempre que una subrutina es llamada (una operacin PUSH) y los toma de ella (una operacin POP) al retornar de la subrutina. La pila obtiene su nombre de una analoga con una pila de platos en una cafetera: los nuevos datos son agregados (con una operacin PUSH) a la pila, hacindola crecer. Cuando algo es removido (con una operacin POP) el primer elemento en salir es el ltimo elemento agregado a la pila. Este tipo de mecanismo es conocido como El Primero en Entrar es el Ultimo en Salir (LIFO, por sus siglas en ingls). As, en el momento de "sacar" (POP) un dato de la pila, se est tomando el dato que est en el tope actual de la misma. Los programadores usan la pila para almacenar datos intermedios en clculos o para pasar valores (parmetros) a las subrutinas. Los lenguajes de programacin de alto nivel hacen un uso extensivo de la pila para este ltimo propsito. La pila siempre reside en el Segmento de Pila, por lo que el registro SS siempre es usado durante las referencias a la pila. El registro apuntador de la pila, SP, es usado implcitamente en todas las operaciones
11
de la pila como una direccin de memoria. La operacin PUSH decrementa el contenido de SP por dos y almacena su operando en la direccin de memoria especificada por SP. La operacin POP toma los datos de la direccin de memoria especificada por SP para ponerlos en su operando, y despus incrementa el contenido de SP por dos (Figura 1.8). Estos efectos sobre el registro SP estn interconstruidos en los microprocesadores y no pueden ser cambiados. El efecto prctico es que SP inicialmente debe apuntar a la parte superior del espacio de memoria de la pila, en lugar de apuntar a la parte inferior como es de esperarse. Es importante notar que las operaciones PUSH y POP siempre transfieren los datos una palabra a la vez, en contraste con la instruccin MOV, que puede mover un byte o palabra. Cualquier parte de un programa puede crear un nuevo espacio para pila en un momento dado, pero esto no es muy usualmente hecho. Normalmente cuando un programa se ejecuta, una pila simple es creada para l y esa pila es usada a lo largo de la operacin del programa --por el programa mismo, por sus subrutinas y por cualquiera de los servicios del DOS y el BIOS que son invocados durante la ejecucin del programa. Cuando no se ejecuta programa alguno, el DOS utiliza su propia pila privada.
No existe una manera simple de estimar el tamao de una pila que necesita un programa, y el diseo del 8088 no proporciona forma automtica alguna de detectar cundo se ha agotado el espacio de la pila o si sta es muy pequea. Es comn para los lenguajes de programacin usar automticamente un tamao de pila de 512 a 2K bytes, a menos que otra cantidad sea especificada. Puede asumirse con seguridad que este tamao de pila es suficiente, siempre y cuando no se tengan razones especiales para requerir ms espacio.
12
13
un error de paridad en memoria, etc. Cuando una NMI es enviada, se le da alta prioridad y la UCP la atiende antes que todas las otras interrupciones. Cuando una interrupcin se genera, el emisor de la interrupcin no necesita conocer la direccin de memoria del manejador de interrupcin requerido; nicamente necesita conocer el nmero de la interrupcin. El nmero apunta a la tabla almacenada en las localizaciones ms bajas de memoria, que contienen las direcciones segmentadas de la subrutina de servicio de la interrupcin. La direccin del manejador de interrupcin es conocida como vector de interrupcin, y la tabla es llamada tabla de vectores de interrupcin (Figura 1.9). La tabla de vectores normalmente es supervisada por el BIOS y el DOS. Las interrupciones salvan automticamente los valores actuales del cdigo de segmento (CS) y el apuntador de instruccin (IP) en la pila, para la computadora pueda retornar al lugar donde estaba trabajando cuando la interrupcin ocurri. Adems, el proceso de interrupcin salva el registro de banderas en la pila y aclara la bandera de interrupciones (IF), previniendo temporalmente la existencia de interrupciones adicionales. Vase la Figura 1.10.
14
Figura 1.10. Mecanismo de guardar el estado del procesador durante la atencin a una interrupcin.
1.3. El Software
Encima de la mquina fsica, el software proporcionado con la PC construye otra capa de la mquina virtual. Este software inicia con el BIOS, que forma una vista estndar de la mquina que intenta ocultar los aspectos especficos del hardware instalado. Arriba del BIOS, el DOS construye la mquina con la que estamos familiarizados (en trminos de archivos y directorios). Los manejadores de dispositivos permiten que el DOS se comunique con nuevos dispositivos no estndares en el diseo original de la PC.
importantes, como leer y escribir bytes de datos individuales a la pantalla de video o al disco. Los servicios de los lenguajes de programacin y del sistema operativo por lo general se construyen a partir de estas funciones bsicas. De la misma manera, un programador puede mejorar sus programas haciendo uso directo del ROM-BIOS y, por lo tanto, ganando acceso a un conjunto de herramientas extremadamente poderoso. Los servicios del ROM-BIOS se agrupan de acuerdo a los dispositivos de hardware que soportan, as los servicios de video, los servicios de disco y los servicios del teclado pueden revisarse separadamente. La filosofa del BIOS Todos los servicios del ROM-BIOS son invocados a travs de interrupciones. Las instrucciones de interrupcin hacen referencia a una localizacin particular en la tabla de vectores de interrupcin, en memoria baja, que contiene un vector de interrupcin: la direccin de la rutina de servicio almacenada en ROM. Este diseo hace posible, para cualquier programa, requerir un servicio sin conocer la direccin de memoria especfica de la rutina de servicios del ROM-BIOS. Esto, tambin permite que los servicios del BIOS sean cambiados, expandidos o adaptados sin afectar los programas que usan los servicios. Los servicios del ROM-BIOS podran ser supervisados por una interrupcin maestra, sin embargo estn divididos en categoras subjetivas, y cada categora tiene su propio controlador de interrupciones. El beneficio primario de este diseo es que permite a cada manejador de interrupciones ser reemplazado con una cantidad mnima de perturbaciones. Por ejemplo, si un fabricante de hardware crea un dispositivo de video, una impresora o cualquier otro dispositivo que sea radicalmente diferente y que requiera un rutina del BIOS completamente diferente para operarlo, el fabricante deber proporcionar este nuevo BIOS junto con el hardware. El nuevo programa del BIOS deber ser almacenado en RAM en vez de ROM y deber reemplazar slo aquella parte del ROM-BIOS que fue usada con el anterior hardware. Los servicios del ROM-BIOS El ROM-BIOS cuenta con doce servicios de interrupcin (tabla xxx) que se dividen en cinco grupos: seis de las doce interrupciones sirven a dispositivos perifricos especficos; dos reportan el equipo de la computadora; un servicio trabaja la hora y la fecha; otro realiza la operacin de imprimir la pantalla (la accin de oprimir la tecla PrtScr); y finalmente, dos interrupciones cambian la computadora a otra estado, activando el ROM-BASIC y la rutina de inicializacin del sistema. La mayora de las interrupciones ofrecen subservicios que realizan tareas especficas al dispositivo. As, la interrupcin 16 (hex 10) de servicios de video tiene diecisiete subservicios que realizan desde la inicializacin del modo de video hasta la modificacin del tamao del cursor. Un subservicio de una interrupcin es invocado llamando a la interrupcin gobernante y especificando el nmero del subservicio en el registro AH. Caractersticas de operacin de los servicios del BIOS Los servicios del ROM-BIOS usan convenciones de llamadas comunes que proporcionan consistencia en el uso de registro, banderas, la pila y memoria. El registro de segmento de cdigo (CS) automticamente es salvado, cargado y restaurado como parte del proceso de interrupcin. Consecuentemente, el programador no debe preocuparse por el registro CS de su programa. Los registro DS y ES son preservados por las rutinas de servicio del ROM-BIOS, excepto en los pocos casos donde son utilizadas explcitamente. El registro de segmento de pila (SS) permanece sin cambios y los servicios del ROM-BIOS se basan en la misma pila utilizada por los programas.
16
Relacionado con el registro del segmento de cdigo, el apuntador de instrucciones (IP) es preservado por el mismo mecanismo que preserva el segmento de cdigo. Adems, el apuntador de la pila (SP) se preserva debido a que todos los servicios del ROM-BIOS dejan limpia la pila, sacando (POPping) todo lo que se haya metido (PUSHed) durante la ejecucin de la rutina de servicio. Como es usual, los registros de propsito general, de AX a DX, y los registros ndice, SI y DI, son considerados de libre uso. La regla estndar de no esperar que el contenido de estos registros sean mantenidos cuando se pasa el control a otra rutina, se aplica tambin a los servicios del ROM-BIOS. Por lo general, cuando un resultado simple es retornado de una subrutina, se deja en el registro AX; esto se aplica al ROM-BIOS tambin.
Interrupcin Decimal Hexadecimal Servicios de dispositivos perifricos 16 10 19 13 20 14 21 15 22 16 23 17 Servicios de componentes de equipo 17 11 18 12 Servicio Hora/Fecha 26 1A Servicio Print-Screen 5 5 Servicios especiales 24 18 24 19 Uso Servicios de despliegue de video Servicios de disco flexible Servicios de comunicaciones Servicios de cinta de cassette Servicios de teclado estndar Servicios de impresora Servicio de lista de equipo Servicio de tamao de memoria Servicios de hora y fecha Servicio de Imprimir Pantalla Activa lenguaje ROM-BASIC Activa rutina de inicializacin del sistema
Las diferentes banderas del registro de banderas (FLAGS) son modificadas por las rutinas del ROMBIOS. Por tanto, no deber esperarse que sean preservadas. En algunos servicios las banderas de acarreo (CF) y de cero (ZF) son usadas para sealar el xito o fracaso general de una operacin requerida.
17
Manejo de errores. Operaciones con archivos. Miscelnea de funciones del sistema. Funciones de red. Iniciacin y terminacin de programas.
Pueden accesarse los servicios del DOS de 2 maneras. Algunos servicios, los ms importantes desde el punto de vista del programador, son accesados directamente utilizando interrupciones de software; otros, los usados por los usuarios finales, son accesados mediante el procesador de comandos (generalmente caracterizado por el programa COMMAND.COM). El trmino servicios del DOS define un conjunto de operaciones que el sistema operativo proporciona para usar en nuestros programas. En la propia terminologa del DOS, estos servicios se dividen en dos categoras: interrupciones del DOS y llamadas a funciones del DOS. Las interrupciones del DOS son invocadas por cdigos de interrupcin individuales mediante la instruccin INT. Las llamadas a funciones del DOS, por otra parte, son invocadas de la misma manera que los servicios del ROM-BIOS: a travs de una interrupcin coordinadora, la interrupcin 33 (hex 21). Como con los servicios del ROM-BIOS, las funciones individuales son seleccionadas mediante el registro AH. Existen nueve servicios de interrupcin listados en la tabla xxx. Cinco de ellos, las interrupciones 32, 37 a 39 y 47 (hex 20, 25 a 27 y 2F), son verdaderos servicios de interrupcin del DOS, cada una teniendo una tarea asociada especficamente definida. Las otras interrupciones tienen usos ms generales. Quiz la ms importante es la interrupcin 33 (hex 21), que es usada para invocar las llamadas a funciones del DOS. Las tres interrupciones restantes 34 a 36 (hex 22 a 24), son usadas para guardar direcciones segmentadas. Nuestros programas pueden establecer estas direcciones (preferentemente usando la llamada a la funcin 37 del DOS) para apuntar a rutinas especiales. Despus, cuando surjan las circunstancias apropiadas, el DOS invocar las rutinas localizadas en estas direcciones mediante estas tres interrupciones de direccin. Las cinco interrupciones principales del DOS De las nueve interrupciones del DOS, cinco son verdaderas interrupciones, significando que tienen programas de manejo de interrupcin interconstruidas asociadas con ellas, cada una realizando una tarea particular. La interrupcin 32 (hex 20): Terminacin del programa La interrupcin 32 es usada para salir de un programa y pasar el control de regreso al DOS. Es importante aclarar que esta interrupcin no cierra ningn archivo cuando termina el programa. Interrupciones 37 y 38 (hex 25 y 26): Lectura y escritura absoluta a disco Las interrupciones 37 y 38 son usadas para leer y escribir sectores especficos del disco, respectivamente. Son los nicos servicios del DOS que ignoran la estructura lgica de un disco y trabajan exclusivamente con sectores individuales, no prestando atencin a la existencia de archivos, directorios de archivo o FAT (tabla de localizacin de archivos). Todos los otros servicios del DOS trabajan dentro del contexto de una estructura lgica del disco. La interrupcin 39 (hex 27): Termina y permanece residente
18
Como la interrupcin 32, la interrupcin 39 termina un programa, pero no lo elimina de la memoria. En su lugar, deja una porcin especificada del programa en memoria (el programa permanece residente), y el registro del DOS de la primera porcin usable de la memoria es cambiado a la direccin de prrafo que sigue inmediatamente despus del programa residente. La informacin de que se hace residente usando la interrupcin 39, convierte al programa en una extensin del DOS, no permitiendo que sea sobreescrito por otros programas. Los programas tpicamente usan este servicio para establecer una nueva rutina de manejo de interrupcin con la intencin de permanecer en efecto inmediatamente. Estas rutinas de manejo de interrupcin generalmente reemplazan a los manejadores de interrupciones originales para cambiar o extender su operacin. La interrupcin 47 (hex 2F): interrupcin de multiplexin A partir de la versin 3.0 del DOS se agreg una nueva interrupcin, numerada como 47 (hex 2F). Esta interrupcin establece una interface comn entre dos procesos. A pesar de que Microsoft e IBM documentan esta interrupcin para uso exclusivo del SPOOLer del DOS, puede ser utilizado por otros programas. Las tres interrupciones del DOS de manejo de circunstancias excepcionales El DOS usa tres interrupciones, 34 a 36 (hex 22 a 24), para manejar tres circunstancias excepcionales: la finalizacin de un programa; la accin de interrumpir (break) la ejecucin de un programa con el teclado estndar (usando las teclas Ctrl-Break o Ctrl-C), y cualquier error crtico (usualmente un error de disco o de otro tipo). Los programadores pueden afectar la accin efectuada en cada una de estas tres circunstancias cambiando el correspondiente vector de interrupcin para que apunte a la operacin que elijan. El DOS guarda una direccin segmentada por omisin para cada uno de estos vectores de interrupcin, que es preservado en el inicio de la operacin de un programa y restaurado despus de que el programa termina. Esto permite que los programadores puedan cambiar libremente estos vectores acorde a sus necesidades sin perturbar la operacin de subsecuentes programas o la operacin del mismo sistema operativo. La interrupcin 34 (hex 22): Direccin de terminacin La direccin asociada con la interrupcin 34 especifica dnde se pasar el control de la computadora cuando el programa termine su ejecucin. Esta direccin tambin est almacenada en el PSP del programa. Normalmente, este servicio es usado para retornar el control al intrprete de comandos del DOS, el COMMAND.COM, cuando un programa termina. La interrupcin 35 (hex 23): Direccin de interrupcin de programa La direccin asociada con la interrupcin 35 apunta a la rutina de manejo de interrupcin que ser invocada siempre que el DOS responda a una accin de interrupcin emitida por el teclado estndar (haciendo uso de las teclas Ctrl-Break o Ctrl-C). La respuesta habitual del DOS a esta circunstancia es terminar la ejecucin del programa. Al cambiar esta rutina de manejo de interrupcin, el programador puede hacer que el DOS efecte cualquier accin deseada, cada vez que se opriman las teclas Ctrl-Break o Ctrl-C, no importando lo compleja o extensa que sea. La interrupcin 36 (hex 24): direccin del manejador de errores crticos
19
La direccin asociada con la interrupcin 36 apunta a la rutina de manejo de interrupcin que es invocada siempre que el DOS detecta un error crtico -una situacin de emergencia que previene la continuacin del programa. La interrupcin coordinadora de llamadas a funciones del DOS La interrupcin 33 coordina las llamadas a las funciones del DOS. Estas funciones se clasifican en funciones tradicionales, las funciones que son universales a todas las versiones del DOS, y funciones extendidas, los nuevos servicios introducidos a partir de la versin 2.0 del DOS. Es importante aclarar que, con cada nueva versin del sistema operativo, el conjunto de servicios extendidos se incrementa con nuevos funciones. Tanto las funciones tradicionales como extendidas son invocadas emitiendo la interrupcin 33 con el nmero de funcin requerida especificado en el registro AH. Los servicios tradicionales del DOS se muestran en la tabla xxx.
Interrupcin Decimal 0 1-12 13-36 37-38 39-41 42-46 38 Hexadecimal 00 01-0C 0D-24 25-26 27-29,2E 2A-2D 26 Grupo Funcin que no maneja dispositivos Dispositivos de E/S de caracteres Funciones de administracin de archivos Funciones que no manejan dispositivos Funciones de administracin de archivos Funciones que no manejan dispositivos Escritura absoluta a disco
Acceso a las funciones del DOS desde Turbo Pascal Los lenguajes de alto nivel ofrecen diferentes maneras de realizar llamadas a las funciones del BIOS y del DOS. Cada lenguaje tiene un mtodo que puede o no parecerse a los de otro lenguaje. En esta seccin se examina la manera en que Turbo Pascal accesa los servicios del BIOS y del DOS. 20
Turbo Pascal tiene un conjunto extenso de servicios que proporcionan acceso a los recursos del sistema y minimizan la necesidad de que los programadores escriban su propio cdigo a nivel del sistema. Las funciones de entrada/salida de archivo y perifricos se ajusta a las necesidades de casi cualquier programador; la mayora de las operaciones comunes de manejo de archivos y subdirectorios (obtener el tamao de un archivo, obtener el directorio actual, cambiar de directorio, crear un directorio, etc.) son completamente soportadas. A partir de la versin 4.0 de Turbo Pascal es posible escribir programas que procesen un grupo de archivos seleccionados mediante la especificacin de nombres de archivos con caracteres comodines. Sin embargo, algunas veces es necesario codificar alguna caracterstica que el lenguaje no proporciona y que es de vital importancia para tu programa. La estructura de datos principal de Turbo Pascal para accesar registros del microprocesador es el registro (record) Registers. La estructura de este registro, que est definida en la unidad Dos de Turbo Pascal a partir de la versin 4.0, es mostrada a continuacin. La versin 3.0 soportaba esta estructura de datos pero deba ser definida por el usuario.
type Registers = record case Integer of 0 : (AX,BX,CX,DX,BP,SI,DI,DS,ES,FLAGS : word); 1 : (AL,AH,BL,BH,CL,CH,DL,DH : byte); end;
Turbo Pascal tiene los siguientes dos procedimientos para generar interrupciones:
procedure MSDos(var Regs : Registers) procedure Intr(IntNo : byte; var Regs : Registers)
MSDOS genera la interrupcin 21h, la interrupcin coordinadora de llamadas a funciones del DOS. INTR puede generar cualquier interrupcin de software, incluyendo la interrupcin 21h (en la versin 3.0,
21