Programación en Lenguaje Ensamblador

-El Verdadero Lenguaje de las Máquinas-

Prog, Hex and Rock’n’Roll

–Todo Sobre el Sistema Hexadecimal–

Los sistemas numéricos son un mal necesario en el mundo de la computación, de hecho, el sistema decimal es sencillo de manejar y es el que mejor conocemos, pero para la computadora no significa nada. El binario es su idioma nativo y es con el que trabaja. Pero es demasiado tardado y confuso usarlo. La pregunta de los 65,536 sería ¿Habrá un sistema numérico que tenga las ventajas de ambos? La respuesta es si, se llama sistema hexadecimal y será el tema de esta nota.

Antes de continuar, se que este blog tiene 2 tipos principales de lectores (sin contar a los que vienen por la botana y a ligar) la primera clase son los lamercitos de escuela que les dejan de tarea copiar e imprimir páginas de internet como esta y la otra, los menos, son los principiantes que realmente les interesa el Ensamblador. En realidad, sería raro que un programador de cierto nivel buscara información en español. Mas bien teclean “Assembly Language” en el Google. Así que tomaré esto con calma.

Los ‘números’ de todos los días son 10, y van del 0 al 9. Los hexadecimales son 16. Se usan las letras de la A a la F para representar del 10 al 15. Vean la siguiente tabla:

DECIMAL   HEXADECIMAL       BINARIO

      0             0          0000

      1             1          0001

      2             2          0010

      3             3          0011

      4             4          0100

      5             5          0101

      6             6          0110

      7             7          0111

      8             8          1000

      9             9          1001

     10             A          1010

     11             B          1011

     12             C          1100

     13             D          1101

     14             E          1110

     15             F          1111

Esta tabla es importante, así que les recomiendo que la impriman y la peguen en la pared junto al programa PEDEMO.EXE del Fasm. Ahora veamos como hacer las conversiones rápidas.


cuadro gris

El primer paso para convertir un número a sistema Hexadecimal es convertirlo a binario. Moverse entre decimal y hexadecimal es mentalmente muy tardado y requiere mucha experiencia. Para el caso de las celdas de un BYTE, primero hay que escribir los 8 bits. Esa ristra de ceros y unos se parte en 2 mitades de 4 bits cada una y a continuación se convierte cada una de estas viboritas(llamadas NIBBLES en los libros mas antiguos) equivale exactamente a una cifra Hexadecimal. El dibujo que acompaña a esta entrada describe de manera clara como se convierte una celda de 8 bits a hexadecimal. Pero antes de que se harten y se vayan a trabajar en Visual Basic (las palabras ‘programar y ‘Visual Basic’ no pueden ir en la misma frase) veamos algunas de las virtudes de los números hexadecimales:

*La conversión entre Hexadecimal y Binario se puede hacer mentalmente de manera muy rápida.

*Con solo ver un número hexadecimal podemos saber cuantos bits se necesitan para representarlo.

*Podemos saber si un entero es positivo o negativo con solo ver su primer cifra hexadecimal.

*En cuanto a las posiciones de memoria. Podemos saber si están alineadas adecuadamente por la cantidad de ceros al final.

*No importa que número representemos, mientras solo usemos 2 cifras no sobrepasaremos el límite de un byte. Lo mismo aplica para las 4 cifras en un word(l6 bits) y 8 cifras para el DWORD (32 bits)

*El máximo número representable por un byte es ‘FF’, de un word es ‘FFFF’ y de un dword es ‘FFFFFFFF’. En el caso de la aritmética entera, estos números también significan menos uno.

*Si no aprenden Hexadecimal van a cagar chayotes cuando quieran programar de verdad. Así que pónganse a practicar o si no vayan buscándose algún trabajo mas sencillo como hacer querys.

Existe otro sistema llamado Octal, que es lo mismo pero cada cifra es representada por 3 bits. No se usa mucho, solo lo he visto para representar OpCodes en Intel y algunas cosas con los discos duros. Y si ya se aburrieron esperen a ver lo que sigue, será una auténtica ‘bienvenida al Mundo Real’.

>>>>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.

Anuncios

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

13 comentarios »

  1. Me gusto mucho la entrada, en especial esta parte “las palabras ‘programar y ‘Visual Basic’ no pueden ir en la misma frase”, cuanta verdad, si señor!

    Saludos

    Comentario por Anon | febrero 6, 2012 | Responder

  2. jeje esto lo entendi mas rapidoque lo anterior,solo sube que ver la imagen xD,

    unas pregunta:

    1.porque pones que aun contiene 200 decimal fin ?

    porque segun la tabla 12+8 es igual a 20(C+8 = 20 > C8 = 20)

    2.pusistes la C primero que el numero 8.porque? como ago para saver cual va primero y cual va despues?

    te guias por el que sea mayor? o por el orden en el que esta el bit?
    o bien hay una regla a seguir para saver cual va primero y cual no?
    —————————————————————————————————–
    yo tengo una programa hesdacecimal llamado pspad editor,te permite manejar toda cosa anivel hexadecimal con el me puedo ayudar mucho en ensamblador verdad?,ya que me sirve de traductor yo simplemente escribo en un lugar lo que quiero y el programa lo pone a la izquierda en hexadecimal, el hexadecimla no se colocan solo numeros sino tambien pueden ser colocadas letras(para formar palabras,frases etc)

    Comentario por armorineSKY | febrero 8, 2012 | Responder

    • En hexadecimal existe el valor posicional como en decimal, cada posicion a la izquierda multiplica por 16 como en los numeros normales se multiplica por 10. Con 2 cifras hexadecimales se representan los 8 bits de un byte, la de la izquierda los 4 bits mas altos y la segunda los 4 mas bajos, en el caso de C8 hexadecimal no es C + 8 sino C0 + 8 como en el numero catorce en decimal es 10 + 4 y no 1 + 4. Si no quieres batallar aqui van los valores hexadecimales del byte con los 4 bits bajos puestos en cero, o lo que es lo mismo de 16 en 16
      00h = 0
      10h = 16
      20h = 32
      30h = 48
      40h = 64
      50h = 80
      60h = 96
      70 = 112
      80h = 128
      90h = 144
      a0h = 160
      b0h = 176
      c0h = 192
      d0h = 208
      e0h = 224
      f0h = 240
      todos estos valores, si los escribes en binario veras que los 4 bits mas bajos (los de la derecha) siempre te van a dar cero

      Respecto al editor hexadecimal tenlo siempre cerca, se trata de una herramienta muy util e indispensable como programador de ensamblador. Ya veras que un dia vas a poder abrir con el un programa ejecutable extension .EXE y podras entender las instrucciones y los datos con solo ver esos numeros.

      Comentario por asm86 | febrero 8, 2012 | Responder

  3. OK muchas gracias,no te entendi muy bien xD,pero con ayuda de mi papa que estubo platicando una rato sobre esto con el,me explico y entendi my bin!

    tengo un editor hexadecimal, el cual al darle en nuevo proyecto me da la opcion de programar en muchos lenguajes d eprogramacion…el editor hexadecimal que tengo se llama pspad editor

    dentro de todos esos lenguajes estan: mmm bueno me da flogera escribirlos xD ya que son casi 30 xD pero el que mas me llamo la atencio fue cuando le di nuevo proyecto y en la lista aparecio x86 assembly

    y me acabo de preguntar lo siguiente: hay varios ensambaldores? hay en 32 y en 64 como ley por alli pero e 86 oO no entiendo eso alli xD

    PD: este mensaje lo escribo como 5 minutos después que tuve la charla con mi papa y vi lo del PSPad editor

    Comentario por armoryneSKY | febrero 11, 2012 | Responder

    • El ensamblador traduce directamente el código dado mediante las instrucciones a código máquina,el cual es interpretado directamente por el procesador. Cada procesador tiene un conjunto de instrucciones distintas (entre otras cosas) por lo que cada máquina tendrá su propio lenguaje ensamblador, aunque los distintos lenguajes tienden a parecerse entre sí.

      En concreto, el x86 hace referencia, si no me equivoco, a cierta familia de procesadores de Intel. No confundas lo de 32 y 64, que hace referencia a la longitud en bits de una palabra (o word) del procesador, es decir, a la máxima cantidad de bits que el procesador puede tratar de manera simultanea.

      Espero haberte ayudado. No he sido muy riguroso con las explicaciones pero espero que más o menos lo hayas entendido.

      Comentario por Shavee | marzo 26, 2012 | Responder

  4. Quiero agregar algo para colaborar simplemente. Utilizas el termino número con dos significado distintos. Recuerda que el sistema decimal utiliza 10 “cifras” (símbolos: 0,1,…,9) para representar cualquier cantidad. En el sistema hexadecimal se utilizan 16 “cifras” (símbolos: 0,1,…,9,A,B,…,F)
    Cada una de estas cifras tienen un valor absoluto y un valor relativo cuando se utilizan juntos para formar una cantidad mayor a la base. Espero haber colaborado.
    Por lo demás muy excelente y me identifico mucho con el autor en el hecho de querer saber que ocurre en la máquina. Es una enfermedad que no me la puedo quitar.

    Comentario por Armando | enero 27, 2014 | Responder

  5. Hola, yo soy de los lectores de esta web que quiere aprender ensamblador bajo linux, con gas. Soy completamente novato y después de muchos tutoriales, los cuales me han frustrado debido a mi nivel CERO en informática(algo de Python si he tocado), esta magistral lección de tu web me ha sorprendido. Porque aun no me he perdido y estoy motivado. GRACIAS POR TU GRAN ESFUERZO

    Comentario por Luis | febrero 9, 2014 | Responder

    • Lo que si me gustaría es que hubiese mayor seguimiento en las preguntas que se formulan en tan interesante y bien explicado paso a paso tema.
      ¡¡POR FAVOR ADMINISTRADOR!! LE PIDO MAYOR SEGUIMIENTO A LAS PREGUNTAS

      Comentario por Luis | febrero 12, 2014 | Responder

  6. Pues yo puse assembler en Google y me salió tu blog creo que como en séptimo lugar :)

    Comentario por Horacio Espinosa Barceló | agosto 23, 2014 | Responder

    • Lamentable este tipo de informacion es muy escasa incluso si buscas informacion en ingles, obvimente por la falta de interes general de la gente en el tema asi como la idea generalisada de que es algo imposible y poco practico.

      Si alguno de ustedes consigue buen material al respecto(sobre todo en cuanto a aspectos basicos del tema) contacten con migo y gustosamente hare la mejor traduccion posible al castellano.
      De hecho se los pido yo como favor y asi tratar de motivar a mas gente
      interesada en el tema(yo uno de ellos)

      escribanme si les apetece: Dnx666@live.com

      Comentario por Daniel Almanzar | febrero 26, 2015 | Responder

  7. Hola gracias por el curso soy de los principiantes que le ineteresa aprender esamblador, que tipo de problemas son buenos para aprender a convertir hexadecimales? algun libro o pagina con ejercicios

    Comentario por djav24 | agosto 26, 2015 | Responder

    • Todo lo que necesitas para hacer eso lo encuentras en esta misma entrada y tal vez otra que se llama ‘positivo y negativo’. El asunto al comenzar a programar en ensamblador es olvidarte de los números decimales y hacer todo en binario y hexadecimal. Cada 4 bits equivalen a un dígito hexadecimal y con dos dígitos hexadecimales puedes representar de 00 a FF que en decimal son 0 y 255. Toma en cuenta que los bits que estás usando siempre van a existir independientemente de que número sea mientras pueda ser representado por esos bits. Aprende de memoria los 4 bits altos del byte:
      10h=16
      20h=32
      30h=48
      40h=64
      50h=80
      60h=96
      70h=112
      80h=128
      90h=144
      0ah=160
      0b0h=176
      0c0h=192
      0d0h=208
      0e0h=224
      0f0h=240
      y las unidades:
      0h=0
      1h=1
      2h=2
      3h=3
      4h=4
      5h=5
      6h=6
      7h=7
      8h=8
      9h=9
      0ah=10
      0bh =11
      0ch =12
      0dh=13
      0eh=14
      0fh=15

      y no tendrás problema. Por cierto, hay dos maneras de escribir hexadecimales. La que yo uso siempre comienza con un dígito entre 0 y 9 y termina con la letra ‘h’ y si el primer dígito hexadecimal es a,b,c,d,e o f se pone primero un 0. Otra forma es escribir 0x y luego el numero. por ejemplo el 200 decimal sería 0c8h o 0xc8

      Comentario por asm86 | agosto 26, 2015 | Responder

      • Gracias por responder me pondré a practicar.

        Comentario por djav24 | agosto 27, 2015


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: