Programación en Lenguaje Ensamblador

-El Verdadero Lenguaje de las Máquinas-

Sistemas de 8, 16 o 32 bits ¿Qué significa eso?

–Longitud de Palabra de una Máquina–

Las computadoras no siempre se vendieron tan alegremente como se venden ahora. En otros tiempos eran productos para gente muy técnica y lo único que distinguía una computadora de otra era su capacidad. Cualquier sistema relacionado con la computación desde las avanzadas estaciones de trabajo de ingeniería hasta las mas sencillas consolas de videojuegos se anunciaban por sus capacidades técnicas. Esta moda tuvo su punto más notorio a principio de la década de los noventa cuando estas características técnicas se usaron para vender estos equipos. Como en el caso de esta imagen que muestra una publicidad del SNES

Sin embargo hubo un problema, y es que ahora le estaban vendiendo computadoras a gente que no tenía por qué saber cuestiones técnicas de los equipos y hubo muchos malentendidos entre los consumidores que en otra entrada les detallaré. Y estos problemas terminaron cuando alguien en algún departamento de mercadotecnia se dio cuenta de esto y cambiaron la publicidad. Uno de los mejores ejemplos fueron los procesadores de Intel que ya no se anuncian por sus capacidades técnicas sino por crípticos números de modelo y ya es cosa de que a quién le interese se compre el CPU que más le convenga.

En otra entrada les comentaré esta confusión sobre los detalles técnicos de las computadoras entre los consumidores pero ahora les contaré unas cuantas que presencié yo mismo en la época de las consolas de videojuegos de 16 bits:

Eran principios de los años noventa, las computadoras de escritorio contaban con CPU de 32 bits capaces de correr en modo de 16 bits para fines de retrocompatibilidad. En ese tiempo las consolas de videojuegos de 8 bits como el venerable NES aún estaban en circulación. Y en un buen dia comenzaron a venderse las nuevas consolas de 16 bits como el Sega Genesis/Megadrive y el Super Nintendo Entertainment System (SNES). Ambos sistemas se anunciaban como sistemas “revolucionarios” de 16 bits y si bien eran revolucionarios si los comparábamos con la generación anterior de 8 bits sus procesadores no eran nada comparados con un intel 486 de 32 bits corriendo en Modo Protegido. Sin embargo como en esa época los gamers de PC no jugaban juegos de acción rápida como los vistos en las salas de arcade o las consolas sino lentas y tediosas aventuras gráficas con animaciones lentas y pitidos horrorosos del PC speaker la gente que no sabía nada de programación creyó que sistemas de 16 bits de no más de 200 dólares eran más poderosos que computadoras completas de 2000 dólares. Algo similar pasó con el Nintendo 64 y el primer Playstation pero como ya dije esa historia la contaré otro dia.

Volviendo a la pregunta original: ¿Qué demonios significa cuando nos dicen que un sistema es de 16, 32, 64 o cualquier otra cantidad de bits? Cuando nos dicen esto se refieren a la longitud de palabra del CPU. Para explicar este concepto vamos a repasar primero lo que es un BIT. Un bit es un dígito binario que puede ser 0 o 1. Las computadoras usan bits para representar la información y procesarla y mientras más bits sea capaz de manejar un sistema mayor será la cantidad de información que podrá manejar. Piensen en un bit como en un dedo. Levanten una de sus manos y elijan el dedo que quieran. Pueden estirar el dedo o mantenerlo doblado. Si estiran el dedo contará como un uno y si lo doblan como un cero. De ese modo pueden representar información. Digamos que a alguien que no puede oirlos le quieren dar órdenes de que avance o se detenga. Si levantan la mano con todos los dedos doblados en forma de puño puede significar que se detenga y si lo hacen con un dedo levantado significa que avance.

Pues bien, ese dedo que pueden doblar o estirar es un bit. Y las computadoras trabajan así. Ese Bit puede significar encendido o apagado, verdadero o falso, avanzar o detenerse. ¿Pero qué pasa si usamos más bits? Al tener más bits podemos representar más información. Regresando a las manos si en lugar de usar un solo dedo usáramos 2 podríamos podríamos mandar 4 tipos diferentes de mensajes: 2 dedos doblados, el primero doblado y el segundo extendido, el primero extendido y el segundo doblado o los dos extendidos. Siguiendo está lógica si usamos 3 dedos podemos combinarlos de 8 maneras diferentes, 4 de 16 y así hasta usar los 10 dedos de las manos que pueden ponerse en 1024 posiciones diferentes. Pero de momento ignoremos los pulgares y quedémonos con 8 dedos que pueden representar 256 diferentes posiciones.


LAS MANOS DE LAS COMPUTADORAS

¿Y qué tiene que ver esto con las computadoras? Pues resulta que las computadoras también tienen manos con dedos que pueden doblar y estirar. Manos con dedos con las que pueden recoger, manipular y depositar información digitalizada dentro del sistema. Esas manos se llaman Registros de CPU y todo sistema de computación por insignificante que parezca tiene por lo menos uno de estos. Aunque estas pequeñas manos y su comportamiento puede ser muy diferente entre un sistema y otro. Cuando comenzaba a programar nadie me sabía explicar exactamente lo que era un registro de CPU y en ese momento me quedé con la definición de “Variable de hardware”. Pero si bien un registro puede almacenar información como lo hace aquello que los programadores entienden como una variable es mucho más que eso. Un registro de CPU es como una mano y al igual que una variable puede tomar un valor y almacenarlo pero puede hacer muchas más cosas. Ya hablaré en detalle de lo que es un registro de CPU en otra entrada para principiantes. Por ahora seguiré explicando el asunto ese de los bits de un sistema.

A diferencia de las variables que conocen los programadores los registros de CPU son físicos y en verdad existen dentro del CPU. En algún lugar hay una imagen de Intel que muestra uno de sus primeros CPU en la época en la que su circuitería todavía podía verse con instrumentos ópticos y claramente pueden verse los circuitos de los registros principales de CPU. Si programan en ensamblador tendrán control directo sobre esos registros como si fueran manos. Pueden darle instrucciones al CPU de que el registro principal lea una localidad de memoria específica, le sume algún valor que les de la gana y la vuelva a guardar en otra localidad de memoria diferente tal y como un trabajador de un taller tomaría una pieza de un lugar de la mesa, le haría alguna modificación y la dejaría en algún lugar de la mesa diferente. Si programan en cualquier otro lenguaje que no sea ensamblador no verán nunca un registro de CPU en su código, sin embargo en algunos como por ejemplo C tendrán que tener en mente cuantos bits miden las variables para evitar pérdidas de información.

Ahora bien, ya sabemos que las computadoras tienen manos con las que trabajan y que estas manos tienen dedos que se llaman bits. Y la cantidad de bits que hay en un registro de CPU es lo que le llaman Longitud de Palabra de la Máquina. Mientras mayor sea la longitud de palabra de un sistema mayor será el número que puede almacenar dentro de un registro de CPU con los que trabaja. Y dependiendo de como esté construido el resto del sistema serán más las cosas que podemos hacer. Sin embargo, aunque el CPU tenga una longitud de palabra determinada el resto del sistema no tiene por qué tener las mismas longitudes. Es más, por regla general el CPU siempre tiene una longitud de palabra mayor que la del resto del sistema. Esto permite bajar costos pero pueden darse situaciones graciosas. Por ejemplo recuerdo un sistema cuyo CPU era de 64 bits pero el sistema de memoria era de 32 así que para cargar o guardar un solo valor entre el registro y la memoria tenía que leerlo en 2 mitades y hacer una serie de operaciones binarias para acomodarlo y esto era mucho más tardado que hacer varias operaciones matemáticas con ese mismo valor. A veces se utilizan sistemas así cuando se trabaja con números muy grandes como los que salen cuando calculamos factoriales. Pero también puede darse el caso opuesto como pasó con el PCengine/TurboGraphics que era una consola de videojuegos con un CPU de 8 bits y un procesador gráfico de 16 que le permitió correr juegos con arte bastante detallado para su tiempo sin elevar demasiado los costos de programación. Ahora bien, otra razón por la que no todo el sistema comparte la misma longitud de palabra que el CPU es porque no siempre se necesita. El humano tiene sus limitaciones físicas. Por ejemplo sus ojos no pueden percibir más de 16.7 millones de colores para eso bastan 24 bits (aunque se usan 32 bits para optimizar la velocidad), el oido apenas si percibe una frecuencia de hasta 22.1 kHz y para reproducir sonido estereo calidad de CD basta un sistema de 16 bits. En cuanto al manejo de memoria apenas se comienzan a vender a civiles computadoras con más de 4 Gb de memoria aunque esta cantidad de memoria era perfectamente manejable para un CPU 386 de intel construido a mediados de los años ochenta. Tal vez los sistemas cuyas longitudes de palabra más grandes que existan, o por lo menos que conozco son las unidades vectoriales usadas para gráficas por computadora que le aplican una misma operación matemática a varios números en forma paralela y que he visto que miden de 128 bits hacia arriba. Estas longitudes de palabra también se usan para hacer encriptación.

Tener un sistema de muchos bits o con una longitud de palabra muy grande permite hacer más cosas aunque también es más costoso y dificil de programar. Por regla general cuando se habla de los bits de un sistema casi siempre se refieren a la longitud de palabra de su procesador principal. En el caso de las unidades de almacenamiento como los discos la cantidad de bits hace referencia a cuanta información puede almacenar y en el caso de las memorias internas hay que dejar en claro la diferencia entre capacidad de almacenamiento, velocidad de acceso y el “Throughput” que es la cantidad máxima de bits que podemos mover entre la memoria y el CPU de una sola vez. En resumen, una gran cantidad de bits en un sistema no siempre es garantía de que sea más poderoso que uno de menos bits, solo que su uso es diferente. Como comenté al principio muchos juegos de consola de la era de los 16 bits eran mucho mejores que los juegos hechos para las primeras PC de 32 bits porque su hardware al tener que ser más barato tenía que estar más optimizado y la técnica para programarlo era más refinada. Pero como dije al principio este asunto de los bits de un sistema solo les importa a los que programan en ensamblador, los que usan otros lenguajes les basta con tener una idea de las limitaciones de manera general y tal vez saber cual es el número más grande con el que pueden trabajar sin causar un error de desbordamiento. Pero dejémoslos a ellos y quedémonos con la programación en ensamblador. Por ahora me basta con que sepan a qué se refieren cuando dicen (o decian) que un sistema es de una determinada cantidad de bits. Otro dia les platicaré como durante los noventa se hizo todo un caos por usar detalles técnicos en la publicidad de las consolas de videojuegos y la razón por la que se dejó de hacer. Por ahora mejor pónganse a programar.

agosto 25, 2014 - Posted by | Uncategorized

2 comentarios »

  1. muybuena entrada maestro, que bueno que nos acompa;a de nuevo

    Comentario por root@darkstar | noviembre 30, 2014 | Responder

  2. Tu explicacion es pero mucho mejor que la que medieron, cuando yo al igual que muchos ya sea por curiosidad o interes tecnico preguntava al respecto la respuesta de algu… muchos es “Hay programas que solo corren a 16bits y no a 32 lo mismo a 64” y yo quedaba aun mas confundido.

    Comentario por Daniel Almanzar | marzo 16, 2015 | Responder


Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: