tipos maquina lenguaje instrucciones historia ensamblador ejemplos programming-languages assembly nasm

programming languages - maquina - ¿Vale la pena aprender el lenguaje ensamblador?



lenguaje maquina pdf (7)

¿Tiene algún uso para eso en lo que planea hacer? ¿Te ayudará de alguna manera en lo que actualmente haces o piensas hacer? esas son las dos preguntas que debe hacerse, la respuesta a ellas es la respuesta a su pregunta.

En un sentido más general, sí, yo diría que en mi opinión vale la pena aprender asm (algo así como x86 o arm), qué tan bien te sirve depende de lo que programes y cómo lo depures.

¿Todavía vale la pena aprender ASM ?

Sé un poco de eso, pero realmente no lo he usado o no lo he aprendido correctamente porque todo lo que aprendo hacer en ensamblador lo puedo hacer en 1/10 de las veces con algún lenguaje como C o C ++. Entonces, ¿debería realmente aprender y usar ASM? ¿Me hará algún bien profesionalmente? ¿Aumentará mi ingenio? En resumen, ¿me haría un mejor programador?

Nota: Estoy hablando de ensamblaje de bajo nivel como FASM o NASM y no algo como HLA (ensamblador de alto nivel).


Aprendí del libro de Kip Irvine . Si ignoras las críticas (justas) de sus bibliotecas (irrelevantes), puedo recomendarlo como una buena introducción al idioma en sí, aunque para las cosas realmente interesantes tienes que buscar obsesivos en la red.

Creo que es útil entender lo que sucede en los niveles inferiores. A medida que investigas el ensamblador, aprenderás sobre el pipeline, predicción de bifurcación, alineación de caché, SIMD, reordenamiento de instrucciones, etc. El conocimiento de estos te ayudará a escribir un mejor código de alto nivel.

Además, la sabiduría convencional es no tratar de optimizar a mano el ensamblaje la mayor parte del tiempo, sino dejar que el compilador se preocupe por ello. Cuando vea algunos ejemplos de las cosas retorcidas que generan los compiladores, comprenderá mejor por qué se sostiene la sabiduría convencional.

Ejemplo: los LFSR se ejecutan rápidamente con la instrucción de rotar con carga, para casos específicos como este, es tan fácil escribir la versión del ensamblador como descubrir si el compilador es lo suficientemente inteligente como para descubrirlo. A veces solo sabes algo que el compilador no sabe.

También aumenta su comprensión de los problemas de seguridad: escritura o ejecución, sobrescrituras de pila, etc.

Algunos problemas de concurrency solo se ponen de manifiesto cuando conoce lo que sucede en el nivel por instrucción.

Puede ser útil a veces cuando se depura si no tienes el código fuente completo.

Existe el valor de curiosidad. ¿Cómo se implementan las funciones virtuales de todos modos? ¿Has intentado alguna vez escribir programas DirectX o COM en ensamblador? ¿Cómo se devuelven las estructuras grandes? ¿Ofrece la función de llamada un espacio para ellas o viceversa?

Luego, existen lenguajes de ensamblaje especiales para hardware de gráficos, aunque los lenguajes de sombreado fueron de alto nivel hace algunos años, cualquier cosa que le permita pensar en un problema de otra manera es bueno.


Me parece interesante que tanta gente salte para decir que sí, que necesitas / deberías aprender a ensamblar. Para mí, la pregunta es ¿cuánto ensamblaje necesitas saber? No creo que tenga que saber ensamblar como un lenguaje de programación, es decir, no creo que todos puedan escribir un programa en ensamblador, pero por otro lado, poder leerlo y entender lo que realmente es significa (que podría requerir más conocimiento de la arquitectura que el ensamblador) es suficiente.

Estoy seguro de que no puedo escribir en ensamblador (es decir, escribir cualquier pieza de código no trivial en el ensamblaje), pero puedo leerlo y eso, junto con el conocimiento de la arquitectura de hardware real, y las convenciones de llamada que se utilizan es suficiente para analizar el rendimiento y identificar qué parte del código C ++ fue la fuente de ese ensamblaje.


Sí, la razón principal para aprender ensamblaje para desarrolladores de C y C ++ es que ayuda a comprender lo que sucede bajo el código C y C ++. No es que vayas a escribir código en ensamblado, pero podrás ver el desensamblaje del código para evaluar su eficiencia y comprenderás cómo las diferentes características de C y C ++ funcionan mucho mejor.


Saber ASM también es útil cuando se depura, ya que a veces todo lo que tienes es "volcado de ASM del error".


Vale la pena aprender muchos idiomas diferentes, de muchos paradigmas diferentes. Aprender Java, C ++, C # y Python no cuenta, ya que todas son instancias del mismo paradigma.

Como el ensamblado está en la raíz (bueno, cerca de la raíz) de todos los idiomas, por mi parte, digo que vale la pena aprender a ensamblar.

Por otra parte, vale la pena aprender un lenguaje de programación funcional, programación lógica, lenguajes de scripting, lenguajes matemáticos. Usted solo tiene mucho tiempo, entonces tiene que escoger y elegir.


Depende de qué nivel de programación deseas alcanzar. Si necesita trabajar con depuradores, entonces SÍ. Si necesita saber cómo funcionan los compiladores, entonces SÍ. Cualquier ensamblador / depurador depende de la CPU, por lo que hay mucho trabajo, solo revisa la familia x86, qué tan grande y viejo es.