Más allá del aprendizaje ensamblado, creo que aprender cómo se compila un lenguaje de bajo nivel como el C es muy valioso. Entonces mi respuesta es sí, pero de nuevo probablemente sea parcial porque disfruto de la programación de bajo nivel.
Por ejemplo, simplemente entendiendo cómo se compilan las declaraciones simples. La siguiente función,
int func(int val)
{
int num = val * 5;
return num;
}
... se convierte (al menos un poco interesante):
movl %edi, -20(%rbp)
movl -20(%rbp), %edx
movl %edx, %eax
sall $2, %eax
addl %edx, %eax
Este código toma el argumento de la pila (val, el parámetro a func), lo desplaza a la izquierda 2 lugares (multiplíquelo por 2 ^ 2 o 4) y luego agrega el valor original al resultado. El resultado final es una multiplicación por 5. Un ejemplo como este ilustra una serie de cosas a tener en cuenta, como las optimizaciones del compilador. En lugar de llamar a una instrucción para multiplicar directamente por 5, cambia dos lugares para multiplicar por 4 y luego agrega el valor original. Encontré ejemplos como este para mejorar en gran medida mi comprensión de las cosas en un nivel inferior.
Genere la salida del ensamblador desde gcc con la -S
opción Sin embargo, tenga en cuenta que los resultados variarán según el compilador y el nivel de optimización.
De todos modos, no creo que ser un programador de lenguaje ensamblador sea lo mismo que entender ensamblar . Nuevamente, siento que programar en un lenguaje como C y saber cómo se pone en el código de la máquina es una práctica valiosa.