Programación en Lenguaje Ensamblador

-El Verdadero Lenguaje de las Máquinas-

Papando Moscas

–Mejor programar que fastidiar lamers–

insecto

Existe un viejo truco de magia que consiste en hacer creer que uno puede regresar una mosca muerta a la vida. El mago saca de una bolsa sellada lo que parece ser una mosca muerta y tras ponerla entre sus manos y recitar una o dos veces el Padre Nuestro al revés la mosca “milagrosamente” vuelve a la vida y vuela por el estudio hasta perderse en el cielo. El truco es muy sencillo: solo tienen que capturar una mosca viva sin hacerle el menos daño. Luego la ponen en el congelador. Las moscas son capaces de permanecer congeladas por días enteros sin morir. De ese modo, a la hora de hacer el truco, el insecto entra en calor por las manos del mago y vuelve a volar como si nada le hubiera pasado.

Cuento esta historia porque al parecer los lamers que parecían haberse congelado hace un par de meses han revivido y de nuevo vienen por pelea. Sospecho que muchos de ellos deben de ser estudiantes universitarios o gente relacionada con el ámbito académico porque este nuevo regreso coincide con el inicio de las vacaciones de verano. Asi que como ya acabaron de entregar sus últimos trabajos y presentado sus exámenes ahora tienen tiempo de seguir desarrollando lo que ellos llaman “La Industria”. De hecho, en cierto foro donde un servidor es un reconocido Troll, el día de ayer hubo un incremento desmedido en la actividad…

Bueno, ya me estoy saliendo mucho del tema y en mi experiencia esta clase de notas no me llevan a ningún lado. Asi que dejemos el tema de los lamers por un rato y hablemos un poco de como me ha ido en mi incursion en la tierra de la tribu Linux: Primero instalé CoLinux pero no fui capaz de configurarlo adecuadamente así que decidí seguir el consejo de uno de los comentarios e instalé VirtualBox de SUN. Este sistema es muy interesante y relativamente sencillo de configurar. Aunque todavía me falta por encontrar una versión de Linux menos demandante porque el viejo CD de Ubuntu que tenía por a\hi olvidado resultó demasiado sofisticada (en términos de funcionalidad) para mis fines, asi que tendré que buscar algo mucho mas minimalista. Di algunas ojeadas a un libro sobre programación en Ensamblador para Linux cuyo titulo es: “Guide to Assembly Language Programming in Linux” de un pariende de Apu de los Simpson llamado Sivarama P. Dandamudi y lo que vi es que la mayor parte del contenido ya lo había leido de los manuales de Intel. Aunque tiene un par de consejos rescatables que guardaré para otra nota.

Al parecer, la estructura de programa de linux es muy parecida a la de un programa de Windows en modo consola. Solo que para llamar al sistema operativo se usa la interrupcion 80h. Supongo que en cuanto acabe de instalar linux virtualizado en mi sistema podré hablarles de los que es programar en Ensamblador para Linux de verdad. Mientras tanto es mejor que busque mas documentación que en esto de la programación la capacidad para leer a veces es lo único que hace la diferencia entre poder hacer o no hacer las cosas. ¿Que sigue?

En cuanto acabe de instalar el linux publicaré un enlace a la referencia INT 80h y haremos algunos programitas que hagan cosas sencillas. Cabe aclarar que aunque tengo mucha práctica en Ensamblador, el mundo de Linux me es completamente ajeno asi que aquí les iré informando de todo lo que descubra. Hasta ahora la tribu Linux ha sido bastante condescendiente conmigo y al par de geeks que me han ayudado en los comentarios les doy las gracias. ¿O será acaso que los que verdaderamente odian el Ensamblador no se acercan por este blog? Sea como sea, y por si las moscas lo mejor es ponerse a programar porque en los proximos 2 meses voy a tener un poco mas de tiempo para escribir y programar. Pues este subito aumento de la actividad lamer significa que la cosa va a ponerse fea.

En otra nota les hablaré sobre algunas rivalidades que estoy construyendo…

Anuncios

julio 3, 2009 - Posted by | Uncategorized | , , ,

11 comentarios »

  1. Esto es lo que queria escuchar men…..espero ansiosamente eso articulos de asm en linux. (ojo)

    PD: Voi hacer la prueba con una mosca aver si es cierto el truco.

    Saludos.

    Comentario por Adel86_ | julio 7, 2009 | Responder

  2. Conoces MenuetOS ?[url]http://es.wikipedia.org/wiki/MenuetOS[/url]
    Qué opinas ?

    Comentario por Juan | julio 8, 2009 | Responder

    • Interesante experimento de un sistema operativo completamente hecho en Ensamblador. Puede decirse que es hijo del FASM. Aunque cuando lo probe apenas era un proyecto que mostraba un escritorio. Hoy es un sistema muy completo del que hablare en este blog algun dia.

      Comentario por asm86 | julio 9, 2009 | Responder

  3. ¡Saludos!

    Me da gusto saber que hay gente entusiasta de la programación en ensamblador. He leido algunos de tus artículos y me parecen muy interesantes.

    Confieso que no sé ni la diezmilésima parte del universo de ensamblador, pero lo que he aprendido hasta este momento me ha servido para comprender el funcionamiento de las computadoras, y me ha permitido entender algunos lenguajes de programación. Sostengo la idea de que si logras aprender ensamblador, puedes programar cualquier cosa que se te ponga en frente (léase PLC´s, PICs, memorias, DAQS y manejar periféricos…bueno, ¡hasta macros!). En si no tengo formación de programador, pero si de electrónica, por esta razón te lo digo.

    Es gracioso que comentes que en las universidades todavía impartan clases de ensamblador 8086. En donde egresé todavía lo tienen como parte del plan de estudios, y a muchos compañeros se que les fastidia porque es muy confuso, y que les resulta impráctico…que equivocados están.

    A mi me gustaría aprender ensamblador de 32 bits, porque estoy llegando a un punto en el cual el de 16 bits lo estoy empezando a “entender”. Mi meta a corto plazo es empezar a utilizar el coprocesador matemático y a programar en 32 bits. Por lo que he leido es una lata al principio, pero no importa, tendré paciencia je,je.

    Para terminar con mis rollos, diré que yo le tengo aprecio a la gente que conoce ensamblador. Suele ser gente creativa y capaz de resolver problemas complejos. Mis para bienes para todos ellos.

    Comentario por MSH | julio 10, 2009 | Responder

    • Sobre la programacion en 32 bits y el coprocesador matematico podras leer pronto en este blog.

      En los enlaces hay uno que te lleva directo a los manuales de Intel. En ellos viene explicado como programar las caracteristicas mas avanzadas del cpu como SSE4 y no solo la FPU (coprocesador).

      El link de la Web de Iczelion muestra como programar en 32 bits para Windows usando ventanas, iconos y todas esas cosas y el de Flat Assembler te lleva al sitio donde podras descargar gratuitamente uno de los mejores y mas actualizados compiladores de Ensamblador que he conocido.

      Suerte con esto del Ensamblador

      Comentario por asm86 | julio 12, 2009 | Responder

  4. EHH, tengo una super consulta, te cuento que usando el coprocesador el compilador no reconoce la funcion “fsin” y cuando se pone esta funcion calcula el coseno, y la pregunta es, conoces la funcion que me calcule el seno sin necesidad de sumarle al angulo que se quiere calcular pi/2?
    Es decir una funcion que calcule directamente el seno y que el MASM reconosca.

    Comentario por electronicaumsa | julio 12, 2009 | Responder

    • Si el problema es el compilador puedes intentar ingresar las instrucciones en codigo maquina puro, he aqui como es hace:

      db 0d9h, 0feh ; FSIN obtiene el seno del valor del tope de la pila FPU
      db 0d9h, 0ffh ; FCOS obtiene el coseno del valor almacenado en el tope de la pila FPU

      Ahora que si quieres comparar puedes probar la instruccion FSINCOS que te da ambos valores con una sola instruccion:

      db 0d9h,0fbh ;FSINCOS calcula el seno y coseno del tope del stack FPU y los guarda en los 2 primeros registros del stack

      Te recomendaria que buscaras una version mas actualizada del MASM si es que existe o que mejor cambies de Ensamblador porque el MASM y TASM que conozco no ensamblan instrucciones nuevas como las MMX, SSE, etc. Pero insertar el codigo maquina como se muestra arriba directo en la seccion de codigo deberia de funcionar. Creeme, un amigo y yo hicimos un programa que multiplicaba matrices con SSE usando solo codigo maquina. Aunque la copia del TASM era incapaz de ensamblarlo.

      Comentario por asm86 | julio 12, 2009 | Responder

  5. E respondiendo a eso de sistemas operativos hecho asm..pues aqui pongo algunos:

    http://dex4u.com/index.htm
    http://www.kolibrios.org/?&lang=en
    http://www.menuetos.net/
    http://octavio.vega.fernandez.googlepages.com/octaos
    http://www.oby.ro/os/
    http://visopsys.org/

    Estan muy interesantes todo…espero aprender mas sobre asm para entender el codigo fuente.

    Saludos.

    Comentario por Adel86_ | julio 13, 2009 | Responder

    • La manera mas rapida de aprender a programar en Ensamblador es estudiando directamente el codigo maquina. Si lo entiendes no tendras dudas con las combinaciones de operandos y direccionamientos raros. Todo eso puedes hallarlo en los Manuales de Intel cuyo link yace a la derecha de esta nota.

      Comentario por asm86 | julio 13, 2009 | Responder

  6. Hola, como estan? a mi m gusta programar en ensamblador
    creo q habemos pocos!!

    bueno creo q no tengo tanta experiencia como ustedes por q
    al leer sus comentarios m surgio la duda de ¿que es una pila
    FPU?

    la verdad no entendi eso chikos espero alguien m conteste

    gracias.

    Comentario por lucci | octubre 19, 2009 | Responder

    • Hola, una pila FPU es el sistema por el que una unidad de punto flotante(Floating Point Unit o FPU) maneja los resultados intermedios de un calculo complejo. Parece complicado pero la arquitectura de pila (stack) es muy util para resolver problemas algebraicos.

      Dentro de la FPU hay 8 registros que almacenan numeros en una notacion cientifica binaria conocida como IEEE 754. Pero en lugar de manejar los registros como si fueran registros generales o variables normales, se maneja como un stack. Hay una parte que siempre apunta al tope de ese stack y todas las operaciones se hacen entre ese tope del stack el operando origen. Tengo 2 entradas que hablan superficialmente de ambas cosas. En esta se habla sobre lo que son los numeros de punto flotante y lo que es una FPU, y en esta otra se trata de como funciona una pila de manera general pero clara.

      Una pila FPU o FPU Stack es una combinacion de ambas notas. Nada mas no te confundas, pues estas “pilas” no tienen nada que ver con las baterias de energia ni nada de eso, por eso es mejor usar la palabra STACK para evitar malentendidos. Espero mas adelante hablar con mas detalle de la FPU.

      Comentario por asm86 | octubre 19, 2009 | 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: