Programación en Lenguaje Ensamblador

-El Verdadero Lenguaje de las Máquinas-

¿Cuantos Bits tiene un Byte?

Los gringos tienen un chiste en que un ingeniero del departamento de sistemas le pregunta a alguien del área administrativa si sabe cuantos bits tiene un byte, y este contesta que eso depende del tamaño del perro. Este chiste no tiene el menor sentido en español. Sin embargo en inglés la palabra BIT significa mordida o huella de diente y BYTE suena igual que “Bite” que es el verbo ‘morder’.

Comencemos por el principio. Diario escuchamos que un archivo mide una cierta cantidad de bytes pero muy pocos, inclusive muchos ingenieros, se han topado cara a cara con uno. Asi que usaré todos mis recursos para explicar un concepto tan elementalmente como me sea posible.

El equivalente del BIT en esta dimensión es como un foco que puede representar cero o uno. Encendido o apagado. Eso cualquiera lo sabe, al igual que saben que un átomo tiene protones, electrones y neutrones. Pero pocos interactuan directamente con estos. Un grupo de 8 bits que pueden ser cero o uno tiene el nombre de BYTE.

Lo mas parecido que existe a un BYTE en el mundo de los humanos es una CAJITA. Una cajita muy pequeña que puede almacenar un número. Este número puede ser cualquiera entre 0 y 255. O lo que es lo mismo, 8 bits.

La dichosa memoria RAM(nada que ver con los carneros) es un chorizote de varias celdas de memoria con capacidad de un byte. Para que se den una idea, una máquina con un Gigabyte en ram tiene algo así como 2 elevado a la 30 que es mas o menos 1,073,741,824 cajitas como estas. En el dibujo que acompaña a esta entrada viene una de estas celdas de memoria. Como se puede ver, una de estas celdas de capacidad de un byte tiene 8 espacios para guardar bits (aquí en rojo). Cada una de estas celdas tiene un valor posicional, como en el decimal se manejan unidades, decenas,centenas,etc. Es una suma de potencias de dos, contando de derecha a izquierda la primera posición vale 2 elevado a la cero = 1 y la última 2 elevado a la 7 = 128. Como puede verse en la última celda del dibujo, los números mas chiquitos representan el valor posicional de cada celda y su contenido nos dice si este valor es sumado (uno) o ignorado (cero) en el resultado final.

En el ejemplo del dibujo, la primer celda tiene todos sus bits en cero, lo que significa que la celda contiene un cero. El segundo ejemplo tiene una celda de byte llena. Si sumamos 128 + 64 + 32 + 16 + 8 + 4 + 2 + 1 nos da 255 que es el valor máximo que podemos representar con un solo byte. Para números mas grandes se usan varios bytes juntos. Pero eso lo veremos otro día. En el tercer dibujo, la celda de memoria contiene 100, pues 64 + 32 + 4 = 100.

Existe una forma para representar los bytes llamada Hexadecimal, con esta notación es posible representar un byte con 2 cifras, algo similar a lo que pasa con las centenas y un par de cifras decimales. Además de que el binario puro ocupa demasiado espacio en pantalla.

Bueno, ya fue mucha clase por hoy, ahora pónganse a chatear para que no les duela la cabeza pues mas adelante vamos a ver el tema de los arreglos y los números en Hex. Creo que lo de hex lo veremos primero.

Esto es un byte

Esto es un byte

>>>>Pasa al siguiente nivel>>>>

***Esta nota pertenece a “La Saga del Completo Principiante”*** Da click en este enlace para pasar a la siguiente entrada de esta serie.

About these ads

diciembre 27, 2008 - Posted by | Uncategorized | , , ,

25 comentarios »

  1. una pregunta…. porque al sumar los numeros o los unos de cada celda se tiene que hacer de derecha a izquierda, y no de izquierda a derecha?

    no soy programador, pero mi inquietud esta vigente
    solo por curiosidad

    Comentario por Carlos | diciembre 28, 2008 | Responder

  2. una pregunta sin mucho sentido
    que significa WWW
    acaso es La red mundial?….

    Comentario por Carlos | diciembre 28, 2008 | Responder

  3. rius

    Super Mercado de Sectas

    Comentario por Roberto Carlos | diciembre 30, 2008 | Responder

  4. Muy buena explicacion acerca de los bits, me imagino que te tardaste un buen en hacer el dibujo que representa un Byte en el Paint. Eso es amor al ensamblador

    Comentario por blackpig | marzo 30, 2009 | Responder

    • Y eso que wordpress baja la calidad de los dibujos que se suben para ahorrar espacio. Y si, me gusta el paint y si no lo usara programaria los graficos con ensamblador. Creo que aun no soy tan bueno.

      Comentario por asm86 | marzo 30, 2009 | Responder

  5. Pues con un editor hexadecimal, te agarras construyendo un bmp o un tga. Y si tomas peyote de seguro te sale un gif o un jpg.

    Jaja es broma.

    Comentario por blackpig | marzo 31, 2009 | Responder

    • Aunque no lo creas, esa forma de trabajar existe y se llama ASCII-ART.

      Comentario por asm86 | marzo 31, 2009 | Responder

  6. Calors:

    1.
    Los puedes sumar de izquierda a derecha o de derecha a izquierda, no importa el orden si no su valor dependiendo de la posicion del bit.

    2.
    WWW significa: World Wide Web. que en español es algo asi como red de area mundial.

    Comentario por Puerco | marzo 31, 2009 | Responder

  7. chinguen a su madre yo solo quiero saber cuantos bit caben en un byte

    Comentario por gerardo | octubre 20, 2009 | Responder

    • 8

      Comentario por asm86 | octubre 20, 2009 | Responder

  8. solo kiero agradecer las excelentes xplicaciones que das, yo studio ing en sistemas y la verdad es q los profesores (la mayoria, no to2) se preocupan solo por cumplir, realmente no les interesa si te kedo alguna duda, ahí cada kien se “rasca” como puede (perdon la xpresion)..en este tuto he encontrado muchas respuestas a mis dudas, explicas de una manera super transparente, te entiendo a la perfeccion, muchas gracias!!
    dtb

    Comentario por karen | abril 24, 2010 | Responder

    • Gracias, es bueno saber que hay quienes encuentran util esta informacion. Tengo mas notas publicadas mas o menos en esa misma fecha que hablan sobre casi todo lo que se ve en la mayoria de los planes de estudios de ingenieria de la materia de ensamblador. Igual y le muestras este blog a tus maestros para que lo usen en sus clases.

      Comentario por asm86 | abril 24, 2010 | Responder

  9. Eh Mario, no les hagas la tarea.

    Comentario por blackpig | abril 8, 2011 | Responder

  10. no entiendo nada xD

    *un byte son 8 bits o 255 bits?

    *por que son 8 cuadritos?

    *cada cuadrito es un bits?

    *un bit es 255? un byte son 8 bits?

    Comentario por armoryneSKY | febrero 7, 2012 | Responder

    • Paciencia, esto es dificil
      Cada cuadrito es un bit que puede valer cero o uno. Con 8 bits puedes hacer 255 combinaciones de ceros y unos
      En un byte los 8 bits (cuadritos) tienen los siguientes valores: 128, 64, 32, 16, 8, 4, 2 y 1.
      Si haces la prueba puedes obtener cualquier valor entre 0 y 255 con solo sumar algunos de estos numeros sin repetir ninguno (0 ninguno 255 todos)
      el cero indica que no sumas el numero y el uno que si lo sumas
      Por separado cada cuadrito es un BIT que puede valer CERO o UNO y cuando se juntan puedes formar cualquier valor entre cero y una potencia de 2 (1, 2, 4, 8, 16, 32, 64, 128…)
      Hay mejores explicaciones en entradas que vas a encontrar mas adelante, asi que no te preocupes demasiado si no entiendes algo y tomalo a la ligera

      Comentario por asm86 | febrero 7, 2012 | Responder

      • Corrección, con 8 bits puedes hacer 256 combinaciones de ceros y unos, el número máximo que puedes representar es el 255.

        Les dejo un enlace a mi blog que no actualizo muy seguido pero me divierto, buen blog, felicidades!

        http://blogeek-cpp.blogspot.mx/

        Comentario por Carlos Morales | octubre 10, 2012

    • 1) un bit es el nombre que se le da a la señal de voltaje, cuando hablan de ceros y unos es solo para que sea mas familiar, en realidad lo que sucede internamente es la presencia o ausencia de señales, cuando hay 5 voltios es un uno cuando hay 0 voltios es un cero
      ejemplo; 0 1 0 1 representa: 0 voltios 5 voltios 0 voltios 5 voltios. Entonces la cadena 0 1 0 1 es una cadena de cuatro bits, la cadena 1 0 1 0 1 1 1 es una cadena de 7 bits y así sucesivamente, a una cadena de 8 bits se le llama byte, 255 es el numero que representa cuando toda la cadena esta en 1 es decir
      1 1 1 1 1 1 1 1= 255
      2) Los cuadritos solo son posiciones de memoria es para que cada cuadrito represente un bit
      3) No un bit no son 255 mas bien una cadena de 8 bits todos en estado 1 son 255
      si un byte son 8 bits

      Comentario por Elkin San | noviembre 5, 2013 | Responder

  11. eso es todo!! Carlos morales! 256 combinaciones de bits(0 y 1) un byte=8bits y con esos bits puedes representar los numeros entendibles para seres humanos(decimales) del minimo 0 hasta el maximo 255.

    Comentario por Guillermo Magana Ventur | diciembre 27, 2012 | Responder

  12. Tengo una pregunta para ustedes grandes conocedores, es la siguiente:
    necesitar hacer que un programa tenga autoguardado es decir se guarde un documento cada cierto tiempo
    el programa esta licenciado, necesito ver su codigo de fuente y editar desde hay. Me podrian ayudar

    Comentario por alex daniel | febrero 15, 2013 | Responder

    • El autoguardado simplemente revisa la última vez que se guardó el documento y guarda en un archivo lo que está en memoria cada cierto tiempo. Por ejemplo si quieres que guarde cada 5 minutos inicializas una variable en 3000 y restas una unidad cada segundo. Cuando llegue a cero guardas el documento y vuelves a ponerle su 3000 (o la cantidad de segundos que quieras) a la variable. Un autoguardado es así de sencillo.

      No se que tipo de programa sea pero si es muy avanzado y tiene capacidad de macros puedes hacer una macro que autoguarde los documentos sin necesidad de modificar el código. Si quieres trabajar con un código de otra persona mejor crea una función que se llame cada cierto tiempo y autoguarde en lugar de modificar el código ya hecho. Hacer ingeniería inversa al software es mucho mas dificil de lo que la gente cree. Incluso es mas dificil que hacerlo. Un autoguardado en pseudo C sería como esto

      //en algún lugar de la inicialización de variables
      tiempoautoguardado = 3000; //3000 segundos

      //función de autoguardado
      int autoguardar(int tiempo)
      {
      if(tiempo <=0)
      {
      guardar();
      tiempo = 3000
      return tiempo
      }
      tiempo–;
      return tiempo;
      }

      //llamada a función

      tiempoautoguardado =autoguardar(tiempoautoguardado);

      esto puede darte una idea. Solo recuerda inicializar el tiempo de autoguardado una sola vez y llamar la función cada segundo. Puedes revisar las funciones de tu sistema para obtener el tiempo en segundos

      Comentario por asm86 | febrero 16, 2013 | Responder

  13. gracias por tu respuesta, me ayudo mucho, no hare ingenieria inversa lo hare con pseudo c

    Comentario por alex daniel | febrero 17, 2013 | Responder

  14. y a cuanto equivale un byte en numeros?

    Comentario por fernando gil | junio 4, 2013 | Responder

  15. xD men me ayudaste full Gracias

    Comentario por steven | septiembre 4, 2013 | Responder

  16. cinco semestres de tecnología en electrónica y he resuelto mas dudas leyendo este documento

    Comentario por Elkin San | noviembre 5, 2013 | Responder

  17. Viejo que puedo decir, comense a leer estos articulos por mera curiosidad y ya no puedo despegarme, realmente es un tema que llama mi atencion, sigue asi.

    Comentario por DNX | abril 5, 2014 | Responder


Deja un comentario

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

Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.

Únete a otros 49 seguidores

A %d blogueros les gusta esto: