domingo, 28 de julio de 2013

Porque Aprender Assembler

Primero una consideración, si estas leyendo este post es probable que tengas alguna motivación adicional para aprender el lenguaje ensamblador que podría ser tienes algún curso de ensamblador en la universidad, queres impresionar a tu novia mostrandole tu "leetness", o no tenes novia y simplemente queres aprender ensamblador (supongo que han de haber otras razones...).
 
Razones para aprender ensamblador
  • Tiene cierta belleza realizar programas con un tamaño muy pequeño y muy rápidos
  • Se tiene un mayor conocimiento de las computadoras así no te pones tan extrañado cuando ves un mensaje tipo:
 "The instruction at "0x00ccd2cd" referenced memory at "0x00000000", The memory could not be "written" "
  • Es un reto, y si sos de las personas que disfrutan de un buen desafío aprender ensamblador requiere cierto conocimiento de como funciona a bajo nivel el ordenador, el direccionamiento de la memoria, registros de CPU, uso de segmentos.
  • Los programadores con experiencia en ensamblador suelen producir un código mas rápido en lenguajes de alto nivel.
  • Los si programás en ensamblador vas a ser mas disciplinado (si no tenes cuidado de lo que escribís tu programa va a morir de forma muy dolorosa).
  • Es divertido
  • Software de calidad puede ser escrito en ensamblador, sino preguntenle a Steve Gibson creador de Spinrite.
  • Nikolaus Wirth y su "El software se ralentiza mas deprisa de lo que se acelera el hardware", o que la computadora que envió al hombre a la luna el Apolo Guidance Computer tenia 64Kbyte de memoria (muy poquita memoria) y operaba a 0.043Mhz (muy poquita capacidad de procesamiento). Un cliente de twitter utiliza mas memoria que la utilizada para enviar a un hombre a la luna y mas recursos de procesamiento son utilizados en el conjunto de maquinas que se encargan de la transmisión de un tweet que los que se utilizaron para enviar a un hombre a la Luna! solo para que alguien inmortalice el estado de su estomago twitteando "tengo hambre" oh!, la humanidad!.
Para que vas a utilizar ensamblador

  • Para hacer demos!

  • Programar drivers para dispositivos, si te gusta la electronica y te inventas algún dispositivo interesante vas a tener que utilizar C o ensamblador para controlarlo desde la PC.
  • Optimizar ciertas segmentos de codigo en lenguajes de alto nivel.
  • Divertirse, hay proyectos muy interesantes escritos completamente en ensamblador como MenuetOS
Para que no vas a utilizar ensamblador
  • Programarte un "Crisis" por completo.
  • Crear aplicaciones multiplataformas porque los programas en ensamblador varían de un Sistema Operativo a otro y de una Arquitectura de Hardware a otra.
  • Sustituir a un lenguaje de alto nivel como java o .net
En conclusión programar en ensamblador te concede un vasto poder sin embargo no es para los débiles de mente, para forjar programitas para gobernarlos a todos se requiere mucha experiencia, en estos tiempos en que las plataformas móviles y el desarrollo web están en auge, puede que pareza un poco pasado de moda  y hablando desarrollo web luego hablamos sobre asm.js.

Recursos recomendados

  • El projecto MASM32: que incluye una gran cantidad de librerias optimizadas para el desarrollo de aplicaciones de forma mas rapida y sus archivos de ayuda como masm32.chm donde está la historia del proyecto y una introducción al uso de las librerias y el archivo masmlib.chm donde esta referencia de las librerias.
  • El libro The INTEL Microprocessors de Barry B. Brey es un buen libro sobre programación en ensamblador aunque un poco veterano es facil encontrar en internet.
  • Un buen editor de  texto yo recomiendo Vim.