lunes, 12 de marzo de 2007

Reseña del desarrollo de la computación

Blaise Pascal (1623-1662). En 1642 inventa la máquina de engranajes. A medida que iban girando los engranajes se producían los cálculos. Una máquina que necesitaba energía para funcionar. Leibniz (1646-1716). En 1694 inventa la calculadora que usa el sistema binario.

Josep Jacquard (1752-1834). Máquina de tarjetas perforadas. Fue el antecesor de Hollerith.

1ª Generación (1938-1952, 56)

Máquinas basadas en válvulas al vacío. ENIAC (Eckert-Mauchly) primer computador. En 1947 se construyó en la Universidad de Pennsylvania la ENIAC (Electronic Numerical Integrator and Calculator) que fue la primera computadora electrónica. El equipo de diseño lo encabezaron los ingenieros John Mauchly y John Eckert. Esta máquina ocupaba todo un sótano de la Universidad (un cuarto de 6 x 12 mts), tenía más de 18 000 tubos de vacío, 70 mil resistencias. 7500 interruptores, su sistema de trabajo lo constituían 20 registros de 10 dígito, consumía 200 kW de energía eléctrica y requería todo un sistema de aire acondicionado, pero tenía la capacidad de realizar cinco mil operaciones aritméticasen un segundo.

2ª Generación (1953-1962, 63)

En esta generación las computadoras se reducen de tamaño y son de menor costo. Aparecen muchas compañías y las computadoras eran bastante avanzadas para su época como la serie 5000 de Burroughs y la ATLAS de la Universidad de Manchester. La segunda generación surge cuando se sustituye la válvula al vacío por el transistor. Se corresponde con la aparición de los primeros ordenadores comerciales. Estos ordenadores ya permitían interpretar instrucciones escritas en lenguaje de programación como Cobol o Fortrán.

3ª Generación (1963-1971)

Con los progresos de la electrónica y los avances de la comunicación con las computadoras en la década de los 60, surge la tercera generación de las computadoras. Se inaugura con la IBM 360 en abril de 1964. La tercera generación va de 1964 a 1971 y se caracterizó por la utilización del circuito integrado como soporte de la información. Esto permitió abaratar los costos, reducir el tamaño de los ordenadores y aumentar sus prestaciones. Paralelamente se mejoraron los lenguajes de programación y empezaron a aparecer programas comerciales. IBM 360, el primer computador basado en circuitos integrados: 760. Aguantaban 20 terminales y podían encenderse varias veces al día.

Compatibilidad . La IBM, dice a sus clientes que los programas antiguos correrán en los nuevos modelos. Las empresas que compiten con la IBM, recibieron las características estándard, de sus equipos para satisfacer al mercado. PDP-, PDP-11, de DEC, Modelos de Compatibilidad, supercomputadoras CDC7600 (1969). Ferrita por circuitos integrados para la memoria del computador. Programas que aparecen: Basic y Pascal.

4ª Generación (1972-1987)

Con la aparición del microprocesador que es la integración de todos los elementos básicos del ordenador en un solo circuito integrado surge la cuarta generación. Esta época se caracteriza por la mejora sustancial de los periféricos así como la aparición de lenguajes y herramientas informáticas. Aquí nacen las computadoras personales que han adquirido proporciones enormes y que han influido en la sociedad en general sobre la llamada "Revolución Informática" .

En 1976 Steve Wozniak y Steve Jobs inventan la primera microcomputadora de uso masivo y más tarde forman la compañía conocida como la Apple que fue la segunda compañía más grande del mundo, antecedida tan solo por IBM; y esta por su parte es aún de las cinco compañías más grandes del mundo. En 1981 se vendieron 800 000 computadoras personales, al siguiente año la cifra aumentó a 1 400 000. Entre 1984 y 1987 se vendieron alrededor de 60 millones de computadoras personales, por lo que no quedan dudas que su impacto y penetración han sido enormes. Con el surgimiento de las computadoras personales, el software y los sistemas que con ellas se manejan han tenido un considerable avance, porque han hecho más interactiva la comunicación con el usuario. Surgen otras aplicaciones como los procesadores de palabra, las hojas electrónicas de cálculo, paquetes gráficos, etc. También las industrias del Software de las computadoras personales crecen con gran rapidez. Gary Kildall y William Gates se dedicaron durante años a la creación de sistemas operativos y métodos para lograr una utilización sencilla de las microcomputadoras (son los creadores de CP/M y de los productos de Microsoft). No todo son microcomputadoras, por su puesto, las minicomputadoras y los grandes sistemascontinúan en desarrollo. De hecho las máquinas pequeñas rebasaban por mucho la capacidad de los grandes sistemas de 10 o 15 años antes, que requerían de instalaciones costosas y especiales, pero sería equivocado suponer que las grandes computadoras han desaparecido; por el contrario, su presencia era ya ineludible en prácticamente todas las esferas de control gubernamental, militar y de la gran industria. Las enormes computadoras de las series CDC, CRAY, Hitachi o IBM por ejemplo, eran capaces de atender a varios cientos de millones de operaciones por segundo.

5ª Generación (1981 - ?)

De 1981 hasta nuestros días se habla de la quinta generación que además de continuar el desmedido avance electrónico, se presta mucha mayor atención al software para acercar el ordenador a la forma de comunicación natural de un sujeto humano. Además en esta época aparece un tipo de ordenador que va a revolucionar el concepto de la informática, el PC ( P ersonal C omputer). En vista de la acelerada marcha de la microelectrónica, la sociedad industrial se ha dado a la tarea de poner también a esa altura el desarrollo del software y los sistemas con que se manejan las computadoras.

Surge la competencia internacional por el dominio del mercado de la -computación, en la que se perfilan dos líderes que, sin embargo, no han podido alcanzar el nivel que se desea: la capacidad de comunicarse con la computadora en un lenguaje más cotidiano y no a través de códigos o lenguajes de control especializados. Japón lanzó en 1983 el llamado "programa de la quinta generación de computadoras", con los objetivos explícitos de producir máquinas con innovaciones reales en los criterios mencionados. Y en los Estados Unidos ya está en actividad un programa en desarrollo que persigue objetivos semejantes, que pueden resumirse de la siguiente manera: · Procesamiento en paralelo mediante arquitectura y diseños especiales y circuitos de gran velocidad. · Manejo de lenguaje natural y sistemas de inteligencia artificial. El futuro previsible de la computación es muy interesante, y se puede esperar que esta ciencia siga siendo objeto de atención prioritaria de gobiernos y de la sociedad en conjunto.

Continuar leyendo

La fibra óptica

Para navegar por la red mundial de redes, Internet, no sólo se necesitan un computador, un módem y algunos programas, sino también una gran dosis de paciencia. El ciberespacio es un mundo lento hasta el desespero. Un usuario puede pasar varios minutos esperando a que se cargue una página o varias horas tratando de  bajar un programa de la Red a su PC.

Esto se debe a que las líneas telefónicas, el medio que utiliza la mayoría de los 50 millones de usuarios para conectarse a Internet, no fueron creadas para transportar vídeos, gráficas, textos y todos los demás elementos que viajan de un lado a otro en la Red.

Pero las líneas telefónicas no son la única vía hacia el ciberespacio. Recientemente un servicio permite conectarse a Internet a través de la fibra óptica.

UN POCO DE TEORÍA

Los circuitos de fibra óptica son filamentos de vidrio (compuestos de cristales naturales) o plástico (cristales artificiales), del espesor de un pelo. Llevan mensajes en forma de haces de luz que realmente pasan a través de ellos de un extremo a otro, donde quiera que el filamento vaya (incluyendo curvas y esquinas) sin interrupción.

Las fibras ópticas pueden ahora usarse como los alambres de cobre convencionales, tanto en pequeños ambientes autónomos (tales como sistemas de procesamiento de datos de aviones), como en grandes redes geográficas (como los sistemas de largas líneas urbanas mantenidos por compañías telefónicas).

ORIGEN Y EVOLUCIÓN

El concepto de las comunicaciones por ondas luminosas ha sido conocido por muchos años. sin embargo, no fue hasta mediados de los años setenta que se publicaron los resultados del trabajo teórico. Estos indicaban que era posible confiar un haz luminoso en una fibra transparente flexible y proveer así un análogo óptico de la señalización por alambres electrónicamente.

El problema técnico que se había de resolver para el avance de la fibra óptica residía en las fibras mismas, que absorbían luz que dificultaba el proceso. para la comunicación práctica, la fibra óptica debe transmitir señales luminosas detestables por muchos kilómetros. El vidrio ordinario tiene un haz luminoso de pocos metros. Se han desarrollado nuevos vidrios muy puros con transparencias mucho mayores que la del vidrio ordinario.

 Estos vidrios empezaron a producirse a principios de los setenta. Este gran avance dio ímpetu a la industria de fibras ópticas. Se usaron láseres o diodos emisores de luz como fuente luminosa en los cables de fibras ópticas. Ambos han de ser miniaturizados para componentes de sistemas fibro-ópticos, lo que ha exigido considerable labor de investigación y desarrollo. Los láseres generan luz "coherente" intensa que permanece en un camino sumamente estrecho.

Los diodos emiten luz "incoherente" que ni es fuerte ni concentrada. Lo que se debe usar depende de los requisitos técnicos para diseñar el circuito de fibras ópticas dado.

Continuar leyendo

Firefox

Para los que no sepan qué es Firefox les diremos que es un navegador "alternativo" al Explorer de Microsoft y que es un nieto del que en su dia fué el navegador más utilizado en la red, el "Navigator" de Netscape.

La noticia es que recientemente se ha liberado la primera versión "estable" de este navegador, la 1.0 que además se encuentra totalmente traducida al español, al contrario que la versión que le precede, la 0.9.

A decir verdad, las diferencias entre la versión 0.9 y la 1.0 no son demasiadas, por lo que el revuelo ocasionado con la presentación de esta última es únicamente achacable a que, por fin, Firefox se ha posicionado como una alternativa "seria" al monopolio de Microsoft, después de que la anterior versión batiera records en cuanto a número de descargas.

Animamos a todos y todas a que os descargueis este estupendo navegador y a que lo utiliceis como vuestro navegador predeterminado. Nuestra experiencia al respecto es muy positiva y son pocos los problemas que se nos presentarán.

Sin embargo no queremos engañar a nadie y por desgracia, todo este periodo de tiempo en el que se ha considerado a Explorer como el único navegador existente ha generado una situación de "dependencia" que puede provocar algunas dificultades en determinados sitios web.

Entonces ¿porqué deberiamos instalarnos todos este navegador? Por muchos y diversos motivos...

Por un lado para evitar que una empresa monopolice un aspecto de nuestra vida tan importante como la propia Internet.

Pero incluso yendo a un terreno más práctico podremos encontrar amplias razones. La mayor parte de software "maligno" que circula por Internet, tal como "spyware" o "adware" se basan en agujeros de seguridad o en funcionalidades propias del navegador de Microsoft y sus consecuencias probablemente todos las hemos sufrido, como el "secuestro" de la pagina de inicio o la repentina aparición de todo tipo de "barras" de navegación que terminan por llenar la pantalla y que se dedican a informar puntualmente a "vete a saber quien" de todas y cada una de las páginas por las que transitamos...

Otro de los puntos a favor de Firefox son las "pestañas", que permiten cambiar de forma rápida e intuitiva entre varias páginas web.

Por último, sólo recordar que Firefox, al igual que el resto de proyectos de Mozilla, es de código abierto, y por tanto está desarrolado de forma desinteresada por programadores de la comunidad "open source" y se puede descargar de forma totalmente gratuita, existiendo versiones tanto para Windows como para Linux o Mac OS X.

Continuar leyendo

El empujón

E.T.

Un buen estudiante de la computación y todas estas cuestiones del Hacking, Cracking, Carding y demás cuestiones no ha tenido alguna vez en sus manos un número de las 500 Ezines, quien no ha oído hablar sobre Kevin Mitnick, quien que se precie de saber computación no ha visto “Los piratas del valle de silicona”, pero, mi punto es, ¿son ellos genios?. Indudablemente muchos afirmaran a esta pregunta, y yo no discrepo, pero, no son genios solamente porque nacieron en momentos históricos precisos, o porque tenían dinero y podían hacer lo que quisieran, o porque …

NOOOOOOO!!!

Son Genios porque pasaron horas y horas delante de un PC, indagando, averiguando, sacándoles hasta el último centavo que les costo. Son genios porque pasaron horas tratando de saber como es que la PC se conecta a la red, porque pasaron horas tratando de responderse ellos mismo preguntas que pocas personas en ese tiempo se hacían. Hoy en día a nadie le preocupa como trabaja un disco duro, o un monitor, ni siquiera saben muchos de donde viene el nombre de Modem, la mayoría de las personas se conforma con decir…

“Yo se computación porque hice un documento Word y lo guarde en Mis documentos”.

Esos, a los que les llamamos genios, no pensemos que se sentaban delante de una maquina y en 5 minutos como por arte de magia encontraban 20 errores al Windows, No, ellos muchos dejaron de dormir varias noches, se volvieron prácticamente ermitaños y solo para decir un día al despertar que habían encontrado un simple detalle, y compartirlo con amigos, que les faltaba ese detalle para completar un código que tiempo después usaríamos todos nosotros.

Todos algunas vez hemos usado y seguiremos usando programas creados por terceras personas, pudiera ser ilógico pasar tanto tiempo en hacer algo que ya esta hecho años atrás, pero nunca esta de más probar, nunca esta de más escribir un “Hola Mundo” en cualquier lenguaje, quizás no nos salga como esperamos, intentémoslo de nuevo, quizás es el programas más feo que jamás se ha visto, pero lo hicimos nosotros, quizás nunca seamos más que puros lamers con la nariz levantada, pero lo que nunca podrán decir es que no lo intentamos.

El méerito no es leerse un manual de “como ser un hacker en 15 horas” y salir a la calle, tocar escape en la contraseña de win98 y creerse Dios, el merito esta en descubrir por nosotros mismos, sin ayuda, que el código ASCII del espacio es el 255. Hoy en día cualquiera se lee un txt y se cree y se cree el inventor de los editores de texto, pero no cualquiera es capaz de abrir Visual C++ (por citar un ejemplo) y hacer de ahí un verdadero editor.

Continuar leyendo

Curso de MS-DOS (Parte 4)

Estructura del árbol de directorios

Si necesitáis tener una visión completa y un poco más gráfica del contenido de un disco, utilizad la función TREE, con el modificador /F si queréis ver también los subdirectorios de cada directorio (si es que tiene).

Ejemplo: Estructura del árbol de directorios

Escribe TREE

Pulsa INTRO

Obtendréis un listado de los directorios y subdirectorios junto con la información correspondiente de cada uno.

Mover o copiar información entre directorios

Ahora que sabéis como moveros por los directorios, podéis utilizar la orden del COPY o del MOVE con más efectividad.

Ejemplo: Copiar archivos de un directorio a otro

Escribe COPY A:\ART.TXT C:\APUNTS\HISTORIA

Pulsa INTRO

Si lo que necesitáis es mover el archivo o archivos en vez de copiarlos:

Ejemplo: Mover archivos de un directorio a otro

Escribe MOVE A:\ART.TXT C:\APUNTS\HISTORIA

Pulsa INTRO

También podéis utilizar los comodines para mover bloques de archivos de una sola vez.

Borrar directorios

¿ Habéis probado de hacer un DEL a un directorio ?, solo se borra su contenido, pero no el directorio.

Para borrar todo un directorio (incluido sus subdirectorios y archivos interiores) emplead la orden DELTREE.

Ejemplo: Borrar todo un directorio (archivos incluidos)

Escribe DELTREE C:\APUNTS

Pulsa INTRO

Responded “S” si estáis seguros de eliminar todo el directorio o “N” para cancelar la operación.

Edición de archivos

El editor del DOS

El DOS dispone de una utilidad llamada EDIT, que nos permite visualizar el “interior” de cualquier tipo de archivo y editarlo, para poder ampliarlo, por ejemplo.

Podéis entrar en el editor escribiendo EDIT.

Ejemplo: Entrar al editor del DOS

Escribe EDIT

Pulsa INTRO

Os aparecerá la pantalla principal; desde esta podéis escribir textos poco complicados, con la desventaja que no se pueden alinear textos u otras funciones para muchos de vosotros importes y necesarias; por eso existen los programas de tratamiento de textos, ya preparados para estas necesidades.

El EDIT del DOS no es más que un programa muy sencillo para escribir algún texto o nota, pero no solo sirve para eso, sino para otras funciones que no vienen al caso, y que, seguro, no haréis servir.

Podéis abrir un fichero con ARCHIVO + ABRIR, donde os aparecerá un listado de todos los archivos del disco actual. Podéis cambiar de disco (para ir a la disquetera, por ejemplo), si buscáis la unidad “A” a la parte inferior del listado.

Una vez confeccionado vuestro archivo podéis guardarlo escogiendo del listado de directorios vuestra carpeta, con o sin extensión.

Quiero que quede bien claro que el DOS no termina aquí, y que esto es solamente una porción muy pequeña de lo que podéis encontrar para trabajar, pero he descartado el resto porque este manual solo es una introducción y una referencia rápida de las funciones más importantes, esenciales para trabajar y satisfacer la mayoría de vuestras necesidades.

Continuar leyendo

Curso de ensamblador (parte 1)

Esta primera lección va a ser sobre todo teórica.

No se puede programar en ensamblador sin tener un conocimiento mas o menos profundo acerca de las peculiaridades de la maquina que vamos a programar. Esto es obvio, ya que en ensamblador tenemos un control total del sistema, por tanto, cuanto mas sepamos acerca de el, mas provecho podremos sacar del mismo, y mejores resultados obtendremos.

En primer lugar debemos saber con que estamos trabajando, y no me refiero al lenguaje en sí, sino al ordenador en cuestión. Tendremos que conocer de que partes consta, como se comunican entre sí, etc.

Esta parte teórica es casi imprescindible para poder entender ciertas técnicas de programación.

Deciros también que vamos a estudiar el Pc en general, no distinguiremos entre distintas familias de procesadores (8086,286,386,etc) ya que vamos a utilizar ensamblador del 8086. En realidad es el ensamblador que yo utilizo. Por tanto, aunque estemos programando sobre un 80386 o un 80486, desarrollaremos código ejecutable para la familia 80x86 en general.

Cualquier exposición que haga ser valida para toda la familia Pc.

Bueno... Despues de este preambulo, pasamos al meollo de la cuestión:

Un Pc es un ordenador o computador, como mas os guste, compuesto principalmente por procesador, chips de memoria, varios chips inteligentes o programables, y el bus de datos y direcciones. Junto con todo esto, nos encontramos los periféricos como son monitor, disqueteras, teclado, etc, que se comunican con el procesador. Esto (la comunicación del procesador con periféricos) se ver mas adelante.

El procesador:

Es el chip que ejecuta los programas. El procesador o CPU, lleva a cabo una gran variedad de cálculos, comparaciones numéricas y transferencias de datos como respuesta a las peticiones de los programas que están siendo ejecutados en memoria.

La CPU controla las operaciones basicas del ordenador enviando y recibiendo señales de control, direcciones de memoria y datos de un lugar a otro del ordenador a través de un grupo de 'sendas electrónicas' llamadas BUS. Localizadas a lo largo de este bus están las puertas de entrada y salida (E/S en castellano o I/O en inglés), las cuales conectan a la memoria y a los chips de apoyo al bus. Los datos pasan a través de estas puertas de E/S mientras viajan desde y hasta la CPU y otras partes del ordenador.

Como os decía antes, trataremos el procesador 8086, siendo válido todo lo que digamos para el resto de procesadores de la familia PC.

El procesador 8086 es un procesador de 16 bits. Esto quiere decir entre otras cosas, que el procesador va a manipular en una sóla operación datos de hasta 16 bits. Es decir, cuando transfiera datos a la memoria o los traiga desde ella, lo podrá hacer de 16 bits en 16 bits. Aquí juega un papel decisivo el BUS de datos, ya que es por el por donde circulan los datos en las transferencias. Mas detalles unas cuantas líneas mas abajo.

El procesador cuenta con una serie de registros usados para realizar las operaciones de cálculo, y como almacenamiento de datos. Para que os hagais una idea, un registro del procesador es algo así como una zona de memoria dentro del procesador donde se puede almacenar información, de forma que el acceso a esta información es instantáneo, ya que no hay que utilizar el bus de datos que conecta el procesador con la memoria para obtener dichos datos.

Estos registros se dividen en 5 grupos, según sus funciones:

1.- Registros de datos: AX, BX, CX y DX.

Se usan para cálculo y almacenamiento de propósito general. Son utilizados por los programas para realizar cálculos, así como para transferir datos de una posición de memoria a otra, ya que no se puede hacer de forma directa. Es decir, que no podemos transferir un dato de la posición de memoria X a la posición Y sin antes depositar ese dato temporalmente en un registro del procesador.

Estos registros tienen una longitud de 16 bits, pero podemos descomponerlos cuando nos interese en un par de registros de 8 bits. Quedando de la forma siguiente:

AX = AH + AL

Siendo AX el registro de 16 bits, compuesto por la conjunción (que no la suma) de el registro AH de 8 bits (los 8 bits mas signiicativos o de mas a la izquierda) y el registro AL de 8 bits (los 8 bits menos significativos o de mas a la derecha).

BX = BH + BL

CX = CH + CL

DX = DH + DL

Para estos tres registros se aplica lo mismo que para el registro AX.

Cada uno de estos registros tiene funciones especiales que es interesante conocer. Por ejemplo el registro AX es el llamado acumulador, hace que muchas operaciones tengan una forma mas corta, ya que lo especifican implícitamente.

Es decir, que hay operaciones que actúan sobre el registro AX en particular.

BX se suele utilizar en muchas instrucciones como registro base, sobre todo en transeferencias de datos entre memoria y procesador.

CX es el registro contador, muchas instrucciones lo utilizan para hacer incrementos o decrementos automáticos, para realizar bucles, etc. DX es el registro de datos, se suele utilizar para operaciones de 32 bits, para almacenar los 16 bits (o palabra) mas significativos.

 

2.- Registros Indice: SI, DI, BP y SP. Se utilizan para acceder a memoria cuando se establece el modo de direccionamiento mediante indexación o con punteros. SI y DI indican el índice fuente y destino respectivamente. BP y SP indican el puntero base y el puntero de la pila respectivamenete. Mas adelante hablaremos de la pila (que es un tipo de datos estructurado).

Estos 4 registros son de 16 bits, y no pueden ser utilizados como registros dobles de 8 bits.

3.- Registros de Segmento: CS, DS, SS y ES. Estos registros apuntan al principio de un bloque de 64 ks de memoria o segmento, de ahí lo de la 'S' con la que finalizan todos los registros: CS: registro segmento de código. Establece al área donde se halla el programa en ejecución. DS: registro segmento de datos. Especifica la zona donde el programa lee y escribe los datos por defecto. SS: registro segmento de pila. Especifica el área donde se encuentra la pila del sistema. ES: registro segmento extra. Se utiliza como una extensión del segmento de datos. Es decir, indica otro área de datos aparte del especificado por DS.

4.- Puntero de instrucción: IP. Su longitud es de 16 bits como el resto de registros. Indica la dirección de la siguiente instrucción a ejecutar, y su valor es ajustado durante la ejecución de la instrucción en curso. Esta dirección est en el área de 64 ks de direcciones especificado por CS.

CS e IP en conjunción conforman la dirección física real de la siguiente instrucción a ejecutar. Mas adelante detallaremos este asunto.

5.- Registro FLAGS. O banderas de estado.

Su longitud es de 16 bits. Cada uno de estos bits contiene cierta información booleano (verdadero o falso). Según el valor de cada uno de estos bits sea 1(verdadero) ó 0(falso), informar del estado de alguna situación en particular.

Dentro del registro de FLAGS hay 7 bits que no se utilizan. Los nombres de los utilizados son: Of, Df, If, Tf, Sf, Zf, Af, Pf y Cf.

Estos bits se clasifican en dos grupos: - Flags de estado (Cf, Af, Of, Zf, Pf y Sf): muestran el estado del procesador. - Flags de control ( Df, If, Tf): determinan como el procesador responderá a determinadas situaciones. El programador manipulará estos bits para controlar el modo de ejecución de algunas instrucciones.

A continuación se muestra el significado de cada uno de los flags:

Cf: Bit de Carry (acarreo), se activa (se pone a 1) si se produce acarreo en una operación aritmética. Pf: Bit de paridad, se activa si el resultado de una operación tiene paridad par, es decir, si el resultado tiene un nº par de unos. Af: Bit de carry auxiliar, se activa si una operación aritmética produce acarreo de peso 16. Zf: Bit de cero, se activa si una operación produce 0 como resultado. Suele ser el mas utilizado(mas consultado) por los programadores, por lo menos por mí (AESOFT). Se utiliza para comparaciones de datos y para otras muchas cosas como ciertos bucles,etc. Sf: Bit de signo, se activa si el bit mas significativo de un resultado es 1. Por convención cuando se opera con números negativos, se utiliza el bit de mayor peso para indicar el signo: si el bit es cero, entonces se trata de un número positivo, si es 1, se trata de número negativo. Ya veremos todo esto mas adelante. Tf: Bit trap o desvío. Si Tf=1, el procesador ejecuta las instrucciones una a una bajo control del usuario. Se pone a 1 este bit para realizar depuraciones del código que se está ejecutando. De esta forma se puede seguir el flujo del programa. If: Bit de interrupción, si vale 1, las interrupciones están permitidas, y si vale 0, no. Df: Se usa en las instrucciones que manipulan cadenas de bytes. Según coloque el programador este bit, a '0' o a '1', las cadenas de bytes serán tratadas en sentido de direcciones crecientes o decrecientes. Of: Bit de overflow, indica desbordamiento en una operación aritmética.

 

La Memoria: Los chips de memoria se dedican meramente a almacenar la información hasta que se necesita. El número y la capacidad de almacenamiento de estos chips que hay dentro del ordenador determinan la cantidad de memoria que podremos utilizar para los programas y los datos. Normalmente la memoria siempre se ha dividido en dos tipos principales, como son la RAM y la ROM. De todos será conocida esta distinción y sus caraterísticas, así que no entro en el tema. Si alguien tiene alguna duda, que lo diga. Pues bien, en principio, nosotros vamos a trabajar con el rango de memoria 0 - 1048576, es decir, vamos a trabajar con el primer Mb(megabyte). Existen técnicas para tratar la memoria que hay en direcciones superiores a éstas, pero eso ya se ver en otro momento.

Pues bien, en ese Megabyte inicial, tenemos tanto RAM como ROM. La memoria RAM que es la que usamos para almacenar tanto programas como datos empieza en las direcciones bajas y llega hasta el inicio de la ROM. La ROM, evidentemente está situada en las posiciones altas de memoria, y es ahí donde se almacenan las rutinas mas básicas del ordenador, como las rutinas de acceso a discos, pantalla, etc.

Un tema muy importante en el mundo del PC es la denominada barrera de los 640 Ks que seguro habreis oido hablar. Esto quiere decir que aunque tengamos instalados 8 Megabytes en nuestro ordenador, sólo podremos ejecutar nuestro programa en las primeras 640 ks.

Para poder acceder a los 7 Megabytes restantes debemos utilizar funciones especiales de manejo de memoria extendida, expandida, etc. Pero bueno, eso no nos interesa ahora en absoluto. Os remito al fichero MEMO.ZIP que podreis encontrar en el BBS, en el cual, un usuario (Pc-adicto) nos ofrece una exposición mas amplia acerca de la memoria del Pc.

 

Chips inteligentes: Se trata de chips de apoyo, de los que se sirve el procesador o el usuario. Estos chips existen debido a que el procesador no puede controlar todo el ordenador sin ayuda. Al delegar ciertas funciones de control a otros chips, le queda mas tiempo libre para atender a su propio trabajo. Estos chips de apoyo pueden ser responsables de procesos tales como el flujo de información a través de la circuitería interna(como el controlador de interrupciones y el controlador DMA) y controlar el flujo de información de uno a otro dispositivo(como un monitor o una unidad de disco) concectado al ordenador. En resumen, estos chips están ahí para librar de trabajo al procesador.

 

Bus de direcciones: El bus de direcciones del Pc utiliza 20 líneas de señal para transmitir las direcciones de memoria y de los dispositivos conectados al bus. Como a través de cada una de esas 20 lineas pueden viajar dos posibles valores(0 ó 1, es decir tensíon alta o tensión baja), el ordenador puede especificar 2^20 (2 elevado a 20) direcciones. Es decir puede direccionar 1 Megabyte. Estamos hablando del 8086 con un bus de direcciones de 20 bits. Modelos superiores como el 80386 o el pentium direccionan muchísimo mas, tanto como les permite su bus: 32 bits en el caso del 386 y 64 bits en el caso del pentium. Es decir, 2^32 y 2^64 direcciones respectivamente.

 

Bus de datos: El bus de datos trabaja con el bus de direcciones para transportar los datos a través del ordenador. Este bus de datos es de 16 bits, al igual que el tama través o de registro. Aunque no tiene que coincidir, como sucede con el procesador 8088, el cual tiene un tamaño de registro de 16 bits y un bus de datos de 8 bits. Esto es así por simple economía. Por ahorrar costes. Claro que tiene su parte mala, y es que es mas lento al realizar transferencias de datos.

Bueno, bueno, bueno... Todo esto que parece muy rollero es muy importante. No es lo mismo programar sabiendo con que se trabaja que programar a ciegas. Muchas veces es imprescindible recrear gráficamente ciertas instrucciones, para darse cuenta de un fallo en el programa.

Venga, ahora quiero que me conteis dudas que teneis, aclaraciones, etc. Que la próxima lección ya es mas práctica. Pero hasta que no se tenga claro cómo funciona el ordenador, no se puede hacer que funcione correctamente.

Lo dicho, espero mensajes vuestros antes de la siguiente lección. Un saludo de AESOFT.

 

LECCION 2:

- DIRECCIONAMIENTO DE MEMORIA EN EL 8086. - SEGMENTACION.

Hola a todos los seguidores del curso de ensamblador de AESOFT. En esta lección vamos a ver cómo direcciona la memoria el 8086, es decir, cómo el 8086 accede a cada una de las posiciones de memoria.

La forma en que la CPU construye las direcciones de memoria es muy importante para la programación del sistema, debido a que constantemente utilizamos instrucciones de transferencias de datos, de acceso a funciones de la BIOS, del DOS, etc.

Mas adelante estudiaremos la BIOS. Valga por ahora que es un conjunto de utilidades y procedimientos grabados en la ROM (memoria de sólo lectura), los cuales se encargan de acceder al nivel mas bajo en cuanto a programación se refiere. Es decir, estas rutinas se encargan de manipular el hardware por nosotros. BIOS son las siglas de Basic Input Output System (Sistema básico de entrada/salida).

En cuanto al DOS (sistema operativo de disco), decir que aquí nos referi- mos no a las utilidades o comandos que trae consigo, que es lo típico que se enseña en academias e institutos, sino a la estructura interna del mismo: interrupción 21h, 24h, etc. Ya veremos también que es una interrupción.

Bien, antes de entrar de lleno en el tema, conviene saber un poco del por que del mismo. Es decir, que llevó a que fuera de esta forma y no de otra.

A principio de los años 80, Intel (fabricante de la familia de procesadores 80x86) se propuso dar un gran paso adelante con respecto a la competencia. En aquel tiempo los microprocesadores que imperaban entre los ordenadores domésticos eran de 8 bits, es decir, tenían un ancho de bus de datos de 8 bits, el tamaño de palabra de memoria era de 8 bits, y los registros del procesador eran de 8 bits. Un claro ejemplo de esto fue el microprocesador Z80 (de la empresa Zilog), el cual estaba incorporado en máquinas tan famosas como los spectrum, amstrad, msx, etc.

Como he dicho, el ancho del bus de datos era de 8 bits. Esto quiere decir que todas las transferencias de datos que se hicieran se harían de 8 en 8 bits, es decir, byte a byte.

Pues bien, aunque el microprocesador era de 8 bits, y la mayoría de registros también lo fuera, había alguno mayor (16 bits). Me estoy refiriendo sobre todo al registro de direcciones que era de 16 bits. De esta forma, un amstrad cpc-464 podía acceder a 64 ks de memoria. 64 Ks es la máximo que podía direccionar el z80 original.

En ese momento Intel se planteó superar esa barrera de las 64 Ks, pero tenía un problema. El z80 por ejemplo, había consguido tener registros de 16 bits cuando el microprocesador es de 8. Pero pasar de 16 bits de capacidad en registros en aquellos momentos no era posible para los microprocesadores. Es decir, no había suficientes avances tecnológicos como para conseguir tamaños de registros mayores en un microprocesador. De tal manera que había que buscar una fórmula diferente... Y ahí es cuando surgió el tema de los segmentos que tantos quebraderos de cabeza a dado hasta ahora y sigue dando.

A Intel se le ocurrió la idea de construir una dirección de 20 bits de ancho y colocarla en el bus de direcciones para poder dirigirse a la memoria. Pero al ser los registros de 16 bits, sólo había una solución posible para crear este ancho de 20 bits: Usar 2 registros de 16 bits!!!

El 8086 divide el espacio de direcciones (1 Mbyte) en segmentos, cada uno de los cuales contiene 64 Ks de memoria (la máxima direccionable por un sólo registro). Entonces, para direccionar una posición de memoria nos valemos de dos registros: Registro de segmento y de offset. Ya vimos en la lección anterior que había varios registros de segmento: cs (registro de segmento de código), ds (de datos), etc.

Pues bien, este primer registro (de segmento), indica dónde comienza el trozo de 64 Ks que buscamos. Y el segundo registro (el de offset), contiene el desplazamiento dentro de ese segmento.

Bien. Hemos visto que son necesarios 2 registros para direccionar ese Mbyte de memoria, y tenemos un bus de direcciones de 20 bits. Esto nos conduce a que el microprocesador debe realizar unas operaciones sobre estos dos registros para obtener la dirección física de 20 bits. Esto se logra de la siguiente manera: El 8086 mueve el valor del segmento 4 bits a la izquierda y le suma el valor del desplazamiento para crear una dirección de 20 bits.

Gráficamente: Tenemos dos registros de 16 bits. DS: XXXXXXXXXXXXXXXX BX: XXXXXXXXXXXXXXXX 15 87 0 15 87 0 Byte alto Byte bajo Byte alto Byte bajo

(mas significativo)(menos significativo)

El primer registro, es el de segmento (en este caso, segmento DS, de datos). El segundo registro es el de offset o desplazamiento. En este caso utilizamos el registro BX para direccionar dentro de el segmento. Podíamos haber utilizado también el registro SI, el DI, etc. A partir de estos dos registros, debemos acceder a una posición de memoria física dentro del Mbyte de que disponemos para el 8086.

Pongamos que el registro DS tiene el valor 0B800h (en hexadecimal) (podeis utilizar SB-CALCU de SAN BIT para hacer los cambios de base, y trabajar con bases diferentes a la decimal. También para la decimal, por supuesto). Y el registro BX contiene el valor 0037h.

Tenemos pues (en binario): DS: 1011100000000000 BX: 0000000000110111 Para obtener la dirección física de memoria, y teniendo en cuenta todo lo dicho relativo a segmentos, el microprocesador acturaría así: (Gráficamente)

Haría una suma de la siguiente forma:

DS: 1011100000000000 BX: + 0000000000110111 ---------------------------- 10111000000000110111

Obteniendo así la dirección de 20 bits necesaria para cubrir todo el Mbyte.

Si ese número (10111000000000110111) que está en binario, lo pasamos a hexadecimal, tenemos que la dirección física correspondiente a la anterior segmentada es: 0B8037h.

De todo lo anterior, se desprende que los segmentos empiezan siempre en direcciones divisibles por 16. Mas técnicamente: cada segmento comienza en una dirección de párrafo. Un párrafo son 16 bytes. Por supuesto nunca habrá un segmento que empiece en una dirección impar, por ejemplo. Como ejemplo: El primer segmento posible empieza en la dirección física 0. El segundo empieza en la dirección

Esto es mas complejo de lo que parece. Si tienes alguna duda, ya sabes...

Si le das vueltas a la idea, te darás cuenta que diferentes combinaciones de direcciones segmentadas dan una misma dirección física.

También se puede apreciar que los segmentos se pueden superponer unos a otros, pueden ser idénticos, o pueden encontrarse en partes totalmente lejanas en la memoria.

Si llegados a este punto no comprendes el tema de los segmentos, no sigas, ya que te perderías. Dime que no entiendes y lo explicaré mas detalladamente.

Es todo por ahora. Ah, y no sé si recibísteis la primera lección. Parece que todo estaba claro. Si en éste no os surge ninguna duda, ya me mosqueo }:-)))

Continuar leyendo

Cómo conectar dos ordenadores

Cómo conectar dos PC con cable de red convencional sin necesidad de un concentrador, hub o switch. Como sabemos las conexiones deben ser normalizadas usando generalmente la 568A, es decir en el conector RJ45 de 8 hilos conectamos por un extremos los cables con la siguiente distribución de colores:

PIN CABLE
1 BLANCO/NARANJA
2 NARANJA
3 BLANCO/VERDE
4 AZUL
5 BLANCO/AZUL
6 VERDE
7 BLANCO/MARRON
8 MARRON

Para conectar dos PC con un cable sin hub debemos armar un conector normalizado en un extremo y en el otro armarlo de la siguiente manera:

PIN CABLE
1 BLANCO/VERDE
2 VERDE
3 BLANCO/NARANJA
4 AZUL
5 BLANCO/AZUL
6 NARANJA
7 BLANCO/MARRON
8 MARRON

Por un extremo debe quedar de la primera forma y por el otro de la segunda, luego: A CONECTARNOS!!!

Continuar leyendo

CD y DVD

La unidad de CD-ROM ha dejado de ser un accesorio opcional para convertirse en parte integrantede nuestro ordenador, sin la cual no podríamos ni siquiera instalar la mayor parte del software que actualmente existe, por no hablar ya de todos los programas multimedia y juegos. Pero vayamos a ver las características más importantes de estas unidades.

En primer lugar vamos a diferenciar entre lectores, grabadores y regrabadores. Diremos que los más flexibles son los últimos, ya que permiten trabajar en cualquiera de los tres modos, pero la velocidad de lectura, que es uno de los parámetros más importantes se resiente mucho, al igual que en los grabadores.

Es uno de los aspectos más importantes es la velocidad. Está claro que cuanta mayor sea la velocidad, mejor será la respuesta del sistema a la hora de leer datos y reproducir sonido y vídeo desde el CD. Los valores que se han ido tomando, son 1x, 2x, 3x, 4x, 6x, 8x, 10x, 12x, 14x, 16x, 18x, 24x, 28x, 32x, 36x, 40x y llegan hasta 52x (es posible que a más). La x hay que sustituirla por 150 Kb/seg.

Dado que las unidades lectoras son bastante económicas, suele ser habitual contar con una lectora, y una regrabadora, usando la segunda sólo para operaciones de grabación.

En cuanto a las velocidades de grabación suelen estar sobre las 2X en regrabadoras y las 2, 4 y hasta 8x en grabadoras). Y después de la velocidad de lectura y grabación nos encontramos con otro tema importante como es el tipo de bus. Al igual que en los discos, este puede ser SCSI o EIDE. Aconsejamos SCSI (Ultra Wide) para entornos profesionales y EIDE (Ultra DMA) para los demás.

Otro aspecto que vamos a comentar es el tipo de formatos que será capaz de leer / grabar. Es interesante que sea capaz de cumplir con todos:

ISO 9660: Imprescindible. La mayor parte de los demás son modificadores de este formato.

CD-XA y CD-XA entrelazado: CD's con mezcla de música y datos.

CD Audio: Para escuchar los clásico Compact Disc de música.

CD-i: Poco utilizado.

Vídeo-CD: Para peliculas en dicho formato.

Photo-CD Multisesión: Cuando llevas a revelar un carrete puedes decir que te lo graben en este formato.

Velocidad de acceso

Es el tiempo medio que tarda la unidad en acceder a los datos cuando se los pedimos. Los valores típicos oscilan entre 100-250 ms. Está claro que cuanto menor sea el valor, mejor.

Tamaño del buffer

El buffer es una memoria especial que se encarga de transferir la información del CD al interfaz. No se trata de una memoria caché, pero permite enviar datos en paquetes más grandes, con lo que se logran mayores transferencias (pero no milagrosas). Los valores típicos van desde los 64 a los 512 Kb.

Compatibilidad

CD-XA, CD-1 (M2, F2), PhotoCD, multisesión, CD grabable y regrabable, son distintos tipos de CD-ROM que se pueden leer en una unidad que especifique qué es compatible con estos sistemas. Por ejemplo CD-XA quiere decir arquitectura avanzada; CD-I puede leer CD-I de Phillips y Video CD. PhotoCD lee el formato multisesión de discos de fotografías Kodak. Hay algunas unidades que permiten leer discos Macintosh para poder utilizarlas en este tipo gde unidades.

Continuar leyendo

Algo más sobre HDD

En el mundo del PC hay dos grandes estándares, IDE y SCSI, aunque el primero está mucho más extendido que el segundo, la tecnología SCSI está presente en otras muchas plataformas, como los Mac , sistemas Unix, AS/400, etc...

Los dos estándares han ido sufriendo a lo largo del tiempo distintas implementaciones para intentar seguir el ritmo marcado por otros componentes cada vez más rápidos, como los procesadores.

Parámetros a tener en cuenta:

Capacidad: Aconsejable que sea a partir de 2,1 Gbytes en adelante.

Tiempo de acceso: Importante. Este parámetro nos indica la capacidad para acceder de manera aleatoria a cualquier sector del disco.

Velocidad de Transferencia: Directamente relacionada con el interface.

En un dispositivo Ultra-2 SCSI es de 80 MBytes/seg. mientras que en el Ultra DMA/33 (IDE) es de 33,3 MBytes/seg. en el modo DMA-2. Esta velocidad es la máxima que admite el interface, y no quiere decir que el disco sea capaz de alcanzarla.

Velocidad de Rotación: Tal vez el más importante. Suele oscilar entre las 4.500 y las 7.200 rpm (revoluciones por minuto).

Caché de disco: La memoria caché implementada en el disco es importante, pero más que la cantidad es importante la manera en que ésta se organiza. Por ello este dato normalmente no nos da por si solo demasiadas pistas. Son normales valores entre 64 y 256 Kb.

El interface:

IDE:

Cronologicamente, y empezando por el primero no encontramos con los primeros discos IDE con su limitación a 528 Mb. y pudiendo solo conectar hasta 2 de ellos.

Después vinieron los discos EIDE (FastATA), desarrollados por la compañía Western Digital,compatibles con los primeros, pero con algunas mejoras, basadas en la especificación ATA-2, que ya soporta unidades de CD-ROM (ATAPI) y de cinta.

Otra mejora importante es el soporte de 2 canales para conectar hasta 4 unidades.

Además se definen varios modos de transferencia de datos, que llegan hasta los 16,6 Mb./seg. como el PIO-4, o mejor aún el DMA-2, que soporta la misma tasa pero sin intervención de la CPU.

La última especificación, desarrollada por Quantum es la Ultra DMA/33 (UltraATA), que permite transferencias DMA a 33 Mb./seg.

SCSI:

En el caso de los discos SCSI, tenemos el primero, llamado SCSI-1, con un ancho de bus de 8 bits, aunque ya en esta primera especificación se incluian características muy destacadas, como la posibilidad de conectar hasta 7 dispositivos de todo tipo, discos, cinas, escáners, CD-ROM, etc...

Después viene el SCSI-2, que ya dispone de un ancho de bus de 16 bits. El siguiente paso es el Fast-SCSI, considerado el doble de rápido. Después viene el Wide SCSI, ya con un ancho de bus de hasta 32 bits, así como un mayor rendimiento.

Instalación de varios dispositivos:

En el caso de querer instalar más de un dispositivo IDE, hay que tener en cuenta algunos detalles muy importantes.

En las controladoras EIDE, disponemos de dos canales IDE independientes, con lo que podemos llegar a instalar hasta cuatro dispositivos, dos por canal. El primer dispositivo de cada canal se conoce como "master" (maestro) y el segundo como "slave" (esclavo).

En un canal cualquiera, sólo un dispositivo puede hacerse con el control del bus, es decir, no pueden utilizar el bús concurrentemente, con lo que si ponemos dos discos en el mismo canal, estos se "pelearan" por él, y el rendimiento de ambos bajará notablemente.

En el caso de tener sólo dos dispositivos, se deberán poner a ambos como "maestros", uno en cada canal, es decir, conectaremos un cable a cada disco, y cada cable irá a un conector en la placa base.

Es aconsejable que es disco más rápido sea colocado en el primer canal (Primario), pués aparte de ser el disco que arranca el sistema operativo, es donde, normalmente, está ubicado el archivo de intercambio de la memoria virtual, con lo que el rendimiento general del equipo aumentará.

Si tenemos dos discos y un CD-ROM, el CD-ROM se colocará como "esclavo" del segundo canal (secundario). Esto es así porque normalmente el segundo disco tendrá menos actividad que el primero (recordemos que Windows y otros sistemas operativos hacen un uso intensivo del archivo de intercambio).

Para poder configurar el disco como maestro o como esclavo necesitaremos saber la posición exacta de unos puentes o "jumpers" que normalmente todos los discos poseen. Por desgracia, cada fabricante utiliza su propio criterio.

En la mayoría de los casos, disponemos de 3 puentes, serigrafiados como SP, DS y CS, y en este caso, quitaremos todos los puentes para modo esclavo, y colocaremos uno sólo en "DS" para maestro.

En otro caso, deberemos consultar el manual si disponemos de él , o fijarnos en la serigrafía, o en todo caso, acudir a la página web del fabricante (ver sección links).

En el caso de disponer de una controladora y dispositivos SCSI, ninguna de estas precauciones es necesaria. Pues SCSI soporta hasta 6 dispositivos concurrentemente (o 14 en los modelos más modernos).

Continuar leyendo