Ensamblador VS C

By on Nov 11, 2014 in Blog | 3 comments

El adentrarse al mundo de los microcontroladores  para muchos no es una elección sino una obligación ya que la tira de materias de la escuela muchas veces la exige y para muchos el camino ya esta trazado es decir según la predilección del maestro y sus conocimientos nos introducirá a lenguaje ensamblador o lenguaje C.

Pero hay una pequeña parte de estudiantes que tienen la elección de aprender a programar microcontroladores según su elección ya sea porque el profesor les ha regalado ese derecho o porque simplemente te ha interesado el tema y quieres aprender a programarlos.

Un detalle que me gustaría aclarar es que cuando me refiero a la palabra “estudiante”  no quiere decir exclusivamente alguien que se esta formando en un centro de estudios ya sea facultad, bachillerato, colegio, etc. Me refiero a todo aquel que por alguna razón ha dejado la comodidad del sillón y decidio aprender un tema en especifico.

 

BIT

 

El lenguaje ensamblador  también es llamado lenguaje de bajo nivel y se le llama así porque es el lenguaje mas directo para programar un microcontrolador después de los nemónicos   generalmente  lo vamos a ver de la forma “LDAA, PORTB” es un lenguaje muy especifico y exacto .

Lenguaje C es conocido también como lenguaje de alto nivel y generalmente engloba muchas instrucciones de ensamblador y lo vamos a ver de la forma  “lcd_putc([“Hola Mundo“)” en este ejemplo se manda a desplegar en una LCD el mensaje “Hola mundo ” que en ensamblador  llevaría cuando menos 200 instrucciones.

Una de las cosas que gusta a muchos sobre el ensamblador es que tienes el control total sobre el microcontrolador que si bien es una ventaja si hace mas pesado la elaboración de un programa.

Con C la situación es más automática lo cual hace la elaboración del programa mas sencillo pero con cierta pérdida del control.

Como se que para muchos esta explicación los ha dejado como al principio vamos con una analogía.

 

ROBOT

 

Imaginemos que tenemos el control de un ser humano, el cual obedece nuestras ordenes y deseamos que de tres pasos hacia adelante (imaginemos que se encuentra de pie en un estado inicial) en ensamblador tendríamos que hacer a grandes rasgos algo asi:

→ Levanta la pierna izquierda

→ Impulsate hacia adelante

→Estira la pierna izquierda

→Levanta la pierna derecha

→Acerca la pierna derecha a la izquierda

→Estira la pierna Derecha

Este procedimiento lo tendría que repetir 3 veces para dar 3 pasos hacia adelante.

Con lenguaje C sería algo asi

→ Da un paso

→ Da un paso

→ Da un paso

En apariencia lenguaje C parece ser la mejor opción  pero veamos porque hay esa  diferencia.

Nuestro microcontrolador no entiende lenguaje C, el entiende mnemónicos que son números que generalmente vienen representados en números hexadecimales , a algunos de nosotros nos toco programar nuestro precioso microprocesador 8085 en nemónico y créanme terminas viendo números hexadecimales en todas partes, pero llego ensamblador que  si bien tenia cierto parecido con nemónico le dio mas coherencia a las líneas de programa . Los desarrolladores de lenguaje C para microcontroladores  agrupan instrucciones de ensamblador y las sintetizan a una sola instrucción, retomando el caso del cuerpo humano en ensamblador se tuvieron 6 lineasde código  el desarrollador de lenguaje C tomo esas 6 lineas de código las metio en una librería  en la cual puso una instrucción que le llamo “Da un paso”.

 

binarios

 

Todo parece indicar que no hay una buena razón para aprender ensamblador , pero… que pasa si la metodología que siguió el desarrollador de C para llevar a cabo un proceso no nos convence del todo, retomemos el ejemplo del cuerpo humano,  que pasa si sigo esta instrucciones para una persona que es alta o baja obviamente va a ver mayor o menor desplazamiento y si me importa la distancia de desplazamiento pues esas instrucciones en lenguaje C me quedan cortas pero como así esta diseñado o me acoplo con esas instrucciones o lo hago en ensamblador , a eso me refiero  con la perdida de control en lenguaje C.

Ya en términos formales cada uno de ellos tiene su fortaleza, mientras con lenguaje C la simplicidad nos ayuda a la rapidez para elaborar un programa, en ensamblador la exactitud es nuestro fuerte.

Y a todo esto ¿realmente vale la pena aprender ensamblador? Yo fui de los que aprendio primero con mnemónicos luego con ensamblador y finalmente lenguaje C, y siendo sinceros el 80% de mis programas los elaboro en lenguaje C, en diez años que llevo programando en lenguaje C me he topado con al menos 5 errores en el compilador C, errores que muchas veces me llevaron a revisar librerías de lenguaje C y modificarlas en ensamblador o acoplarlas a mis necesidades especificas y esto me ha hecho ganar proyectos y elaborarlos mas rapido, asi que a mi si me ha servido y mucho.

 

Human brain function represented by red and blue gears

 

¿A quien recomiendo aprender ensamblador? A todo el que desee aprender mas a fondo la programación de microcontroladores, pues si bien al menos en mi experiencia no ocupo mucho ensamblador el  haberlo aprendido me ayudo porque aprendi también mas sobre electrónica pues para empezar a interactuar con cualquier dispositivo llamese LCD, reloj de tiempo real (DS1307), memorias EEPROM, DAC, Buffer, etc  requieres leer y releer la hoja de datos de estos dispositivos y empezar a aventurarte a jugar con ellos con sus respectivos fallos y aciertos, y este conocimiento muchas veces hace la diferencia para ganar un puesto de trabajo, vencer en un concurso, o ganar licitaciones asi como algunos proyectos ya que te ayuda pensar diferente. Pero sí, desafortunadamente requiere mucho trabajo.  Asi que ensamblador es para todo aquel que desea mas conocimiento, le gusta la precisión, las cosas a detalle y que odia las “cajas negras”.

¿A quien recomiendo aprender lenguaje C? Tambien a todos, si bien ensamblador es exacto hay ciertas cosas que lenguaje C nos facilita, recuerdo mi primer programa en C el mentado “Hola mundo” en una LCD no podía creer que mis 200 lineas de código ensamblador fueran sustituidas por 3 lineas en lenguaje C , ese dia me sentí como su hubiera perdido el tiempo estudiando ensamblador, después me di cuenta que no fue asi pero bueno la idea es esa, simplicidad, pero no por eso poco poderoso, si no pregunten a aquellos que nos toco hacer una multiplicación o una división de números decimales o hacer un filtro pasabajos en ensamblador , ese si fue un dolor de cabeza, en lenguaje C solo escribes la formula y listo.

Como verán a estas alturas mi forma de ver estos dos lenguajes no son como rivales sino mas bien complementos,  como tal cada uno de ellos es fuerte en ciertas cosas y juntos son un arma muy poderosa.

Retomando una pregunta de uno de nuestros lectores  ¿Qué aprendo primero?

Creo que aprender primero lenguaje C es una ventaja porque nos introduce al mundo de los circuitos digitales de manera mas amigable y sencilla,  y para la mayoría eso va a ser mas que suficiente , ensamblador lo puedes aprender después cuando sientas que necesitas aprender mas cuando lenguaje C te ha empezado a hacer las cosas mas difíciles que fáciles.

 

 

    3 Comments

  1. Excelente muy bien explicado por fin¡¡ me había cansado de buscar info.

    jose

    15 marzo, 2019

    • GRacias por tomarte el tiempo de leernos Jose.

      Nextia Fénix

      20 marzo, 2019

  2. Gracias por compartir tu experiencia, tengo tanto deseo de aprender a programar un micro controlador

    jose

    17 junio, 2019

Post a Reply

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *