ARKI 8088xx

download ARKI 8088xx

of 65

Transcript of ARKI 8088xx

UNIVERSIDAD NACIONAL SAN AGUSTIN DE AREQUIPA

PAGE

INDICE

INTRODUCCIN

1ESTRUCTURA BASICA DE LAS COMPUTADORAS 2

1. CPU

2. UNIDAD DE ALMACENAMIENTO PRINCIPAL 2

3. DISPOSITIVOS DE ENTRADA Y SALIDA 2

4. BUSES 3MICROPROCESADOR HMOS 8088 4

ESTRUCTURA DE LA PC XT

6 2.1.-MICROPROCESADOR HMOS 8088

102.1.1.- DESCRIPCIN

112.1.2.- LNEAS COMUNES AL MODO MXIMO Y MNIMO 112.1.3.- LNEAS EXCLUSIVAS DEL MODO MNIMO DEL 8088 122.1.4.- LNEAS EXCLUSIVAS DEL MODO MXIMO DEL 8088 122.1.5.- REGISTROS DE USO GENERAL DEL 8086/8088

13FUNCIONAMIENTO GENERAL DEL PC-XT

141.- PROCESADOR CENTRAL 8088 Y CHIPSET

142.- MEMORIA DE UN 8088

162.1.-SECCION DE LA MEMORIA ROM

192.2.-SECCION DE MEMORIA RAM

192.3.- ROM BIOS

213.- TAMAOS Y TIEMPOS DE EJECUCIN DE LAS INSTRUCCIONES 394.-SECCION DE CONTROL DE PERIFRICOS

464.1.- CONTADOR TEMPORIZADOR PTI 8253

464.2.- ADAPTADOR DE PERIFRICOS PARALELO, PPI 8255

474.3.- DECODIFICADOR DEL MAPA DE E/S

484.4.- ADAPTADOR DE TECLADO

484.5.- MICRORUPTORES PARA LA CONFIGURACION DEL SIS 494.6.- SECCION DMA

495.-SECCION DE EXPANSIONES

506.-SECCION DE CONTROL EXTERNO

527.-SECCIN DE FUENTE DE ALIMENTACIN

52PERIFRICOS

544.1.-EL TECLADO

554.2.-SONIDO

554.3.- VIDEO

564.4.- IMPRESORAS

564.5.-DISCO RIGIDO

574.6.-CINTAS PARA BACKUP

574.7.- DISKETTES

574.8.- MODEM

57 5.- PUERTOS

58 6.- APLICACIONES GENERALES DE LA FAMILIA 8088

59 7.-ESQUEMATICOS DE SISTEMAS PC-XT.

60PENTIUM IV 61MICROCONTROLADORES 66BIBLIOGRAFA

781.- INTRODUCCIN

El cambio de estrategia de IBM, a principios de la dcada de los 80s, incorporndose al campo de los microcomputadores personales, mediante la comercializacin del modelo PC, supuso un acceso al pblico en general a sistemas lgicos tpicos de grandes sistemas.

El corazn del PC-XT es el microprocesador 8088, que acta como CPU (unidad central de proceso por sus siglas en ingles Central Processing Unit)

El procesador Intel 8088, elegido por IBM para su primer modelo de PC era una versin "simplificada" de un procesador ms potente, el 8086, que tena registros y bus de datos de 16 bits. Sin embargo, se eligi el 8088, con registros de 16 bits, pero bus de datos de 8 (el de direcciones es de 20 bits), coincidente con el bus de datos la placa-base, que era tambin de 8 bits, por razones de simplificacin y economa. No solo el ancho del bus, otros muchos detalles de diseo han hecho especular largamente acerca de que nadie en IBM pareca tener mucha fe en el futuro del recin nacido.Los fits horizontales del system board sistema mnimo estn en la base de la unidad del sistema y son aproximadamente 8-1/2 a 12 pulgadas. Es una singular multicapa por canal en planos de diseo, con tierra o ground provista.

La fuente DC y sus seales entran a travs de un par de conectores de 16 pines. Otros conectores en el board son para el teclado y el speaker. Hay ocho grupos (sockets) o tarjetas de 62 pi nes montadas en la placa (board).

El canal de I/O es direccionado a travs de esos 8 slots, J8 es ligeramente diferente de los otros.

El Dip Switch de 8 canales montado puede configurarse para leer un programa de control. Este provee la informacin del software al manipular las operaciones en el modo deseado con los switches.

El sistema mnimo consiste de 5 reas funcionales:

El subsistema procesador y los elementos de soporte, la ROM, la memoria de (R/W) adaptadores de I/O y el canal de I/O.El corazn del sistema es el MP8088, este es una versin de 8 bits (bus externo) de Intel de 16 bits, el software es compatible con el 8086 que tiene operaciones de 16 bits incluyendo multiplicacin y divisin y 20 bits direccionables (1Mb de almacenaje).

El procesador opera a 4.77 Mhz, esta frecuencia es derivada del cristal de 14.31818 MHz la cual es dividida por tres por el reloj del procesador; y por cuatro se obtiene 3.58 Mhz (la seal requerida para los televisores de color).

Los 4.77 Mhz del reloj, los ciclos del bus del 8088 son cuatro relojes de 210 ns 840 ns, los ciclos de I/O toman 5*210 ns 1.05 us.

El procesador es respaldado por el set de funciones provistas por cuatro canales de 20 bits de acceso directo a memoria (DMA), tres grupos de canales del Timer de 16 bits y ocho niveles de interrupciones.

Tres de los cuatro canales de DMA estn disponibles en el bus de I/O y hay una alta velocidad para transferencia de datos entre las memorias y los canales de I/O sin intervencin de la memoria del procesador.

El cuarto canal es programado para refrescar el sistema dinmico de memoria, esto esta hecho para el programa del Timer-contador e informe peridicamente de la transferencia DMA.

La accin anterior crea un ciclo de lectura de la memoria disponible para el refresco del almacenaje (both) en el sistema y en los slots de expansin.

Todos los datos del DMA excepto el canal de refresco toman 5 ciclos de reloj 1.05 (s; si una lnea de la lectura del procesador no esta deshabilitada. Los ciclos de refresco de DMA toman 4 ciclos 840 ns. El tercer Timer programable es usado como se muestra.

El canal cero es usado en un propsito general del Timer provee un tiempo base constante para implementar el time-of-delay. El canal uno es usado para el tiempo de pregunta y refresco del ciclo de DMA; el canal 2 es usado para el respaldo de la generacin de tonos de audio del speaker. El otro canal tiene un tiempo mnimo de resolucin de 1.05 us.

De las ocho interrupciones, 6 son direccionadas a los slots de expansin para el uso de las tarjetas, dos son usadas en el sistema mnimo. Las mas altas prioridades estn en el nivel cero del Timer-contador y proveen interrupciones peridicas. El nivel uno esta asignado al teclado, circuitos y receptores de interrupcin para otros cdigos; la interrupcin no enmascarable del 8088 es usada para el reporte de errores de paridad de la memoria.

El sistema mnimo esta respaldado por la ROM y memoria R/W, tiene un espacio de 64 Kbits por 8 de ROM o de EPROM. Dos sockets (mdulos) de los provistos pueden aceptar artificios de 32K 8K. Un socket tiene 32K por 8 de ROM, el otro tiene 8K por 8 bits. La ROM contiene el power-on-self-test, I/O drivers de patrones para 128 caracteres en el modo grafico y un cargador bootstrap de diskette. La ROM es un encapsulado (modulo) de 28 pines y tiene un tiempo de acceso y un ciclo de 250 ns.

El system board tambin tuvo 128K por 9 a 256K por 9 de memoria de lectura/escritura. Un sistema mnimo tendra 128K de memoria con mdulos (sockets ) para un adicional de 128K.

Una gran memoria de un mximo del sistema mnimo de 256K es obtenida por adicin de tarjetas de memoria en los slots de expansin. La memoria consiste de 64K dinmicos por un chip por un tiempo de acceso de 200 ns y un tiempo de ciclo de 345 ns. Toda la memoria de lectura/escritura es de paridad chequeada.

El system board contiene un adaptador para circuitos para juntar una interface serial desde el teclado. Esos circuitos generan una interrupcin al procesador cuando se completa la bsqueda del cdigo o es recepcionado. Esta interface puede preguntar la ejecucin del diagnostico (test) en el teclado. La interface del teclado es un conector DIN de 5 pines en la placa que se extiende a travs del panel de la unidad.

Fabricantes del 8086/8088

En junio de 1978 Intel lanz al mercado el primer microprocesador de 16 bits: el 8086. En junio de 1979 apareci el 8088 (internamente igual que el 8086 pero con bus de datos de 8 bits) y en 1980 los coprocesadores 8087 (matemtico) y 8089 (de entrada y salida). El primer fabricante que desarroll software y hardware para estos chips fue la propia Intel. Reconociendo la necesidad de dar soporte a estos circuitos integrados, la empresa invirti gran cantidad de dinero en un gran y moderno edificio en Santa Clara, California, dedicado al diseo, fabricacin y venta de sus sistemas de desarrollo que, como se explic anteriormente, son computadoras autosuficientes con el hardware y software necesario para desarrollar software de microprocesadores.

Los sistemas de desarrollo son factores clave para asegurar las ventas de una empresa fabricantes de chips. La inmensa mayora de ventas son a otras empresas, las cuales usan estos chips en aparatos electrnicos, diseados, fabricados y comercializados por ellas mismas. A estas empresas se las llama "fabricantes de equipo original", o en ingls, OEM (Original Equipment Manufacturer). El disminuir el tiempo de desarrollo de hardware y software para las OEM es esencial, ya que el mercado de estos productos es muy competitivo. Necesitan soporte pues los meses que les puede llevar el desarrollo de las herramientas apropiadas les puede significar prdidas por millones de dlares. Adems quieren ser los primeros fabricantes en el mercado, con lo cual pueden asegurarse las ventas en dos reas importantes: a corto plazo, ya que al principio la demanda es mucho mayor que la oferta, y a largo plazo, ya que el primer producto marca a menudo los estndares.

De esta manera la empresa Intel haba desarrollado una serie completa de software que se ejecutaba en una microcomputadora basada en el 8085 llamada "Intellec Microcomputer Development System". Los programas incluan ensambladores cruzados (stos son programas que se ejecutan en un microprocesador y generan cdigo de mquina que se ejecuta en otro), compiladores de PL/M, Fortran y Pascal y varios programas de ayuda. Adems haba un programa traductor llamado CON V86 que converta cdigo fuente 8080/8085 a cdigo fuente 8086/8088. Si se observan de cerca ambos conjuntos de instrucciones, queda claro que la transformacin es sencilla si los registros se traducen as: A -> AL, B -> CH, C -> CL, D -> DH, E -> DL, H -> BH y L -> BL. Puede parecer complicado traducir LDAX B (por ejemplo) ya que el 8088 no puede utilizar el registro CX para direccionamiento indirecto, sin embargo, se puede hacer con la siguiente secuencia: MOV SI, CX; MOV AL,[SI]. Esto aprovecha el hecho que no se utiliza el registro SI. Por supuesto el programa resultante es ms largo (en cantidad de bytes) y a veces ms lento de correr que en su antecesor 8085. Este programa de conversin slo serva para no tener que volver a escribir los programas en una primera etapa. Luego debera reescribirse el cdigo fuente en assembler para poder obtener las ventajas de velocidad ofrecidas por el 8088. Luego deba correr el programa en la iSBC 86/12 Single Board Computer basado en el 8086. Debido al engorro que resultaba tener dos plaquetas diferentes, la empresa Godbout Electronics (tambin de California) desarroll una placa donde estaban el 8085 y el 8088, donde se utilizaba un ensamblador cruzado provisto por la compaa Microsoft. Bajo control de software, podan conmutarse los microprocesadores. El sistema operativo utilizado era el CP/M (de Digital Research).El desarrollo ms notable para la familia 8086/8088 fue la eleccin de la CPU 8088 por parte de IBM (International Business Machines) cuando en 1981 entr en el campo de las computadoras personales. Esta computadora se desarroll bajo un proyecto con el nombre "Acorn" (Proyecto "Bellota") pero se vendi bajo un nombre menos imaginativo, pero ms correcto: "Computadora Personal IBM", con un precio inicial entre 1260 dlares y 3830 dlares segn la configuracin (con 48KB de memoria RAM y una unidad de discos flexibles con capacidad de 160KB costaba 2235 dlares). Esta computadora entr en competencia directa con las ofrecidas por Apple (basado en el 6502) y por Radio Shack (basado en el Z-80).

2.- ESTRUCTURA DE LA PC XTLa estructura fsica fundamental del los microcomputadores personales PC, consta de 3 elementos:

Monitor

Teclado

Unidad central

En el interior del armario, chasis o case de la unidad central se aloja la fuente de alimentacin, la placa madre (mainboard), las unidades de discos y las tarjetas de ampliacin necesarias para el desarrollo del trabajo especifico al que se dedica la PC

En la figura siguiente se ofrece la organizacin general de la unidad central bsica, que esta formada por una fuente de alimentacin que general 4 voltajes (+5v,-5v,+12 v y 12 v) y la mainboard que soporta las siguientes secciones:

Procesador central

Oscilador o generador de las seales de reloj

4 canales de Acceso directo a memoria (DMA)

Memoria ROM

Memoria RAM

Controlador de interrupciones

Controlador de diskette

Controlador de altavoz

Controlador de teclado

Zcalos o ranuras para la expansin del sistema

Las ranuras de expansin, proporcionan las lneas de buses de la CPU a todo tipo de circuitos que se alojan en ellas con diversas finalidades, entre las que destacan:

Ampliacin de memoria de la placa principal

Controlador de pantalla monocromo

Controlador de pantalla color / grficos

Controlador de discos flexibles o duros

Canal serie RS-232, propio de ciertos perifricos tal como el raton

Canal paralelo, propio de las impresoras

La configuracin mnima de la PC incluye 64 Kb de Ram, 40 k de ROM, en donde estn grabados los programas bsicos para el funcionamiento del sistema, junto con las rutinas de control de E/S (BIOS) y en ciertos casos el interprete del lenguaje BASIC; solo hay una unidad de discos de 5 ; un monito monocromo de 12, con una resolucin de 25 filas por 80 columnas en modo texto y 640 x 200 en modo grafico y finalmente, un teclado independiente, con 83 teclas.

En cuanto al software se incluye una versin del sistema operativo DOS y el lenguaje interprete BASIC, grabado en la ROM.

La configuracin mnima indicada admite todo tipo de ampliaciones, como:

Memoria

Coprocesador matemtico 8087

Disco Duro

Pantallas de color y grficos

Impresoras

Otros sistemas operativos, como el CPM/86

Otros lenguajes (ensamblador,compiladores, BASIC, PASCAL, FORTRAN,COBOL,etc)

En la figura de la pagina siguiente se ofrece un primer esquema de introduccin al equipo fsico del microcomputador para, a groso modo, ubicar los principales componentes del sistema.

La versin XT dispone de 8 zcalos para tarjetas de expansin y 8 micro ruptores para configurar el sistema., tal como se apreci en la figura anterior.

En la figura a continuacin, se muestra el mapa de memoria del PC, que se halla dividido en dos partes, una dedicada a la memoria principal y otra a las E/S.

2.1.-MICROPROCESADOR HMOS 8088

2.1.1.- Descripcin

Primer microprocesador de propsito general cuyas principales caractersticas son:

Bus de datos de 8 bits.

Arquitectura interna de 16 bits

Capacidad de direccionamiento de memoria hasta 1 Mbyte.

Compatibilidad de software con 8086

Dos relojes para opresin: 5 Mhz para 8088, 8 Mhz para 8088-2.

Operaciones a nivel de byte, palabra y bloque

24 modos de direccionamiento a memoria

El 8088 puede trabajar en dos modos: mnimo (pequeas aplicaciones) y mximo (sistemas multiprocesador). Los requerimientos de conexin con el exterior cambian en funcin del modo que se decida emplear, aunque una parte de las seales es comn en ambos.

Consta de una unidad de ejecucin (EU: Execution Unit) y una unidad interfaz del bus (BIU: Bus Interface Unit). La unidad de ejecucin es la encargada de realizar todas las operaciones mientras que la unidad de interfaz del bus es la encargada de acceder a datos e instrucciones del mundo exterior, como se aprecia en le diagrama de bloques siguiente.

Hay tres clases de interrupcin: por hardware, por software e internas (a las dos ltimas tambin se las llama "excepciones").

Estructura interna del 8088. Pines del IC 8088

2.1.2.- Lneas comunes al modo mximo y mnimo del 8088.

AD7..0: Address Data Bus. Son lneas multiplexadas, que pueden actuar como bus de datos o de direcciones, evidentemente en tiempos distintos.

A15..8: Address Bus. En todo momento almacenan la parte media del bus de direcciones.

A19..16/

S6..3: Address/Status. Parte alta del bus de direcciones, multiplexada: cuando no salen direcciones, la lnea S5 indica el estado del bandern de interrupciones; las lneas S4:S3 informan del registro de segmento empleado para realizar el acceso a memoria: 00-ES, 01-SS, 10-CS, 11-DS; S6 no se usa.

-RD: Read. Indica una lectura de memoria o de un dispositivo de entrada/salida.

READY: Ready. Lnea de entrada que indica el final de la operacin de memoria o E/S.

INTR: Interrupt Request. Lnea de peticin de interrupciones enmascarables; el 8088 la observa peridicamente.

-TEST: Test. En respuesta a la instruccin mquina WAIT (no TEST!), el 8088 se para a comprobar esta lnea hasta que se ponga a 0.

NMI: Non-maskable Interrupt. Lnea de peticin de la interrupcin de tipo 2, que no puede ser enmascarada.

RESET: Provoca una inicializacin interna que culmina saltando a FFFF:0.

MN/-MX: Esta lnea indica si se trata de un sistema mnimo o mximo.

2.1.3.- Lneas exclusivas del modo mnimo del 8088

IO/-M: Status Line. Indica si se trata de un acceso a memoria o a un puerto de entrada/salida. No es vlida todo el tiempo (solo a ratos).

-wr: Write. Indica una escritura en memoria o en un dispositivo de entrada/salida (segn el estado de IO/-M).

-INTA: Interrupt Acknowledge. Es la seal de reconocimiento de interrupcin (solicitada a travs de INTR o NMI).

ALE: Address Latch Enable. Indica al exterior que las lneas de direccin contienen una direccin vlida, con objeto de que la circuitera externa la almacene en una pequea memoria (latch).

DT/-R: Data Transmit/Receive. Seal necesaria para emplear un transceiver 8286/8287 en el bus, con objeto de controlar el flujo de datos a travs del mismo (si se recibe/transmite).

-DEN: Data Enable. Necesario tambin para emplear el transceiver: sirve como entrada de habilitacin para el mismo.

HOLD: Hold. Lnea de entrada para solicitar al 8088 que se desconecte de los buses. Empleada por los controladores de DMA.

HLDA: Hold Acknowledge. Lnea complementaria de HOLD: el 8088 enva una seal de reconocimiento cuando se desconecta del bus.

-SS0: Status Line. Lnea de apoyo que, junto con IO/-M y DT/-R, permite determinar con precisin el estado del bus:

2.1.4.- Lneas exclusivas del modo mximo del 8088.

-RQ/-GT0..1: Request/Grant. Estas patillas bidireccionales permiten a los dems procesadores conectados al bus forzar al 8088 a que libere el bus al final del ciclo en curso.

-LOCK: Lock. Lnea que sirve al 8088 para prohibir el acceso al bus a otros procesadores (se activa tras la instruccin mquina LOCK y dura mientras se ejecuta la siguiente instruccin -la que sigue a LOCK, que es realmente un prefijo-). Tambin se activa automticamente en los momentos crticos de un ciclo de interrupcin.

QS1/QS0: Queue Status. Permite determinar el estado de la cola de instruc del 8088.

2.1.5.- Registros de uso general del 8086/8088

Para ayudar al funcionamiento de las instrucciones, para poder manejar variables en memoria y para su propio funcionamiento, el microprocesador dispone de una serie de variables internas de nombres fijos que son los registros internos. En total hay 14 de estos registros, como se puede observar en la figura 1.3, cada uno de los cuales est pensado principalmente para alguna funcin concreta.

A continuacin se detallan cada uno de estos registros, divididos segn reas de funcionalidad:

Registros de almacenamiento temporal

- AX (registro Acumulador): Este registro es usado, sobre todo, en operaciones aritmticas como primer operando y tambin como registro de propsito general a disposicin del programador.

- BX (registro Base): Se usa principalmente para indicar posiciones de memoria (offset).

- CX (registro Contador): Este registro se usa siempre que se necesite un contador en operaciones repetitivas y bucles.

- DX (registro Dato): Se usa como registro auxiliar en operaciones aritmticas y como contenedor de datos a la hora de usar instrucciones de comunicacin de puertos.

Estos cuatro registros, como todos los restantes, son de 16 bits, pero para permitir la realizacin de operaciones de tipo byte (8 bits) cada uno de estos cuatro registros est dividido en dos subregistros de 8 bits a los que se puede acceder de forma independiente (como se observa en la figura 1.2) . As, por ejemplo, los 8 bits inferiores de AX se llaman AL (L de low, bajo) y los 8 superiores AH (H de high, alto). En consecuencia, BX, CX y DX se dividen en BH/BL, CH/CL y DH/DL respectivamente. De esta forma se tiene que todas las instrucciones ensamblador pueden operar con datos de 8 y 16 bits segn lo que se precise. En los dems registros esta subdivisin no es posible.

Registros de segmento

Son cuatro registros de 16 bits usados para indicar direcciones de memoria (los conceptos de segmento y desplazamiento se explicarn en el apartado siguiente):

- CS (Code Segment): Este registro es usado por el procesador, junto con el registro IP, para conocer dnde est la instruccin actual que est siendo ejecutada.

- DS (Data Segment): Se usa para indicar dnde estn todos los datos del programa en ejecucin.

- SS (Stack Segment): En este registro se indica al procesador dnde est la zona de memoria que se usa como segmento de pila.

- ES (Extra Segment): Es el registro que referencia al segmento extra, y se usa como apuntador de memoria auxiliar en operaciones complejas donde se necesitan dos punteros de datos simultneos.

Registros de la pila

La pila es un rea de memoria importante. Tiene, en vez de uno, dos registros que se usan como desplazamiento (offset) para apuntar su contenido. Se usan como complemento al registro SS y son:

- SP (Stack Pointer): Es el registro que se reserva el procesador para uso propio en instrucciones de manipulacin de la pila.

- BP (Base Pointer): Se usa como registro auxiliar.

Registros ndices.

Se utilizan como desplazamientos complementarios para DS y ES a la hora de indicar la posicin donde se encuentran los datos a los que se desea acceder. Son:

- SI (Source index): Se usa como puntero origen en operaciones de desplazamiento de datos entre dos zonas de memoria.

- DI (Destination index). Se usa como destino en operaciones de desplazamiento de datos.

Registros de instruccin:

Slo hay uno, el registro IP (Instruction Pointer), es usado por la CPU para conocer la posicin relativa a la base CS donde se encuentra la instruccin que se est ejecutando actualmente.

Este registro no puede ser modificado directamente por parte del programador. Este puntero cambia su contenido automticamente cada vez que se ejecuta una instruccin o cuando se salta a otro punto del programa mediante una instruccin de salto.

Registro de Banderas:

Este registro es usado para tener el control de estado y control de las operaciones. La mayora de sus 16 bits se utiliza para representar un estado concreto:

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

CF -- PF -- AF -- ZF SF TF IF DF OF -- -- -- --

.

- Bit 0 - CF (Carry Flag): Es la bandera de acarreo. Se pone a 1 cuando se produce un resultado con acarreo tras una operacin aritmtica.

- Bit 1: No usado.

- Bit 2 - PF (Parity Flag): Cuando est a 1, indica que hay un nmero par de bits activos.

- Bit 3: No usado.

- Bit 4 - AF (Auxiliar Flag): Se usa como bandera auxiliar. Se pone a 1 cuando hay necesidad de realizar ajustes tras una operacin de tipo BCD.

- Bit 5: No usado.

- Bit 6 - ZF (Zero Flag): Indica si se ha producido un resultado cero o una comparacin con operadores iguales.

- Bit 7 - SF (Sign Flag): Indica si se ha producido un resultado negativo o comparacin menor.

- Bit 8 - TF (Trap Flag): Es la bandera de atrape, usada en procesos de depuracin de cdigo.

- Bit 9 - IF (Interrupt Flag): Si est a 1, indica que est permitida la generacin de interrupciones hardware que generan algunos perifricos, como la que realiza el teclado cada vez que una tecla es pulsada.

- Bit 10 - DF (Direction Flag): Indica a la CPU hacia donde se desplazan los punteros relativos en operaciones repetitivas de cadenas de datos.

- Bit 11 - OF (Overflow Flag): Indica si se ha producido un desbordamiento aritmtico.

- Bit 12 al 15: No usados.

Figura. Estructura del registro de banderas3.- FUNCIONAMIENTO GENERAL DEL PC-XT

Dada la complejidad del esquema completo de la placa principal del microcomputador XT, se procede a su descripcin dividindolo en las siguientes secciones fundamentales:

3.1.- PROCESADOR CENTRAL 8088 Y CHIPSETEste bloque acta como controlador general del sistema y esta basado en la CPU 8088, trabajando a 8 Mhz. Se configura alrededor de 9 circuitos integrados, que son:

-CPU: microprocesador 8088

-Coprocesador matemtico 8087 (opcional)

-Generador de seales de reloj 8284

-Controlador de bus 8288

-Basculas de direcciones 74LS373 (2) y 74LS244

-Buffer bidireccional para los datos 74LS245

-Controlador de interrupciones 8259

El 8088 comparte con el coprocesador matemtico 8087 un bus local por el que pasan las instrucciones que ha de ejecutar este ultimo, asi como los resultados que este produce y se dirigen a la memoria.

El procesador de datos numrico aumenta el juego de instrucciones del 8086/8088 mejorando su capacidad de tratamiento de nmeros. Se utiliza como procesador paralelo junto al 8088 aadiendo 8 registros de coma flotante de 80 bits as como instrucciones adicionales. Utiliza su propia cola de instrucciones para controlar el flujo de instrucciones del 8088, ejecutando slo aquellas instrucciones que le corresponden, e ignorando las destinadas a la CPU 8088. Las instrucciones del 8087 incluyen un juego completo de funciones aritmticas as como un potente ncleo de funciones exponenciales, logartmicas y trigonomtricas

Mediante las basculas de direcciones, el buffer de datos y el controlador de bus, se obtienen los buses normalizados de datos, direcciones y control, que conforman el bus del sistema. El controlador de interrupciones 8259 recibe las peticiones de interrupcin procedentes de los perifricos y las gestiona, teniendo en cuenta las prioridades, transmitindoselas a la CPU (linea INT).

El 8259 puede controlar hasta 8 interrupciones vectorizadas. Adems, a un 8259 se le pueden conectar en cascada un mximo de 8 chips 8259 adicionales, lo que permite gestionar sistemas con hasta 64 interrupciones

Cuando la CPU reconoce la interrupcin, enva la seal -INTA. Nada ms recibida la seal -INTA de la CPU, el 8259 activa el bit correspondiente a la interrupcin de mayor prioridad (la que va a ser procesada) La instruccin CALL provoca que la CPU enve dos pulsos -INTA. El 8259 utiliza estos dos pulsos -INTA para depositar en el bus de datos, sucesivamente, la parte baja y alta de la direccin de memoria del ordenador de la rutina de servicio de la interrupcin (16 bits).

Bloques que configuran a la seccin del procesador central, junto a los circuitos integrados que se usan.

3.2.- MEMORIA DE UN 8088La memoria RAM de un ordenador es utilizada para almacenar programas o datos con

los que el procesador trabaja. Todos los ordenadores necesitan memoria para almacenar

programas e informacin, as como para cargar y ejecutar los programas. Por lo general,

cuanto ms compleja es la tarea que se desea realizar, ms memoria necesita el ordenador.

Direccionamiento de la memoria

Todos los programas y datos se cargan en localidades de memoria especficas determinadas por sus direcciones. Esa informacin es almacenada como una secuencia de bytes de manera que cada uno de ellos tiene un nmero asociado correspondiente al lugar que ocupan. A ese nmero se lo denomina direccin de memoria.

Dado que el 8086/8088 tiene una longitud de palabra de direcciones de 20-bits es

posible direccionar hasta 1.048.576 (= 210) localidades distintas de memoria, es decir,

podemos almacenar hasta 1Mbyte de informacin. Sin embargo, la CPU slo procesa palabras de 16 bits en sus registros de direcciones, como ya se ha visto en los apartados anteriores, y las direcciones de memoria son de 20 bits, por lo que una direccin no cabe en un registro.

Por lo tanto, en principio, tericamente slo se podra acceder hasta el byte nmero 65.535 (216, el nmero mayor posible de 16 bits) contando a partir del inicio, que es el byte 0.

Para solucionar este inconveniente, se ide el dividir la direccin de un byte en dos

partes, denominadas segmento (o Base) y desplazamiento (u offset), ambos de 16 bits.

Adoptada dicha medida, la direccin real de un byte en la memoria es:

Direccin real = Valor base x 16 + valor desplazamiento3

De esta forma, se pueden direccionar el milln de bytes y se tiene acceso a toda la

memoria del PC (a cada uno de los 1024 Kbytes).

La notacin ms empleada para indicar la direccin de un par segmento

desplazamiento consiste en separar esos dos valores con dos puntos, utilizando notacin

hexadecimal (por ejemplo: 123h:12h4, representa la direccin con segmento 123h y

desplazamiento 12h).

Esta forma de direccionar la memoria present un pequeo problema que ha

entorpecido la elaboracin de grandes programas, y no es otro que ste: como ya se ha visto se accede a memoria dando un valor de segmento y otro de desplazamiento; pues bien, si se mantiene el valor del segmento fijo (lo que ocurre en los programas) y se vara nicamente el valor del desplazamiento slo es posible acceder a 65535 bytes (64 Kbytes), que es el valor mximo alcanzable con los 16 bits del registro de desplazamiento. Con esto, la informacin

mxima que se puede almacenar en la memoria, modificando nicamente el desplazamiento, es de 64 Kb. A esta cantidad de almacenamiento se le denomina segmento de memoria.

De este modo, un segmento es un rea continua de memoria que puede tener 64K-bytes,

que debe comenzar en una localidad de memoria cuya direccin sea lmite de 16 bytes

(cantidad denominada prrafo) y que puede solaparse con otros segmentos. As, por ejemplo, la direccin AB00:0012, (es decir, 43776:8 con valores decimales), tiene la misma direccin real que AB01:0002 (es decir, 43777:2 con valores decimales), pues ambas equivalen a la direccin real 700.434 (valor que se obtiene al aplicar la frmula anterior).

Segmentos de memoria de un programa

Por lo general, los programas ejecutables disponen de cuatro segmentos (4 zonas de 64

Kbytes):

- El segmento de cdigo (tiene como base el contenido del registro CS). En este

segmento se encuentran las instrucciones que forman el programa. Para acceder a

los datos contenidos en l, se usa el registro IP como desplazamiento.

3 Para obtener 20 bits de direcciones a partir de dos registros de 16, lo que se hace es desplazar uno de ellos (el segmento) 4 bits a la izquierda, aadiendo para ello 4 ceros por la derecha (lo que equivale a multiplicar por 16). Se obtiene as un valor de 20 bits (16 iniciales + 4 ceros aadidos) que no es ms que la direccin de inicio del segmento. Para acceder a los datos del segmento, habr que sumar una cantidad a esa direccin (dicha cantidad es el desplazamiento). Es as como se obtiene la frmula en cuestin.

- El segmento de datos (que tiene como base el registro DS). Contiene los datos que utiliza el programa (variables, etc.) Para acceder a los datos contenidos en l, se suele utilizar los registros SI y DI como desplazamiento.

- El segmento de pila5 (con SS como base). En l se desarrolla la pila del programa, utilizada para trasvases temporales de datos, llamadas a funciones, etc. Debe estar presente en todos los programas EXE de forma obligada. Se utiliza el registro SP para acceder a los datos de este segmento.

- El segmento extra (con ES como base). Su uso es opcional, y en l se encuentra un segmento definido por el usuario y que, regularmente, contiene datos adicionales.

Al igual que ocurre con el segmento de datos, para acceder a los datos contenidos en l, se suelen utilizar los registros SI y DI.

El hecho de que haya ms de un registro de segmento hace posible crear programas que controlen varios bloques de memoria simultneos de hasta 64 Kbytes cada uno.Mapa de MemoriaEn los 8086/8088, el espacio de direcciones de 1 MB de memoria se encuentra divido en varias reas funcionales, como se observa en la figura:

Parte del diseo del mapa de memoria del PC y PS/2 es consecuencia del diseo del microprocesador 8086/8088. Por ejemplo, el 8086/8088 mantiene siempre una lista de vectores de interrupcin (direcciones de las rutinas de gestin de interrupciones) en los primeros 1024 bytes de RAM. De la misma forma, todos los ordenadores basados en el 8086/8088 tienen la memoria ROM en lo ms alto del megabyte de memoria, debido a que,cuando el 8086/8088 se enciende, ejecuta el programa que comienza en la direccin FFFF0h.

Los primeros 64 Kbytes contienen la memoria de acceso aleatorio (RAM). Parte de esta memoria es utilizada por el DOS y el BIOS6 para retener los vectores de interrupcin y los datos. Los siguientes 192 Kb estn reservados para aplicaciones adicionales del usuario.

El resto del mapa de memoria sigue la divisin general entre la RAM, en la parte baja, y la ROM en la parte alta. Puede haber un mximo de 640 KB de RAM entre las direcciones 00000h y 9FFFFh. Los siguientes bloques de memoria se reservan para la RAM de vdeo (de A0000h a BFFFFh), mdulos de ROM instalables (de C0000h a DFFFFh) y ROM permanente (de E0000h a FFFFFh).

Divisiones de la memoria

Existen varias zonas de memoria RAM en los ordenadores personales:

Memoria Baja: Es la zona en la parte ms baja de la memoria base, en donde normalmente se carga el sistema operativo y los controladores de dispositivos.

Memoria Convencional (llamada a veces memoria base) son los primeros 640 Kbytes de memoria del ordenador e incluye a la memoria baja. En esta zona se carga el sistema operativo y los programas de aplicacin y sus datos. Con el sistema operativo DOS, los programas de aplicaciones se ejecutan slo en la memoria convencional. Esta limitacin se conoce a veces como barrera de los 640 Kbytes. Las otras zonas de memoria se utilizan de forma limitada, pero slo con ciertos tipos de hardware

Memoria superior: es toda la memoria direccionada entre los 640 Kbytes y el megabyte. La memoria superior tiene un tamao de 384 Kbytes. Algunas secciones de la memoria superior se reservan para ser utilizadas por diferentes partes del hardware del ordenador, como el adaptador de vdeo o la ROM BIOS. El hardware del ordenador puede permitir la utilizacin de algunos de los controladores de gestin de memoria del DOS (EMM386.SYS y HIDOS.SYS). En este caso, se puede utilizar la memoria superior para cargar controladores de dispositivo (como los necesarios para trabajar con un ratn o con una tarjeta de red) que habitualmente se cargan en memoria convencional, dejando as un mayor espacio disponible para los programas de aplicaciones. Es posible tambin mover a

la memoria superior el ncleo del sistema operativo principal.

6 BIOS = Basic Input Output System. Es un conjunto de rutinas bsicas grabadas que permiten acceder y manipular los diferentes perifricos de entrada y salida conectados al ordenador. Estas rutinas se encuentran almacenadas en memoria ROM (memoria no voltil). Adems de sa , tiene como funcin la de iniciar las comprobaciones y cargas del sistema operativo del

ordenador cuando ste se conecta.

3.2.1.-SECCION DE LA MEMORIA ROM

La seccin de memoria no voltil contiene integrados 2764 o 2932, de 8kb que guardan los siguientes programas:

BIOS, encargado de guardar las rutinas de arranque del sistema y las que permiten el funcionamiento con los perifricos comunes. Ocupa 8 Kb.

PROGRAMAS DE USUARIO, que pueden guardarse en IC 2764 y opcionalmente, colocarse en un zcalo que existe pata este fin

Las posiciones de la ROM ocupan las direcciones mas altas del mapa de memoria.

Para seleccionar el chip ROM que se va a leer se emplea un decodificador de 3 a 8 (74LS138) de cuyas 8 salidas, 6 se emplean para activar el pin /CS de seleccin de chip de c/u de las memorias ROM

3.2.2.-SECCION DE MEMORIA RAM

Los Ics mas comunes son los 4164, de 64K bits. Tambin se emplean pastillas DRAM de mayor capacidad, compatibles con el patillaje de la 4164.

Los 9 pines de cada fila trabajan en paralelo y cada 4164 proporciona o recibe un bit del bus de datos, quedando el noveno bit destinado a la paridad de los otros 8. El bit de paridad se enva o recibe desde el 74LS280, generador/ detector de paridad.

Las memorias dinmicas tienen como seales auxiliares: la /RAS (direccionamiento de fila de la matriz) y /CAS (direccionamiento de columna).

Para controlar 64k celdas de 1 bit c/u, se necesitaran 16 lineas de direccionamiento, para disminuir el numero de pines, se estructura la memoria en una matriz de 128 filas y 512 columnas, pudindose multiplexar con 8 lneas la informacin necesaria para determinar la fila y la columna (/RAS y /CAS)

Esta memoria DRAM precisa un ciclo de refresco cada 4 ms, se controla mediante el contador 1 del PTI 8253, el cual genera una onda cuadrada de 2ms. Con cada flanco ascendente, se carga un flop flop D , solicitando atencin al canal 0 del circuito de Acceso Directo a Memoria (DMA 8237) . Entonces el DMA inhabilita los tres decodificadores de la memoria y toma el control de las buses del sistema . El DMA genera todas las combinaciones posibles por las lneas MA0-MA6 que direccionan las 128 filas, sucesivamente, dando lugar al refresco de las celdas.

Existen 3 multiplexores 74LS158, con los que se multiplexan las direcciones XA0-XA17, produciendo 8 lneas de direccionado que entran a las patillas del 4164. El multiplexado de las filas se produce con la seal /RAS activa, y el de las columnas con /CAS activa.

Para decodificar el estado de las 4 lneas de mas peso del bus de direcciones (A16-A19) se usa el circuito TBS24S10, cuyas salidas proporcionan la seal para la seleccin de la seccin DRAM (/DRAMCS) y una serie de seales que se aplican a los decodificadores 74LS138 que generan las seales /RAS y /CAS.

El tranceptor del bus de datos 74LS245 se encarga de aislar la DRAM del bus del sistema

3.2.3.- ROM BIOSLa mayora de personas piensa que el DOS es el que controla el IBM PC, y aunque bsicamente esto es cierto, no tiene en cuenta la asistencia de la ROM BIOS de IBM (Basic Input/Output System), sistema bsico de entrada / salida que realiza una gran parte del trabajo necesario para el PC DOS. Muchas de las rutinas de utilidad que aparecen es este libro dependen de llamadas al PC DOS o a la ROM BIOS. En ambos casos, estas llamadas se consiguen mediante interrupciones software. En esta breve seccin se da un repaso al concepto de interrupcin Software y a como se materializa este concepto mediante el procesador 8088.

Una interrupcin es una llamada de atencin a la CPU, indicndole que debe prestar cuidado a algo ahora. Los mecanismos de interrupcin siempre han formado parte de los sistemas microprocesadores. Hasta el desarrollo del 80886 y el 8088, todas las interrupciones se realizaban mediante Hardware.

El funcionamiento de una interrupcin por hardware es el siguiente: una seal elctrica sobre una patilla de chip de la CPU provoca que la lgica interna de ste circuito guarde el contador de programas, los registros de indicadores y el registro de segmento de cdigo (CS). La CPU queda entonces libre para prestar servicio a la peticin recibida desde el exterior ejecutando una determinada seccin de cdigo independiente de la tarea que estaba llevando a cabo. Una vez satisfecha la peticin de servicio, la CPU recupera los registros grabados y continua con la tarea que haba dejado suspendida como si nada hubiera pasado.

Con la arquitectura de la familia 8086, Intel present el concepto de interrupcin por software. Este tipo de interrupciones funciona exactamente igual que las interrupciones por hardware. Excepto en que la condicin que dispara la peticin es una instruccin mquina (software) en vez de una seal elctrica sobre un corrector de la CPU (Hardware).

Exista un cierto numero de razones para adoptar esta filosofa. Ya que la nica diferencia es de las interrupciones por hardware y por software es la forma mediante la que se dispara la peticin, es posible comprar el servicio prestado por una interrupcin hardware antes de disponer del hardware que provoca dicha interrupcin, utilizando software para simular el dispositivo hardware externo del que se carece.

Una utilizacin mucho ms importante de las interrupciones software consiste en el diseo de un mecanismo de puntos de entrada estndar para un sistema software. Cuando se produce cualquier tipo de interrupcin, la CPU guarda primero los registros esenciales y despus realiza un gran salto a la posicin de la rutina de servicio de la interrupcin, que se encuentra en alguna parte de la memoria.

La forma en que la CPU localiza esta rutina de servicio de la interrupcin es crtica. Las 256 interrupciones de 8088 estn numeradas, del 0 al 255. Cuando se produce una interrupcin, la CPU debe recibir de alguna forma el nmero de la interrupcin requerida. Para interrupciones hardware, ste nmero procede de un circuito externo a la CPU: el controlador de prioridad de interrupcin software, el nmero de interrupcin que provoca la interrupcin. Por ejemplo: la instruccin del 8088 disparar la interrupcin software nmero $21.

Los primeros 1024 bytes del mapa de memoria del 8088 estn reservados para los vectores de interrupcin. Vectores que en este caso son punteros, precisamente son los que ocupan estos 1024 bytes de memoria. Cada una de las 256 interrupciones diferentes tiene su propia regin de 4 bytes dentro de ese bloque de memoria (256x4=1024). Esta regin de cuatro bytes contiene un puntero de 32 bits a la primera instruccin de la rutina de servicio de la interrupcin.

Los primeros 4 bytes del mapa de memoria del 8088 contienen el vector de la interrupcin 0. Los siguientes 4 bytes contienen el vector interrupcin 1 y as sucesivamente hasta llegar a 255. Evidentemente si la CPU conoce el nmero de la interrupcin, puede multiplicarlo por cuatro para saber inmediatamente la direccin de servicio de cualquier interrupcin que se produzca. Los dos primeros bytes del vector de interrupcin forman el valor del contador de programa para el comienzo de la rutina de servicio y los dos segundos bytes son el valor del segmento de cdigo en el que se encuentra dicha rutina de servicio. La CPU solamente necesita cargar el valor del segmento de cdigo en el registro CS y el valor del contador de programa en el registro correspondiente para poder empezar a ejecutar la rutina de servicio.

El hecho importante aqu es que el cdigo que pretenda utilizar una interrupcin software como rutina de servicio no necesita conocer en que parte de la memoria se encuentra dicha rutina. Solamente necesita el nmero de interrupcin. De hecho, la posicin real de la rutina de servicio puede cambiar a lo largo del tiempo, cuando sea modificada o ampliada. Mientras el cdigo de iniciacin del ordenador grabe los vectores de interrupcin correctos en las 1024 posiciones ms bajas de la memoria, las rutinas de servicio soportadas por interrupciones software pueden ser utilizadas por los programas de aplicacin desde cualquier punto rpida y fcilmente.

Esta es la filosofa de la ROM BIOS del IBM PC. El BIOS es una coleccin de rutinas de servicio soportadas por interrupciones software grabadas en una ROM (Read Only Memory) en la parte superior del espacio de direccionamiento de memoria del 8088. Los nmeros de interrupcin se asignan de acuerdo a la funcin general realizada por la rutina de servicio de la interrupcin. Por ejemplo, la interrupcin 166 ($10) controla los servicios de video del PC. La interrupcin 22 ($16) controla el acceso al teclado.

No todas las interrupciones software estn reservadas para su utilizacin por parte de la ROM BIOS. EL PC BIOS. EL PC DOS emplea unas pocas y la mayora de ellas no las utiliza el sistema. El controlador de ratn de Microsoft hace uso de una interrupcin software. De hecho, la mayora de los programas de gestin de perifricos las utilizan. El IBM PC, tal y como se le conoce habra sido imposible sin ellas.

Arranque del Sistema

Secuencia de Arranque del Procesador Despus de encender o resetear el PC, ste inicializa los bits necesarios de la cache, los buffers y los registros a un valor conocido. El procesador arranca en Modo-Real (ver [1] ). Se inicializan los registros EIP a 0000FFF0h y CS a F000h, lo que hace apuntar a una direccin base FFFF0000h.

De esta forma se comienza a ejecutar en la direccin FFFFFFF0h, a 16 bytes del lmite de la memoria fsica, en una EPROM. La EPROM est normalmente localizada en una direccin fsica mucho menor, pero se 'mapea' a una direccin mucho mayor por el chipset del sistema (por ejemplo el Intel 430HX).

Normalmente, en un PC, esta EPROM inicializa una IDT (Interrupt Descriptor Table) del Modo-Real, y salta a la rutina de la BIOS. Entonces comienza lo que denominamos secuencia de arranque:La BIOS realiza el POST (Power On Self Test), consistente en la inicializacin y comprobacin del hardware. Luego inicializa sus datos:

Tabla de interrupciones BIOS ( 10h-1Ah)

Zona de Datos BIOS (40h:0)

Despus comienza a buscar un sector de arranque. La secuencia de bsqueda ms usual (en el SETUP de la BIOS se puede configurar otra secuencia) es mirar primero en el 'floppy', en su primer sector. Si lo encuentra, lo carga en memoria y comienza a ejecutarlo. Si no lo encuentra en el 'floppy' lo intenta en el disco duro primario (su primer sector se conoce como MBR : Master Boot Record). Si lo encuentra lo carga y ejecuta. Si no lo encuentra sale con un error. (NOTA: La secuencia de arranque desde un disco duro suele ser algo distinta. El MBR se carga en la direccin 0000h:7C00h, que al ejecutarse, normalmente (no hay un estndar), mueve su cdigo a la direccin 0000h:0600h y sigue ejecutndose desde ah. Procede entonces a escanear la tabla de particiones buscando una que sea de arranque, para cargar su primer sector en la direccin 0000h:7C00h.)

Por lo tanto el sector de arranque debe colocarse en el Sector 1, cilindro 0 y cabeza 0 de la unidad desde la que se desea arrancar.

La BIOS carga el sector de arranque en la direccin de memoria 7C00h y comienza a ejecutarlo desde esa direccin. Para ello coloca los siguientes valores: CS = 0, EIP =7C00h. Adems en DL coloca un valor indicativo de la unidad desde la que se ha cargado el sector de arranque: 1h = floppy 1, 80h = disco duro primario.

El sector de arranque cargado por la BIOS toma el control. Puede hacer muchas cosas. Para nuestros propsitos bastara con inicializar lo que sea necesario , hacer comprobaciones y luego pasar el control al SOTR.

Este sector lo llamaremos cargador primario. Normalmente este cargador primario se encargara de mirar la tabla de particiones, buscando una que fuese ejecutable (con un SO).

La eleccin se puede hacer mediante un men en el caso de que hubiese varias. Una vez elegida la particin la carga en memoria, normalmente se trata de un cargador secundario, que ser el que cargue en memoria el kernel elegido. Si el kernel es mayor de 512k o 640k, deber pasar del modo real (donde se pueden usar las llamadas a la BIOS) al Modo-Protegido desde el cual se puede acceder a toda la memoria.

El Sector de Arranque

El sector de arranque o cargador primario, ser lo nico que necesitemos para poder pasar el control a nuestro SOTR.

Las caractersticas del sector de arranque son:

Tiene un tamao de 512 bytes

En la posicin 1FEh (510 en decimal) debe tener la palabra AA55h

Tambin debe tenerse en cuenta que la BIOS lo carga en la posicin de memoria 7C00h, de forma que a la hora de programarlo hay que tener cuidado con las referencias a memoria. En la prctica esto puede hacerse de varias formas:

Mediante la directiva del ensamblador ORG 7C00h (no vlido para GAS).

Inicializar los registros de segmento de forma que apunten al comienzo del sector

de arranque. En ensamblador:

(NOTA: Debe tenerse en cuenta que en Modo Real, se desplaza el registro correspondiente 4 bits a la izquierda antes de sumarlo al 'offset' para obtener la direccin fsica de memoria.)

mov ax,0x7C0 mov ds,ax mov es,ax mov fs,ax mov gs,ax

Usar la pila para igualar el registro DS al registro CS. En ensamblador: push cs pop ds

Sumar 7C00h a todas las referencias a memoria.

FUNCIONES DE LA BIOS

Las funciones de la BIOS se invocan, desde los programas de usuario, ejecutando una interrupcin software con un cierto valor inicial en los registros. La BIOS emplea un cierto rango de interrupciones, cada una encargada de una tarea especfica:

INT 10h:Servicios de Vdeo (texto y grficos). INT_10: STI ; Video bios services

CLD ; ...strings auto-increment

PUSH BP

PUSH ES

PUSH DS

PUSH SI

PUSH DI

PUSH DX

PUSH CX

PUSH BX

PUSH AX

MOV BX,40h

MOV DS,BX

MOV BL,DS:10h ; Get equipment

AND BL,30h

CMP BL,30h ; Check for monochrome card

MOV BX,0B800h

JNZ C_01 ; ...not there, BX --> CGA

MOV BX,0B000h ; Else BX --> MONO

INT 11h:Informe sobre la configuracin del equipo. INT_11: STI ; Equipment present

PUSH DS

MOV AX,40h

MOV DS,AX

MOV AX,DS:10h ; AX = equipment byte contents

POP DS

IRET

ENTRY 0F859h ; IBM entry for cassette int.

INT 12h:Informe sobre el tamao de la memoria convencional.INT_12: STI ; Kbytes of memory present

PUSH DS

MOV AX,40h

MOV DS,AX

MOV AX,DS:13h ; AX = memory size byte

POP DS

IRET

ENTRY 0F84Dh ; IBM entry for equipment check

INT 13h:Servicios de disco (muy elementales: pistas, sectores, etc.). INT_13: STI ; Floppy disk services

PUSH BP

PUSH SI

PUSH DI

PUSH DS

PUSH ES

PUSH BX

MOV DI,AX ; Request type in DI, for index

XOR AX,AX

MOV DS,AX

LES SI,DWord ptr DS:78h ; Get disk parameter table

MOV AX,40h

MOV DS,AX

MOV BX,5

MOV AX,ES:[BX+SI] ; Get (Gap Length, DTL) in AX

PUSH AX ; ...save it

DEC BX

DEC BX

MOV AX,ES:[BX+SI] ; Get (Bytes/sector,EOT) in AX

PUSH AX ; ...save it

XCHG CL,DH

XCHG DL,CL

PUSH DX ; Push (Head,Drive) swapped

PUSH CX

PUSH DI

MOV BP,SP ; Mark bottom of stack frame

ifdef SLOW_FLOPPY

CALL FD_SPD ; ...execute request lo speed

else

CALL FD_XQT ; ...execute at current speed

endif

MOV AH,ES:[SI+2] ; Get new motor count

MOV DS:40h,AH ; ...and save it

MOV AH,DS:41h ; Get completion status

CMP AH,1 ; ...check for write protect

CMC ; ...was write protect error

POP BX

POP CX

POP DX

XCHG DL,CL

XCHG CL,DH

POP BX ; Clean

POP BX ; ...up

POP BX ; ...stack

POP ES

POP DS

POP DI

POP SI

POP BP

RETF 2

INT 14h:Comunicaciones en serie. INT_14: STI ; Serial com. bios services

PUSH DS

PUSH DX

PUSH SI

PUSH DI

PUSH CX

PUSH BX

MOV BX,40h

MOV DS,BX

MOV DI,DX

MOV BX,DX

SHL BX,1

MOV DX,[BX] ; Get com i/o port number

OR DX,DX ; ...if it exists

JZ COM_ND ; ...none, exit

OR AH,AH ; Init on AH=0

JZ COMINI

DEC AH

JZ COMSND ; Send on AH=1

DEC AH

JZ COMGET ; Rcvd on AH=2

DEC AH

JZ COMSTS ; Stat on AH=3

INT 15h:Funciones casette (PC) y servicios especiales del sistema (AT). INT_15: STC ; Cassette service (error ret)

MOV AH,86h

RETF 2

ENTRY 0F85Fh ; IBM non-maskable int. entry

INT 16h:Servicios de teclado.INT_16: STI ; Keyboard bios services

PUSH DS

PUSH BX

MOV BX,40h

MOV DS,BX ; Load work segment

OR AH,AH

JZ KPD_RD ; Read keyboard buffer, AH=0

DEC AH

JZ KPD_WT ; Set Z if char ready, AH=1

DEC AH

JZ KPD_SH ; Return shift in AL , AH=2

INT 17h:Servicios de impresora. INT_17: STI ; Parallel printer services

PUSH DS

PUSH BX

PUSH CX

PUSH DX

MOV BX,40h

MOV DS,BX

MOV BX,DX ; DX is printer index (0 - 3)

SHL BX,1 ; ...word index

MOV DX,[BX+8] ; Load printer port

OR DX,DX

JZ LP_01 ; Goes to black hole

OR AH,AH

JZ LP_02 ; Function is print, AH=0

DEC AH

JZ LP_INI ; Function is init , AH=1

DEC AH

JZ LP_04 ; Get the status , AH=2

INT 18h:Llamar a la ROM del BASIC (slo mquinas IBM).INT 19h:Reinicializacin del sistema.INT_19: JMP IPL ; Warm boot

ENTRY 0E729h ; IBM entry point for INT 14h

BAUD DW 0417h ; 110 baud clock divisor

DW 0300h ; 150 baud clock divisor

DW 0180h ; 300 baud clock divisor

DW 00C0h ; 600 baud clock divisor

DW 0060h ; 1200 baud clock divisor

DW 0030h ; 2400 baud clock divisor

DW 0018h ; 4800 baud clock divisor

DW 000Ch ; 9600 baud clock divisor

INT 1Ah:Servicios horarios. INT_1A: STI ; User time_of_day bios service

PUSH DS

PUSH AX

MOV AX,40h

MOV DS,AX

POP AX ; Get request type

CLI ; ...freeze clock

OR AH,AH

JZ TD_01 ; Read time, AH=0

DEC AH

JNZ TD_02 ; ...invalid request

MOV DS:6Ch,DX ; Set time, AH=1

MOV DS:6Eh,CX ; ...set time hi

MOV Byte ptr DS:70h,0 ; ...not a new day

JMP SHORT TD_02

INT 1Fh:Apunta a la tabla de los caracteres ASCII 128-255 (8x8 puntos).

La mayora de las interrupciones se invocan solicitando una funcin determinada (que se indica en el registro AH al llamar) y se limitan a devolver un resultado en ciertos registros, realizando la tarea solicitada. En general, slo resultan modificados los registros que devuelven algo, aunque BP es corrompido en los servicios de vdeo de las mquinas ms obsoletas.

LA BIOS Y LOS DISQUETES.

Resulta interesante conocer el comportamiento de la BIOS en relacin a los disquetes, ya que las aplicaciones desarrolladas bajo DOS de una u otra manera habrn de cooperar con la BIOS por razones de compatibilidad (o al menos respetar ciertas especificaciones). El funcionamiento del disquete se controla a travs de funciones de la INT 13h, aunque esta interrupcin por lo general acaba llamando a la INT 40h que es quien realmente gestiona el disco en las BIOS modernas de AT. Las funciones soportadas por esta interrupcin son: reset del sistema de disco (reset del controlador de disquetes, envo del comando specify y recalibramiento del cabezal), consulta del estado del disco (obtener resultado de la ltima operacin), lectura, escritura y verificacin de sectores, formateo de pistas, obtencin de informacin del disco y las disqueteras, deteccin del cambio de disco, establecimiento del tipo de soporte para formateo... algunas de estas ltimas funciones no estn disponibles en las mquinas PC/XT. La BIOS se apoya en varias variables ubicadas en el segmento 40h de la memoria. Estas variables son las siguientes (para ms informacin, consultar el apndice al final del libro):

Byte40h:3Eh Estado de recalibramiento del disquete. Esta variable indica varias cosas: si se ha producido una interrupcin de disquete, o si es preciso recalibrar alguna disquetera debido a un reset anterior.

Byte40h:3Fh Estado de los motores. En esta variable se indica, adems del estado de los motores de las 4 posibles disqueteras (si estn encendidos o no), la ltima unidad que fue seleccionada y la operacin en curso sobre la misma.

Byte40h:40h Cuenta para la detencin del motor. Este byte es decrementado por la interrupcin peridica del temporizador; cuando llega a 0 todos los motores de las disqueteras (realmente, el nico que estaba girando) son detenidos. Dejar el motor girando unos segundos tras la ltima operacin evita tener que esperar a que el motor acelere antes de la siguiente (si esta llega poco despus).

Byte40h:41h Estado de la ltima operacin: se actualiza tras cada acceso al disco, indicando los errores producidos (0 = ninguno).

Bytes40h:42h A partir de esta direccin, 7 bytes almacenan el resultado de la ltima operacin de disquete o disco duro. Se trata de los 7 bytes que devuelve el NEC765 tras los principales comandos.

Byte40h:8Bh Control del soporte (AT). Esta variable almacena, entre otros, la ltima velocidad de transferencia seleccionada.

Byte40h:8Fh Informacin del controlador de disquete (AT). Se indica si la unidad soporta 80 cilindros (pues s, la verdad) y si soporta varias velocidades de transferencia.

Byte40h:90h Estado del soporte en la unidad A. Se indica la velocidad de transferencia a emplear en el disquete introducido en esta unidad, si precisa o no saltos dobles del cabezal (caso de los disquetes de 40 cilindros en unidades de 80), y el resultado de los intentos de la BIOS (la velocidad puede ser correcta o no, segn se haya logrado determinar el tipo de soporte).

Byte40h:91h Lo mismo que el byte anterior, pero para la unidad B.

Byte40h:92h Estado del soporte en la unidad A al inicio de la operacin.

Byte40h:93h Estado del soporte en la unidad B al inicio de la operacin.

Byte40h:94h Nmero de cilindro en curso en la unidad A.

Byte40h:95h Nmero de cilindro en curso en la unidad B.

Adems de estas variables, la BIOS utiliza tambin una tabla de parmetros apuntada por la INT 1Eh. Los valores para programar ciertas caractersticas del FDC segn el tipo de disco pueden variar, aunque algunos son comunes. Esta tabla determina las principales caractersticas de operacin del disco. Dicha tabla est inicialmente en la ROM, en la posicin 0F000h:0EFC7h de todas las BIOS compatibles (prcticamente el 100%), aunque el DOS suele desviarla a la RAM para poder actualizarla. El formato de la misma es:

byte0: Se corresponde con el byte 1 del comando 'Specify' del 765, que indica el step rate (el tiempo de acceso cilindro-cilindro, a menudo es 0Dh = 3 6 ms) y el head unload time (normalmente, 0Fh = 240 480 ms).

byte1: Es el byte 2 del comando 'Specify': los bits 7..1 indican el head load time (normalmente 01h = 2 4 ms) y el bit 0 suele estar a 0 para indicar modo DMA.

byte2: Tics de reloj (pulsos de la interrupcin 8) que transcurren tras el acceso hasta que se para el motor.

byte3: Bytes por sector (0=128, 1=256, 2=512, 3=1024).

byte4: Sectores por pista.

byte5: Longitud del GAP entre sectores (normalmente 2Ah en unidades de 5 y 1Bh en las de 3).

byte6: Longitud de sector (ignorado si el byte 3 no es 0).

byte7: Longitud del GAP 3 al formatear (80 en 5 y 3-DD, 84 en 5-HD y 108 en 3-HD).

byte8: Byte de relleno al formatear (normalmente 0F6h).

byte9: Tiempo de estabilizacin del cabezal en ms.

byte10: Tiempo de aceleracin del motor (en unidades de 1/8 de segundo).

El tiempo de estabilizacin del cabezal es el tiempo que hay que esperar tras mover el cabezal al cilindro adecuado, hasta que ste se asiente, con objeto de garantizar el xito de las operaciones futuras; esta breve pausa es establecida en 25 milisegundos en la BIOS del PC original, aunque otras BIOS y el propio DOS suelen bajarlo a 15. Del mismo modo, el tiempo de aceleracin del motor (byte 10) es el tiempo que se espera a que el motor adquiera la velocidad de rotacin correcta, nada ms ponerlo en marcha. En cualquier caso, es norma general intentar tres veces el acceso a disco (con resets de por medio) hasta considerar que un error es real. En general, pese a estos valores usuales, la flexibilidad del sistema de disco es extraordinaria y suele responder favorablemente con unos altsimos niveles de tolerancia en las temporizaciones. Una excepcin quiz la constituye el valor de GAP empleado al formatear, al ser un parmetro demasiado importante.

TABLA DE VARIABLES DE LA BIOS

La siguiente informacin procede del fichero MEMORY.LST de Robin Walker, incluido en el mismo paquete del INTERRUP.LST. La informacin est actualizada mayoritariamente al 24/8/92. Se han eliminado aspectos demasiado tcnicos sobre las tarjetas EGA/VGA y alguna informacin sobre hardware no estndar.

Las variables de la BIOS comienzan en el segmento de memoria 40h, justo despus de la tabla de vectores de interrupcin. Son empleadas por los programas de control ubicados en las memorias ROM del ordenador. En general, siempre es preferible utilizar una funcin de la BIOS que modificar directamente sus variables, aunque a veces ello no es posible o puede no resultar conveniente. Los campos colocados entre llaves ('{' y '}') no estn documentados por IBM y podran cambiar en el futuro. Los cdigos entre corchetes indican a qu mquinas o configuraciones, en exclusiva, se aplica la informacin.

Offset Tamao Descripcin 00h WORD Direccin E/S base del primer puerto serie (0 si no instalado) 02h WORD Direccin E/S base del segundo puerto serie (0 si no instalado) 04h WORD Direccin E/S base del tercer puerto serie (0 si no instalado) 06h WORD Direccin E/S base del cuarto puerto serie (0 si no instalado) Nota: Los campos de arriba son rellenados en estricto orden por

el programa POST de la BIOS que inicializa el sistema, sin

dejar huecos. Los puertos serie del DOS y de la BIOS pueden

redefinirse modificando estos campos.

08h WORD Direccin E/S base del primer puerto paralelo (0 si no instalado) 0Ah WORD Direccin E/S base del segundo puerto paralelo (0 si no instalado) 0Ch WORD Direccin E/S base del tercer puerto paralelo (0 si no instalado) 0Eh WORD [Mquinas no PS]: Direccin E/S base del cuarto puerto paralelo (0 si no instalado)

[Mquinas PS]: Segmento del rea de datos extendida de la BIOS

Nota: Los campos de arriba son rellenados en estricto orden por

el programa POST de la BIOS que inicializa el sistema, sin

dejar huecos. Los puertos paralelo del DOS y de la BIOS

pueden redefinirse modificando estos campos.

10h WORD Hardware instalado: bits 15-14: nmero de puertos paralelos

bit 13: [PC Convertible] = 1 si hay modem interno

bit 12: reservado

bits 11- 9: nmero de puertos serie

bit 8: reservado

bits 7- 6: nmero de disqueteras - 1

bits 5- 4: modo de vdeo inicial

00b = EGA,VGA,PGA

01b = 40 x 25 color

10b = 80 x 25 color

11b = 80 x 25 mono

bit 3: reservado

bit 2: [mquinas PS] = 1 si hay dispositivo apuntador

[mquinas no PS] reservado

bit 1: = 1 si hay coprocesador

bit 0: = 1 si hay disquete disponible para arrancar

12h BYTE [PC Convertible] estado del POST [AT] {Banderines de inicializacin de los test de fabricacin}

13h WORD Tamao de memoria convencional en kbytes (0-640) 15h BYTE [AT] {Usado en los test de fabricacin} 16h BYTE [AT] {Usado en los test de fabricacin} [PS/2 Mod 30] Banderines de control de la BIOS

17h BYTE Banderines de estado del teclado 1: bit 7 =1 INSert activo

bit 6 =1 Caps Lock activo

bit 5 =1 Num Lock activo

bit 4 =1 Scroll Lock activo

bit 3 =1 cualquier Alt pulsado

bit 2 =1 cualquier Ctrl pulsado

bit 1 =1 Shift izquierdo pulsado

bit 0 =1 Shift derecho pulsado

18h BYTE Banderines de estado del teclado 2: bit 7 = 1 INSert pulsado

bit 6 = 1 Caps Lock pulsado

bit 5 = 1 Num Lock pulsado

bit 4 = 1 Scroll Lock pulsado

bit 3 = 1 Estado de pausa activo

bit 2 = 1 Sys Req pulsada

bit 1 = 1 Alt izquierdo pulsado

bit 0 = 1 Ctrl izquierdo pulsado

19h BYTE Teclado: Area de trabajo para Alt-nnn (nnn=teclado numrico) 1Ah WORD Teclado: puntero al prximo carcter en el buffer 1Ch WORD Teclado: puntero a la primera entrada vaca en el buffer 1Eh 16 WORDs Buffer del teclado (cola circular, ver offsets 80h y 82h para moverlo) 3Eh BYTE Estado de recalibracin del disquete: bit 7 = 1 Se ha producido interrupcin hardware del disquete

bits 6-4 reservados

bit 3 = 1 Recalibrada disquetera 3

bit 2 = 1 Recalibrada disquetera 2

bit 1 = 1 Recalibrada disquetera 1

bit 0 = 1 Recalibrada disquetera 0

3Fh BYTE Estado del motor del disquete: bit 7 = 1 la operacin en curso es escritura o formateo

= 0 la operacin en curso es lectura o verificacin

bit 6 reservado

bits 5-4 nmero de disquetera seleccionada (0-3)

bit 3 = 1 motor de la disquetera 3 en marcha

bit 2 = 1 motor de la disquetera 2 en marcha

bit 1 = 1 motor de la disquetera 1 en marcha

bit 0 = 1 motor de la disquetera 0 en marcha

40h BYTE Contador de tics de reloj que faltan para parar motor de la disquetera 41h BYTE Estado de la ltima operacin de disco (0 = correcta) bit 7 = 1 unidad no preparada

bit 6 = 1 error de posicionamiento del cabezal

bit 5 = 1 fallo general del controlador

bits 4-0:

00h no hay error

01h solicitud incorrecta

02h no encontrada la marca de direcciones

03h error de proteccin contra escritura

04h sector no encontrado

06h lnea de disco cambiado activa

08h el DMA se ha desbordado

09h el DMA ha cruzado una frontera de 64k

0Ch medio fsico desconocido

10h fallo de CRC al leer

42h 7 BYTEs Bytes de estado/comandos de la Disquetera/Disco fijo 49h BYTE Modo de vdeo activo 4Ah WORD Nmero de columnas en pantalla 4Ch WORD Tamao del buffer de vdeo de la pgina activa en bytes 4Eh WORD Desplazamiento sobre la memoria de pantalla de la pgina activa 50h 16 BYTEs Posicin del cursor (columna, fila) para las 8 pginas 60h WORD Tipo de cursor, compatible 6845, byte alto=lnea inicial, bajo=final 62h BYTE Pgina activa 63h WORD Direccin E/S base del controlador de vdeo: color=03D4h, mono=03B4h 65h BYTE Valor actual del registro de seleccin de modo 03D8h/03B8h 66h BYTE Valor actual almacenado en el registro de paleta de la CGA 03D9h 67h DWORD Punto de retorno al modo real tras ciertos resets del POST 6Bh BYTE Ultima interrupcin no esperada por el POST 6Ch DWORD Tics de reloj (1/18,2 segundos) ocurridos desde medianoche 70h BYTE Flag de medianoche, 0 si el contador pasa de las 23:59:59.99 71h BYTE Bandern de Ctrl-Break: bit 7=1 72h WORD Bandern de reset del POST: = 1234h si no realizar chequeo de memoria (arranque caliente)

= 4321h [solo PS/2 MCA] si preservar la memoria al arrancar

= 5678h [PC Convertible] sistema detenido

= 9ABCh [PC Convertible] test de fabricacin

= ABCDh [PC Convertible] bucle del POST

= 64h modo Burn-in

74h BYTE Estado de la ltima operacin del disco fijo: {salvo unidades ESDI} 00h no hubo error

01h funcin solicitada incorrecta

02h no encontrada marca de direcciones

03h error de proteccin contra escritura

04h sector no encontrado

05h fallo en el reset

07h fallo en la actividad de los parmetros del disco

08h el DMA se ha desbordado

09h alineamiento de datos incorrecto para el DMA

0Ah detectado bandern de sector errneo

0Bh detectada pista errnea

0Dh nmero incorrecto de sectores para el formateo

0Eh detectada marca de direcciones de control

0Fh nivel de arbitrio del DMA fuera de rango

10h error ECC o CRC incorregible

11h error de datos ECC corregido

20h fallo general del controlador

40h fallo en el posicionamiento del cabezal

80h fuera de tiempo, no responde

AAh disco no preparado

BBh error indefinido

CCh fallo de escritura en el disco seleccionado

E0h el registro de errores es cero

FFh fallo de sentido

75h BYTE Disco fijo: nmero de discos fijos 76h BYTE Disco fijo: byte de control {IBM lo documenta slo en el XT} 77h BYTE Disco fijo: offset del puerto E/S {IBM lo documenta slo en el XT} 78h 3 BYTEs Contadores de time-out para los puertos paralelos 1-3 7Bh BYTE Contador time-out para puerto paralelo 4 [mquinas no PS] bit 5 = 1 si especificacin de DMA virtual soportada [PS] (ver INT 4B)

7Ch 4 BYTEs Contadores de time-out para los puertos serie 1-4 80h WORD Offset de inicio del buffer del teclado respecto al segmento 40h (normalmente 1Eh)

82h WORD Offset del fin del buffer del teclado+1 respecto al segmento 40h (normalmente 3Eh)

[La BIOS del XT con fecha 8/11/82 acaba aqu] 84h BYTE Vdeo: lneas en pantalla menos 1 en EGA/MCGA/VGA 85h WORD Video: altura del carcter, en pixels, en EGA/MCGA/VGA 87h BYTE Vdeo: control de EGA/VGA. bit 7: = 1 si no limpiar RAM (ver INT 10h, AH=0)

88h BYTE Vdeo: switches EGA/VGA [MCGA: reservado] 89h BYTE Vdeo: MCGA/VGA opcin de control del modo 8Ah BYTE Vdeo [MCGA/VGA]: ndice en tabla Cdigos de Combinaciones de Pantalla 8Bh BYTE Control del medio fsico del disco [no XT]: bits 7-6: Ultima tasa de transferencia fijada por el controlador:

00=500kbps, 01=300kbps, 10=250kbps, 11=1Mbps

bits 5-4: Ultimo step rate seleccionado en el disquete:

00-0Ch, 01=0Dh, 10=0Eh, 11=0Ah

bits 3-2: {Tasa de transferencia al inicio de la operacin}

bits 1-0: reservado

8Ch BYTE Estado del controlador del disco fijo [no XT] 8Dh BYTE Estado de error del controlador de disco fijo [no XT] 8Eh BYTE Control de interrupciones del disco fijo [no XT] 8Fh BYTE Informacin del controlador de disquete [no XT]: bit 7: reservado

bit 6: = 1 si disco 1 determinado

bit 5: = 1 si disco 1 es multi-ratio, vlido si disco determinado

bit 4: = 1 si disco 1 soporta 80 pistas, siempre vlido

bit 3: reservado

bit 2: = 1 si disco 0 determinado

bit 1: = 1 si disco 0 es multi-ratio, vlido si disco determinado

bit 0: = 1 si disco 0 soporta 80 pistas, siempre vlido

90h BYTE Estado fsico de la disquetera 0 91h BYTE Estado fsico de la disquetera 1 bits 7-6: tasa de transferencia a disquete: 00=500kbps, 01=300kbps,

10=250kbps, 11=1Mbps

bit 5: = 1 si doble salto de pista requerido (e.g. 360Kb en 1.2Mb)

bit 4: = 1 si superficie ya determinada

bit 3: reservado

bits 2-0: a la salida de la BIOS, contiene:

000 intentando 360Kb en 360Kb

001 intentado 360Kb en 1.2Mb

010 intentando 1.2MB en 1.2Mb

011 determinado 360Kb en 360Kb

100 determinado 360Kb en 1.2Mb

101 determinado 1.2Mb en 1.2Mb (contina en pg siguiente)

110 reservado

111 todos los dems formatos

92h BYTE Estado fsico de la disquetera 0 al inicio de la operacin 93h BYTE Estado fsico de la disquetera 1 al inicio de la operacin 94h BYTE Nmero de pista en curso de la disquetera 0 95h BYTE Nmero de pista en curso de la disquetera 1 96h BYTE Estado del teclado, byte 1 bit 7 = 1 proceso de lectura de ID en marcha

bit 6 = 1 el ltimo cdigo ledo fue el primero de dos cdigos ID

bit 5 = 1 forzar Num Lock si se lee el ID y es un teclado expandido

bit 4 = 1 teclado expandido instalado

bit 3 = 1 Alt derecho pulsado

bit 2 = 1 Ctrl derecho pulsado

bit 1 = 1 ltimo cdigo ledo fue E0h

bit 0 = 1 ltimo cdigo ledo fue E1h

97h BYTE Estado del teclado, byte 2 bit 7 = 1 error de transmisin del teclado

bit 6 = 1 actualizacin de LEDs en curso

bit 5 = 1 cdigo RESEND recibido del teclado

bit 4 = 1 cdigo ACK recibido del teclado

bit 3 reservado, debe ser cero

bit 2 LED de Caps Lock

bit 1 LED de Num Lock

bit 0 LED de Scroll Lock

98h DWORD Timer2: [AT, PS excepto Mod 30] puntero al bandern de espera de usuario completada (ver INT 15, AX=8300h)

9Ch DWORD Timer2: [AT, PS exc Mod 30] contador de espera del usuario (microseg.) A0h BYTE Timer2: [AT, PS exc Mod 30] bandern de espera activa: bit 7 = 1 tiempo de espera transcurrido

bits 6-1 reservados

bit 0 = 1 INT 15h, AH=86h ha sucedido

A1h 7 BYTEs Reservado para adaptadores de red local (ser verdad?) A4h DWORD [PS/2 Mod 30] Vector de la interrupcin del disco duro preservada A8h DWORD Video: En EGA/MCGA/VGA, puntero al Video Save Pointer Table ACh-AFh Reservados B0h BYTE (Phoenix 386 BIOS 1.10 10a) contador para retardo LOOP cuando se pita ante un buffer de teclado lleno

B0h DWORD Puntero al controlador de disco ptico 3363. B4h WORD Reservado B6h 3 BYTEs Reservado para el POST? B9h 7 BYTEs ??? C0h 14 BYTEs Reservado CEh WORD Cuenta de das desde el ltimo arranque??? D0h-EFh Reservado D0h-DCh Usado por Digiboard MV/4 F0h-FFh Reservado para el usuario100h BYTE Byte de estado de Print Screen10Eh BYTE Estado de BREAK al inicio de la ejecucin de BASICA.COM10Fh BYTE Bandern: 02h si BASICA v2.10 est ejecutndose116h DWORD INT 1Bh al inicio de la ejecucin de BASICA.COM11Ah DWORD INT 24h al inicio de la ejecucin de BASICA.COM

3.3.- TAMAOS Y TIEMPOS DE EJECUCIN DE LAS INSTRUCCIONESEn la tabla de esta pgina se listan las instrucciones del ensamblador por orden alfabtico, indicndose el nmero de bytes consumidos al ser ensambladas as como los tiempos tericos de ejecucin en 8088, 286, 386 y 486. Estos tiempos son tericos y no deberan ser utilizados para temporizaciones exactas. Por otra parte son diferentes de un procesador a otro. Los tiempos se expresan en estados de mquina (1 MHz equivale a 1.000.000 de estados o ciclos de reloj) estando la capacidad de ejecucin de instrucciones lgicamente en funcin de los MHz del equipo que se trate. Estos tiempos se aplican suponiendo que se cumplen las siguientes hiptesis:

La instruccin ya ha sido extrada de la memoria y decodificada.

Los datos, si los hay, estn alineados (a palabra o doble palabra).

No hay estados de espera en la placa principal del ordenador.

Nadie ha sustraido el control del bus a la CPU (el DMA no debe estar actuando y no han de producirse ciclos de refresco de la memoria).

No se produce ninguna interrupcin o excepcin durante la ejecucin.

Evidentemente, es casi imposible que los tiempos tericos sean los reales, teniendo en cuenta todos estos factores. Cuanto menos potente es la mquina, mucho ms lentos son los tiempos reales; por el contrario, en ordenadores con cach y procesador avanzado los tiempos efectivos pueden ser en ocasiones mejores que los tericos!. Por ejemplo, el 486 emplea ya la tecnologa pipeline, lo que le permite simultanear la ejecucin de una instruccin con la decodificacin de la siguiente y la lectura de memoria de la posterior as como almacenar el resultado de la anterior. Esto, con las lgicas limitaciones de un procesador CISC, permite en la prctica ejecutar un alto nmero de instrucciones en un solo ciclo (cada una de ellas, claro). Por tanto, para lo que s sirven las tablas es para decidir qu instrucciones emplear en ciertos procesos en que el tiempo de ejecucin o la memoria consumida son crticos, especialmente en las mquinas menos potentes. Como muestra de lo sumamente tericos que son estos tiempos, a continuacin se listan dos rutinas con las que he probado experimentalmente los tiempos de ejecucin en diversos microprocesadores. Ambas rutinas constan de un bucle que se repite cierto nmero de veces; mientras tanto las interrupciones estn inhibidas, por lo que se cronometran a mano:

Ciclos tericos

8088 286 386 486

RutinaA: CLI

MOV AX,1000h

bucle: XOR CX,CX 3 2 2 1

repite: LOOP repite 17 5 8+m 4 (m=2) 11+m (m=2) 6 2

DEC AX 2 2 2 1

JNZ bucle 16 4 7+m 3 (m=2) 7+m 3 (m=2) 3 1

STI

RutinaB: CLI

XOR CX,CX

bucle1: MOV AX,BX 2 2 2 1

bucle2: MOV AX,BX 2 2 2 1

... . . . .

bucle16384: MOV AX,BX 2 2 2 .

DEC CX 2 2 2 1

JNZ fin 16 4 7+m 3 7+m 3 (m=1) 3 1

JMP bucle1 15 7+m 7+m (m=2) 3

fin: STI

Por ejemplo, la rutina B ejecuta 16384 instrucciones del tipo MOV AX,BX (2 ciclos cada una) as como un decremento (2 ciclos) un salto que no se realiza -salvo al final del todo- (4 ciclos en 8088) y otro salto absoluto (15 ciclos en 8088). Se emplea este rodeo ya que los saltos condicionales, como conocer el lector, slo pueden desviar algo ms de 100 bytes el flujo del programa (y este bucle ocupa nada menos que 32 Kb). En total, 32787 ciclos que, repetidos 65536 veces, suponen2.148.728.832 ciclos. Con un 8088 corriendo a 8 MHz (8 millones de ciclos) cabra esperar una demora de 268,59 segundos. Sin embargo, mi reloj de pulsera dice que son nada menos que 1194!, unas 4,44 veces ms de lo que los tiempos tericos de Intel sugieren. De hecho, esto implica que cada MOV tarda casi 9 ciclos reales en un 8088, y no 2. Sin embargo, en el caso de la rutina A apenas hay diferencia entre el tiempo terico y el real: el tiempo que emplea la instruccin LOOP es bastante alto en comparacin con lo que se tarda en traer dicha instruccin de la memoria, por lo que la diferencia porcentual se reduce notablemente.

RUTINA A RUTINA B

Terico Efectivo Terico Efectivo

8088-4.77 956,71 1014,00 450,47 1946,00

V20-8 570,43 623,30 268,59 1194,00

286-12 223,70 254,00 179,02 188,25

386-25* 139,59 135,20 85,93 93,50

486-25* 64,42 75,50 42,96 69,10

(*) El 386 careca de memoria cach y el 486slo posea los 8 Kb de cach incluidos en el chip.

PAUTAS PARA INTERPRETAR LA TABLA DE INSTRUCCIONES.El 8088, bastante menos potente que el 286, vara enormemente la velocidad de ejecucin de las instrucciones en funcin del modo de direccionamiento, hay que aadir adems dos ciclos de reloj en este procesador cuando se usa un prefijo de registro de segmento. En la siguiente tabla se indica el nmero de ciclos de reloj adicionales que deben considerarse en el 8086/8088 para calcular la direccin de memoria efectiva (EA, Efective Address) en la tabla de tiempos, segn el tipo de direccionamiento:

Componentes Operandos valor EA

(a) Base o ndice [BX], [BP], [SI], [DI] 5

(b) Desplazamiento desp 6

(c1) Base + ndice [BX+SI], [BX+DI] 7

(c2) Base + ndice [BP+SI], [BP+DI] 8

(d) Desplaz.+ base/ndice [BX+desp], [BP+desp], [DI+desp], [SI+desp] 9

(e) Desplaz.+ base + ndice [BX+SI+desp], [BX+DI+desp] 11

Los datos entre parntesis en el 8088 indican el tiempo empleado por las palabras de 16 bits, fuera del parntesis hacen referencia a 8 bits (los 8086 y superiores no son ms lentos con datos de 16 que con los de 8 bits, siempre lgicamente que stos estn en una posicin de memoria par). Aunque el 286 y 386 no penalizan tanto los modos de direccionamiento complejos, a los tiempos marcados con (#) hay que aadir un ciclo si en el offset participan tres elementos (ej., BP+DI+desp). La letra {m} se refiere al nmero de bytes totales de la siguiente instruccin que se va a ejecutar. Cuando aparecen dos opciones en las instrucciones de salto condicional, el menor tiempo de ejecucin se verifica cuando el salto no se realiza. Todas las instrucciones especficas de 386 ocupan, bajo DOS, un byte ms de lo que indican las tablas debido a que se utiliza un prefijo para forzar el modo 32 bit en segmentos de 16. En los tiempos del 386, los datos entre parntesis se aplican cuando la CPU est en modo virtual 86; en general, los tiempos de ejecucin corresponden al modo real