Está en la página 1de 11

LA COMPUTADORA DIGITAL Las Unidades de Entrada / Salida Al final del captulo anterior debimos incorporar herramientas que nos

permitieron interactuar con la unidad operativa, ver los resultados y proveer datos. Estas herramientas fueron programas que llamamos a ejecucin mediante una instruccin que se representa con las letras INT y va acompaada por un nmero. Adems reconocimos que esos programas formaban parte del Sistema Operativo. Es interesante establecer ahora la diferencia entre la instruccin CALL y la instruccin INT. Tal como la hemos usado hasta ahora, ambas hacen lo mismo, llaman a un subprograma. Sin embargo la primera solamente guarda y posteriormente usa para su retorno, los contenidos de CS e IP, que como hemos establecido, son los registros que marcan la prxima instruccin. En cambio INT adems guarda y repone el registro de banderas. sta, es una diferencia sustancial, porque mientras mediante una llamada CALL podemos ejecutar un subprograma que comparte con nuestro programa principal, entre otras cosas, las banderas de estado, el uso de INT nos permite disponer de stas durante la ejecucin del subprograma, lo que nos otorga una libertad operativa tan grande, que puede considerarse que el subprograma llamado por INT XX se ejecuta en una mquina totalmente diferente a la que est soportando al programa principal, excepto la memoria, que obviamente est compartida. Veremos que esto tambin podr recibir un tratamiento especial y por supuesto veremos con ms detalle las banderas de estado. Lo anterior explica porque usamos en nuestro programa, CALL, para ir a los subprogramas, mientras que usamos INT para llamar a los programas que tenan que ver con las unidades de entrada / salida. En efecto las rutinas que permiten manejar las unidades de entrada / salida, los perifricos si lo prefiere, estn ntimamente ligadas a su constitucin fsica, por ello quin mejor puede escribir un programa para manejar el perifrico es el que lo construy. Ms an, toda unidad del tipo de la que estamos usando estn constituidas por software y hardware, qu es atendido por uno u otro, es motivo de diseo. Por supuesto el software que soporta al perifrico debe complementarse con el resto de los programas que constituyen el sistema operativo. Por ello quien fabrica un perifrico debe tener disponible todos los detalles que conforman el sistema operativo, al menos en todo lo referente al equipo provisto en cuestin. Pero qu es un perifrico para la unidad de proceso central? y cmo est constituida la unidad de proceso central? Recordemos la arquitectura de Von Neuman, los perifricos son las unidades de entrada / salida. Deca Von Neumam que la informacin (datos e instrucciones), deban ir desde las unidades de entrada a la unidad de almacenamiento y desde sta a las unidades de salida. De manera que si el almacenamiento est formado por registros que almacenan ceros y unos, los perifricos debern estar constituidos por registros que almacenen ceros y unos. La realizacin prctica de esta arquitectura requiere que el ingreso y el egreso respecto de la memoria se haga por un nico registro y de ste se canaliza a cada direccin bajo el arbitraje de la unidad de control. Cuando los circuitos integrados alcanzaron el nivel de integracin suficiente, se agruparon las unidades de la arquitectura de Von Neuman dejando a la unidad de control - junto al registro de entrada /salida a la memoria - y a la unidad aritmtica en un solo chip llamado Unidad de Proceso Central (CPU de acuerdo a la sigla en ingls).

Pgina 1 de 11

Para la CPU todos los perifricos son iguales y estn constituidos por registros. Algunos de estos registros sirven para almacenar informacin que enva la CPU y otros para almacenar informacin que debe enviarse a la CPU. Una forma interesante de visualizar a los perifricos es como dispositivos constituidos fsicamente de dos partes. Una est formada por un banco de registros para recibir y enviar comandos y datos. Otra por el resto de la unidad. Cuando decimos fsicamente, queremos establecer la diferencia frente al software, que a no dudarlo debe formar parte del perifrico. La ubicacin de cada una de estas dos partes fsicas es tema aparte. En efecto, el reloj de tiempo real est totalmente incorporado en la plaqueta principal de la mquina, normalmente llamada placa madre (mother board). Mientras que las unidades de disco estn formadas en general por dos partes, una placa que se conecta a la principal y una unidad auto soportada. Desde el punto de vista de su funcionamiento, sin embargo, poca importancia tiene las ubicaciones de los componentes, en cambio esta divisin entre registros y el resto, es fundamental para entender la interaccin entre la CPU y los perifricos. La CPU le informa a travs de algunos registros lo que desea que el perifrico haga, se informa de la marcha del proceso a travs otros registros y recibe los resultados a travs de otros. Por eso se habla de registros de entrada, registros de salida y registros de estado. La otra parte del perifrico est diseada para vigilar los contenidos de los registros que traen informacin desde la CPU y actuar de acuerdo a ello. Informa la marcha de proceso mediante los registros de estado y enva informacin mediante los registros de salida. En el captulo anterior hicimos uso de dos perifricos, la pantalla y el teclado. Si Ud. recuerda, para escribir un carcter ponamos en un registro de la CPU, el cdigo del smbolo; en otro, el comando que desebamos y finalmente llambamos a un programa que se comunicaba con la pantalla y lograba el objetivo. La descripcin de los detalles que permiten poner un carcter en pantalla a partir de su cdigo, escapa a los alcances que pretendemos que este libro tenga. Sin embargo todo el mecanismo que articula la conexin de la CPU y las unidades de entrada /salida puede ser ilustrada mediante la descripcin de una de estas unidades que permite la conexin de una diversidad de otros perifricos. Normalmente conocido como el puerto serie, este perifrico permite entregar y recibir bits uno detrs de otro. Resumiendo, un perifrico lo podemos considerar como formado de dos partes. Una exterior que se conecta al resto de las unidades de acuerdo a la propuesta de Von Neuman y otra interior que es la encargada de hacer las tareas que se supone el perifrico debe hacer. La parte interna cumple su cometido a partir de la informacin que recibe a travs de la conexin. En qu consiste esta conexin? En un conjunto de registros y los conductores que conectan estos registros a los otros componentes. La figura muestra los distintos componentes de la computadora interconectados.

C P U

Pgina 2 de 11

Los rectngulos son indistintamente perifricos o memoria. Dentro del rectngulo grande consideramos que estn la unidad de control y la unidad operativa. Las lneas gruesas representan el conjunto de conductores que interconectan las distintas unidades. Cada conjunto es llamado BUS, son tres: uno es el de los conductores que conectan los bits de datos, otro el de los bits que permiten el direccionamiento y otro el de los bits que permiten el control. Las lneas ms delgadas representan los conductores que van a cada unidad en particular, los que no necesariamente tienen que ser todos La memoria de las actuales PC permiten direccionar 4 Gigabytes, esto requiere 32 bits, otros 32 hacen falta para los datos y una cantidad grande para codificar las seales de control. Cuando se requiere recorrer cierta distancia entre los componentes tal cantidad de conductores resultan inapropiadas. En ese caso es conveniente utilizar solamente dos conductores. Pero el ingreso a la CPU debe hacerse, en el caso de los datos, al menos un byte por vez y lo mismo debe ocurrir con el egreso. Es aqu donde el puerto serie cumple su cometido. En la figura anterior podemos reconocer al puerto serie como una de las cajas conectadas a la CPU mediante los tres buses. A esa caja se llega al menos con tres cables, uno comn, uno de entrada y uno de salida. La descripcin que sigue es larga y compleja pero creemos que si Ud. tiene la perseverancia necesaria, va a entender como funciona esta unidad. Es importante? Ud. est familiarizado con el fenmeno Internet?. Bien, su computadora se comunica con Internet a travs de este puerto. El UART 8250 La unidad que realiza la serializacin de la informacin desde la computadora y que convierte a bytes la serie de bits que llegan a ella recibe el nombre de UART (sigla que resume la descripcin en ingles que significa: Receptor Transmisor Asincrnico Universal). El chip original se nombr como 8250 actualmente la unidad en uso es el 16450 o el 16550, las diferencias son mnimas de manera que usaremos las tablas descriptivas del 8250. Vamos a simplificar notablemente la descripcin del chip y sus registros, nos limitaremos a lo necesario para ilustrar el concepto rector de este libro: Una computadora es simplemente, un conjunto de registros en los que se almacena informacin en forma binaria y un conjunto de operaciones muy bsicas para mover y comparar esta informacin. La calidad de las prestaciones de la computadora pasa por la capacidad para escribir programas con estas operaciones bsicas. La unidad fue diseada para permitir la serializacin de palabras de diferente longitud, adems es posible agregar bits adicionales para control. Tambin el ritmo que van a seguir los bits al salir, que deber coincidir con el de ingreso es ajustable. La unidad puede: Transformar palabras de 5, 6, 7 y 8 bytes de largo Agregar bits de control de error (paridad) Agregar bits de control de comienzo y fin Regular la velocidad con que se transmiten los bits.

Debido a la variedad de valores que la unidad maneja, es necesario programar el chip antes de usarlo. La informacin llega a la unidad desde el lado de la CPU en forma de bytes y debe almacenarse en el chip para proceder a su conversin. La informacin que llega desde el exterior debe almacenarse para formar el byte. Pgina 3 de 11

Todo esto se hace por supuesto a travs de registros. A continuacin vamos a analizar un programa que transforma a la computadora en una unidad capaz de transmitir caracteres y presentar en la pantalla los caracteres recibidos. Este programa es la base sobre la que se apoya la HyperTerminal ofrecida por los sistemas Windows. Tal como hemos dicho, lo primero que debemos hacer es programar el chip para procesar la informacin de acuerdo a nuestras necesidades. En este caso hemos elegido 7 BITS DE DATOS 1 BIT INDICANDO PARIDAD IMPAR 1 BIT DE PARADA 1200 BAUDIOS DE VELOCIDAD Para conseguir esto debemos programar los registros de la unidad 8250. El apndice B muestra la informacin para poder programar el UART. Copiaremos la informacin a medida que la vayamos necesitando para confeccionar nuestro programa. Los cuatro prticos serie que pueden usarse en las PC estn ubicados a partir de las siguientes direcciones PUERTOS DISPONIBLES EN PC Puerto Direccin Interrupcin COM 1 3F8 IRQ4 COM 2 2F8 IRQ3 COM 3 3E8 IRQ4* COM 4 2E8 IRQ3* Todos los registros de cada 8250 se ordenan a partir de estas direcciones. La siguiente tabla muestra los registros listando su posicin relativa a esta direccin, el nombre, la funcin y en que se lo usa: REGISTROS DE LA UART Offset Nombre Funcin Uso Lectura/Escritura de 0* DATA Enviar y Recibir Datos Datos Registro que habilita Habilitar Tx, Rx, Rx Error, Interrupcin 1* IER interrupciones de Modem Registro de Id de ID de mayor prioridad de quien 2 IID Interrupcin interrumpe Registro Control de 3 LCR Parmetros de control de lnea y quiebre Lnea Registro Control de 4 MCR DTR, RTS, OUT1, OUT2 y loopback Modem Registro de Estado de Solo Lectura. 5 LSR Lnea Estado de Tx y Rx Registro de Estado de Solo Lectura. 6 MSR Modem CTS, DSR, RI, RLSD 0* DLL Divisor Latch LOW LSB. Divisor de Baudios 1* DLH Divisor Latch HIGH MSB

Pgina 4 de 11

Vamos a tomar por ejemplo COM1, de manera que al hacer referencia a cada registro en lugar de citar su desplazamiento citaremos la direccin que el registro tiene en COM1. Observe que los registros DATA e IER direcciones 3F8h y 3F9h tienen una llamada que explica que dependiendo del valor del ltimo bit (el bit 7) del registro LCR direccin 3FBh, estos registros tienen diferente funcin. Cuando el bit 7 de LCR vale 1 los registros que se direccionan son DLL y DLH. Estos registros guardan un nmero que ocupa dos bytes y que se usa para dividir el tiempo que separa a cada bit en el proceso de serializacin de acuerdo a la frecuencia en baudios elegida. Estos nmeros figuran en la siguiente tabla. Tabla De Velocidades (Bps) Bits Por Segundo Speed Divisor Divisor Latch Divisor Latch (BPS) (Dec) High Byte (DLH) Low Byte (DLL) 50 300 600 1200 2400 4800 9600 19200 38400 57600 115200 2304 384 192 96 48 24 12 6 3 2 1 09h 01h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 80h C0h 60h 30h 18h 0Ch 06h 03h 02h 01h

Los valores que corresponden a 1200 baudios son 00h para el byte alto y 60h para el bajo. Las siguientes instrucciones las primeras de nuestro programa, preparan al 8250 para que sea capaz de procesar la informacin que recibe o enva a esta velocidad. MOV MOV OUT DX,3FBH AL,80H DX,AL ;Estas tres direcciones ponen ;un 1 en el bit 7 de LCR, de manera ;de direccionar DLL y DLH

MOV MOV OUT MOV MOV OUT

DX,3F8H AL,60H DX,AL DX,3F9H AL,00H DX,AL

;Estas tres direcciones ponen 60 ;en DLL

;Y estas tres ponen 00 en DLH

Pgina 5 de 11

Observe que la direccin del registro es primero puesta en el registro DX, el valor a transmitir en el registro AL y luego mediante la instruccin OUT (salir) se deposita el valor en el registro correspondiente. A continuacin debemos poner las instrucciones para fijar la cantidad de bits y un bit de parada y paridad impar. La siguiente tabla muestra los valores que debemos poner en el registro LCR (3FBh) para nuestro caso. Si analiza con cuidado la informacin ver que el valor a pasar es: 00001010 LCR (Registro Control de Lnea) Propsito DLA (Bit de Acceso al Divisor Latch): 1 = Habilita el acceso a DLL y DLH (Offset 0* y 1*) Slo se usa para cambiar la velocidad, luego se vuelve a 0 0 = Habilita el acceso a DATA y IER (Offset 0* y 1*) Corta la transmisin. Enva SPACE hasta que el bit sea de nuevo colocado Control de paridad XX0 = Sin paridad 001 = Paridad impar 011 = Paridad par 101 = Poner bit de paridad en TRUE 111 = Poner bit de paridad en FALSE N de bits de parada enviados con cada carcter 0 = 1 bit de parada 1 = 1.5 bits si la longitud de la palabra es 5 bits, sino 2 bits de parada Longitud de la palabra (bits por carcter, sin incluir el primer bit, bits de paridad, y bits de parada, si los hubieran) 11 = 8 bits por caracter 10 = 7 bits por caracter 01 = 6 bits por caracter 00 = 5 bits por caracter

Bit 7 6

5,4,3

1,0

En efecto si queremos 7 bits los bits 0 y 1 deben estar en la relacin 10 mientras que el bit 2 debe estar en cero para un bit de parada y los bits 3,4 y 5 deben mostrar 001 para paridad impar; mientras que debemos poner el bit 7 a cero para poder acceder a los registro de entrada salida en 3F8h y 3F9h respectivamente, al tiempo que anulamos con el bit 6 a cero la operacin BREAK. MOV MOV OUT DX,3FBH AL,0AH DX,AL ;Estas tres instrucciones cumplen esa tarea

El prtico serie tiene una serie de conexiones adicionales que le permiten conectarse a travs de un modem (una unidad que describiremos ms adelante) al sistema telefnico. La informacin necesaria para esto debe cargarse en el registro de control de modem MCR direccin 3FCh. La siguiente tabla indica los valores que debe colocarse en tal registro.

Pgina 6 de 11

Bit 4 3 2 1 0

MCR (Registro Control de Modem) Seal Modo Loopback. Se usa para testear el puerto (OUT2) Salida 2 (OUT1) Salida 1 RTS (Ready to Send) Listo para enviar DTR (Data Transmit Ready) Se transmiti bien

De todas estas seales nuestro inters se centra en el modo loopback. Con un uno puesto en este bit, la salida y la entrada se conectarn entre s permitiendo ver lo que tecleamos, de paso colocaremos en uno el bit 0 y 1 lo que nos colocarn en alto los terminales Ready To Send y Data Terminal Ready. MOV MOV OUT DX,3FCH AL,13H DX,AL ;stas tres instrucciones cumplen con esto

Todos los perifricos estn dotados de la capacidad de anunciar a la CPU que desean transmitir o recibir algo. Esto lo ejecutan a travs del mecanismo de interrupcin, tema al que le dedicaremos mucha atencin. Sin embargo para el presente trabajo deshabilitaremos todas las interrupciones. IER - Interrupt Enable Register
Hay 4 fuentes de interrupcin en el 8250 que pueden ser habilitadas colocando en 1 el correspondiente bit del IER. Estas 4 fuentes son excluyentes entre s y manejan el pin de interrupcin del chip. Las fuentes son las siguientes:

IER (Registro que habilita Interrupciones) Bit Propsito Motivo de Interrupcin Datos de Recepcin Se recibi un carcter 0 THRE No hay espacio para otro carcter que se enviar 1 Estado Rx PE, FE, overrun y/o BREAK 2 3 Estado Modem Cambio en estados de CTS, DSR, RI o DCD Sin Uso 4,5,6,7 0 Con esto hemos completado la inicializacin del 8250 sobre la ejecucin de la ltima instruccin el chip se queda en alerta. Si en la patita correspondiente del conector que describiremos enseguida; se hace presente un cambio de seal por haber llegado un carcter; el chip procesar la seal y almacenar en el registro DATA el dato llegado. Conviene para poder entender lo que sigue manejar los tiempos que requieren las distintas tareas. A 1200 baudios el tiempo necesario para recibir 10bits (7 de datos, 1 de paridad, 1 de arranque, 1 de parada) es de 8,333.. milisegundos. Una instruccin como MOV puede llevar un pulso de reloj a 200KHZ esto significa que demora 5 microsegundos. Es decir la relacin es que la instruccin MOV se ejecuta 1666,666.. veces ms rpido que el tiempo que se tarda en montar un byte. El valor 1000 significa en escala humana tomando como unidad el da, 3 aos (un ao tiene 365 das) de manera que hemos tardado 12 das en preparar el chip y cuando aparezca un carcter a ste le va a llevar 5 aos armar el byte y nos va a esperar 6 meses (la duracin del bit de parada) en el peor caso, que es cuando un carcter llega a continuacin de otro sin solucin de continuidad, para que procesemos el dato; leerlo y trabajar con el. Por lo tanto el programa que sigue puede manejar sin mayores problemas el ingreso y egreso de datos. Pgina 7 de 11

El siguiente grupo de instrucciones se ejecuta en forma interrumpida de all el nombre de PORSIEMPRE que hemos puesto al lado de la primera instruccin porque todava no sabemos que lugar ocupar en memoria. La primera instruccin lee el registro de estado de lnea LSR direccin 3FDh Bit 6 5 4 3 2 1 0 LSR (Registro de Estado de Lnea) Nombre Propsito TSE (Tx Shift Register Empty) Se ha enviado un carcter THRE (Tx Holding Register Un carcter puede ser escrito en Tx holding Empty) register (y ser eventualmente enviado) Break received Corte Recibido FE (Framing Error) N incorrecto de bit de datos recibidos PE (Parity Error) Paridad Incorrecta OE (Overrun Error) Los datos recibidos antes de RBR fueron ledos desde un carcter anterior Rx Data Ready Un carcter ha sido ledo y est disponible por el software en RBR

De la tabla se puede ver que los bits 1 2 3 y4 indican que hay una situacin no normal presente. En otras palabras si alguno de estos bits vale 1 se ha producido un error, de manera que leemos mediante la siguiente instruccin el contenido de este registro, para luego compararlo mediante la instruccin TEST con 1Eh. El resultado de esta prueba ser 0 slo si todos los bits nombrados que forman justamente el nmero hexadecimal 1Eh son 0 sino el valor ser diferente de cero. Puede que le llame la atencin esta instruccin que no es ni una suma ni una resta. Se trata de una operacin que compara uno a uno cada bit del registro indicado en primer trmino con los bits del valor indicado en segundo lugar. Para cada coincidencia en uno el resultado es uno, sino el valor es cero. La instruccin JNZ nos lleva a una rutina que acta en caso de error, sino se ejecuta la prxima instruccin. PORSIEMPRE MOV IN TEST JNZ DX,3FDH AL,DX AL,1EH ERROR

Si no ha habido error chequeamos el primer bit (el bit 0 del mismo registro) que como podemos leer en la tabla indica que hay un carcter recibido. Si el bit est debemos procesar el byte recibido, esto es presentarlo en pantalla, pero como todava no hemos escrito esta parte del programa, no sabemos dnde va a estar, por eso ahora indicamos esto en forma provisoria como RECIBIR

TEST JNZ

AL,01H RECIBIR

Si no hay todava un carcter que procesar podemos seguir con la otra tarea que debemos realizar esto es mandar las teclas que se pulsen. Lo primero que debemos preguntar es esta disponible el registro para depositar los bytes a transmitir? El Holding Register Empty (THRE) esto lo sabemos investigando el bit 5 del mismo registro que estamos usando (ver tabla).

Pgina 8 de 11

Si no est vaco el registro significa que todava se est procesando el carcter anterior, en el caso actual por ser la primera vez estar a no dudarlo, vaco, de manera que procesaremos la instruccin que sigue a JZ. Sino deberemos volver a la instruccin que est en la posicin PORSIEMPRE TEST JZ AL,20H PORSIEMPRE

Ahora debiramos mandar afuera el carcter que representa la tecla pulsada si es que se puls alguna. Esto significa que debemos entendernos con otro perifrico, debemos entendernos con el teclado. Es decir debemos buscar una hoja de datos donde estn indicados los registros que tiene la unidad que procesa las teclas y hacer exactamente lo que hemos hecho hasta ahora con el 8250, con el 68HC705J1A y sus chips asociados si esta fuera la unidad que manejara el teclado. Pero ahora vamos a cambiar de estrategia, vamos a preguntar alguien habr resumido esta tarea en un programa que yo pueda usar?, la repuesta es s. En la ROMBIOS acompaando a la PC viene un programa que puedo llamar mediante la instruccin INT 16h que pone a funcionar todo lo referente al teclado. Por ejemplo si quiero saber si hay una tecla pulsada. Cargo 01h en AL y llamo INT 16, si no hay una tecla pulsada, la bandera de cero es puesta en 1 y habr que ir a PORSIEMPRE pero si hay una tecla pulsada debemos leerla , lo que hacemos pasando en AH 00h al INT 16. MOV INT JZ MOV INT AH,1 16H PORSIEMPRE AH,0 16H

Ahora debemos mandar el carcter que INT 16 nos lo ha devuelto en AL, a el UART para sacarlo afuera, para ello lo mandamos al registro DATA direccin 3F8h y luego volvemos al bucle infinito MOV OUT JMP DX,3F8H DX,AL PORSIEMPRE

Observe que la instruccin que vuelve al bucle es un JMP, por lo tanto la instruccin que sigue no necesariamente debe estar relacionada con el programa. De manera que la podemos usar para escribir la rutina que debe presentar el carcter en la pantalla, se acuerda, aquella que como no sabamos adonde iba a estar, le pusimos ESCRIBIR. Observe que el registro que usamos para recibir tiene la misma direccin que el qu usamos para enviar, sin embargo en uno escribimos y en el otro leemos de manera que son activados por separado (son dos registros diferentes). Si le cuesta visualizar esto piense que en su casa tiene dos buzones, uno mira hacia adentro y otro hacia fuera. RECIBIR: MOV IN AND PUSH DX,3F8H AL,DX AL,7FH AX

La instruccin AND hace lo mismo que TEST en realidad TEST hace lo mismo que AND, es decir AND (Y en ingles) comparara los bits de los dos operando, uno a uno si ambos son justamente 1 el

Pgina 9 de 11

resultado que queda en el registro destino es un uno, si uno de los bits es cero el resultado es cero. TEST no deposita el resultado slo controla que al menos haya un resultado 1 y pone la bandera. Pero para que est AND?, para borrar el bit 7 porque no lo usamos. PUSH guarda en un lugar de memoria llamada PILA el valor que est en AX. Corresponde ahora presentar el carcter en la pantalla. Ud ya sabe de esto verdad?. El INT 10h con el servicio 14 nos va a poner el carcter en pantalla. MOV MOV INT BX,0 AH,0E 10H

No est dems enfatizar que si no estuviese INT 10h, deberamos programar registro por registro la operacin del perifrico, pantalla. Se capta el mensaje? Se entiende la importancia de los componentes que forman el sistema operativo? Se entiende qu es un sistema operativo? Se habr pulsado un retorno de carro (viejo Investiguemos: POP CMP JNZ anacronismo de las mquinas de escribir)?.

AX AL,0DH PORSIEMPRE

Para ello traemos el valor que est en memoria (en la pila) mediante POP la comparamos (CMP) con el cdigo 13 en ASCII (0Dh) y si es el caso debemos avanzar una lnea, cdigo 10 (0Ah) MOV MOV MOV INT JMP AL,0AH BX,0 AH,0E 10H PORSIEMPRE

Finalmente vamos a manejar el error. Hemos elegido una forma muy simple. Si hay un error presentamos el signo?. ERROR: MOV IN MOV MOV MOV INT JMP DX,3F8H AL,DX AL,A8 BX,0 AH,0E 10H PORSIEMPRE

Bien ahora lo que hay que hacer es juntar todo lo escrito en un solo conjunto y reemplazar los nombres como PORSIEMPRE O ERROR por las direcciones correctas. Ud. se estar preguntando si habrn programas que se ocupen de ello y la respuestas es, S, por supuesto, de eso se trata, para poder realizar cosas tiles con la computadora es necesario recurrir al software. De hecho al comienzo as se llamaban los programas que ayudaban a operar la mquina durante mucho tiempo las computadoras funcionaron sin SSOO, usando el software los programas que ayudaban a operar la computadora y los programas de usuarios. Pgina 10 de 11

Pero recurrir a ese software nos llevara a tener que explicar una gran cantidad de cosas que sin ser difciles, no forman parte de lo que queremos destacar en este libro. De manera que le sugiero que haga lo que yo he hecho para juntar todos los tramos de este programa. Recorra el texto y copie en un archivo separado los distintos tramos. Luego usando ese archivo como referencia cuide de rescribir mediante el comando A todas las instrucciones sin cometer errores. Reemplace provisoriamente las direcciones referidas con nombres y luego corrija de acuerdo al listado final. Si todo est en armona los desplazamientos 124, 144 y 162 deben corresponder a PORSIEMPRE, RECIBIR y ERROR, respectivamente. En el apndice B figura el listado que obtuvimos de nuestro equipo. Si Ud. ahora cierra el debug (recuerde de poner en CX, 71, los bytes que ocupa el programa y dar la orden W), y siempre que no tenga nada conectado al prtico COM1, simplemente poniendo terminal, ver que en la pantalla le aparecen los caracteres que Ud. teclea. Si solamente obtiene signos , en forma ininterrumpida, detenga la mquina y vuelva a arrancarla. Si an sigue el problema y su sistema operativo lo permite rearranque la mquina en el modo MSDOS. Si tiene conectado algo a COM1 y siga el procedimiento que describimos en le prximo captulo usando un disquete. El programa recuerde fue escrito para que se produjese el eco automtico. Si modificamos la carga que hacemos en la direccin 3FC y en lugar de mandar 13H mandamos 3H, veremos que no se presentan en pantalla los caracteres que se teclean, pero si Ud. conecta entre los contactos 2y3 del conector de COM1 un cable ver que vuelven a aparecer los caracteres. Ahora, en forma fsica los caracteres que se envan por la patita 2 se reciben por la patita 3. En el apndice C encontrar informacin que le permitir realizar con xito esta experiencia.

Pgina 11 de 11

También podría gustarte