¿Por qué todavía se necesita el lenguaje ensamblador si tenemos lenguajes de alto nivel que ofrecen herramientas sofisticadas? [cerrado]

En la universidad he realizado el curso obligatorio de Arquitectura de Computadores y Programación en Lenguaje Ensamblador. He encontrado que el lenguaje ensamblador consume bastante tiempo y es difícil de entender. Todavía no puedo entender la razón por la cual se enseña el lenguaje ensamblador. Le hice la misma pregunta a mi instructor y él sonrió y dijo que lo conocerás en el futuro. Pero tengo una naturaleza que no puedo esperar tanto por la respuesta una vez que una pregunta se burla de mi mente. Así que quiero preguntar por qué todavía necesitamos el lenguaje ensamblador si hay lenguajes de programación muy potentes, rápidos y eficientes y, además, dichos lenguajes ofrecen una amplia variedad de herramientas que facilitan la programación. ¿Entonces por qué?

preguntado el 04 de julio de 12 a las 06:07

Los lenguajes de alto nivel no saben casi nada sobre el hardware y, a menudo, no tienen forma de acceder a él. Ahí es donde la asamblea viene a rescatar. El otro uso es la optimización de tamaño/velocidad del código. -

Esta pregunta parece encajar mejor en programadores.stackexchange.com. Sin embargo, en resumen: porque todos los lenguajes de alto nivel se compilan automáticamente en ASM. Esto no le da control sobre el resultado final, sobre lo que la computadora realmente hace. Y aunque los compiladores son buenos, no pueden conocer todos los pequeños trucos y optimizar el código a la perfección. Si desea el máximo rendimiento, necesita un control total sobre lo que hace la computadora en cada pequeño detalle, que un lenguaje de alto nivel no le brinda. -

2 Respuestas

Una buena razón es que todos los lenguajes de programación son una abstracción de cómo funciona una computadora. En teoría, para lenguajes de alto nivel, la abstracción significa que el programador nunca tiene que preocuparse por los detalles de la computadora.

Pero el la abstracción siempre tiene fugas, por ejemplo, la mayoría (si no todos) los lenguajes de alto nivel no se optimizan automáticamente muy bien para los cachés de la CPU (por ejemplo, la coherencia de caché y el uso compartido falso) y el multiproceso eficiente siempre es complicado. Esto significa que si el rendimiento es crítico, el programador podría tener que escribir su código de manera diferente.

La mejor manera de obtener el rendimiento es comprender cómo funciona la máquina para que el programador pueda realizar grandes transformaciones arquitectónicas que un compilador no puede realizar fácilmente. Por ejemplo, asegurarse de que los subprocesos procesen los datos en múltiplos de 64 bytes (para reducir el intercambio falso en las líneas de caché) o realizar una transformación de matriz de estructuras ⇔ estructura de matrices.


El ensamblado (y C hasta cierto punto) es una muy buena manera de aprender estos detalles de rendimiento, ya que hace que sea muy fácil entender exactamente lo que está haciendo la computadora porque controlas exactamente lo que sucede en cada paso.

(El punto de abstracción con fugas también se aplica al acceso a componentes de hardware específicos/personalizados).

Respondido 05 Jul 12, 05:07

Muchas gracias por tu respuesta. Ahora me aclaró la necesidad del lenguaje ensamblador. - Juan Tota

El código de máquina todavía es necesario para tareas clave, por ejemplo

  • Código específico de hardware, como controladores de dispositivos
  • Dispositivos integrados, donde el tamaño del código es importante
  • Código de bajo nivel donde el rendimiento es crítico, etc.

A menudo, el lenguaje ensamblador se puede mezclar con lenguajes de nivel superior, como C, donde el ensamblador se puede agregar en línea al código C.

Dicho esto, sigue siendo una buena idea comprender la arquitectura de hardware subyacente incluso si va a programar en un lenguaje de alto nivel, ya que le dará una idea de cómo funcionan las pilas, montones, punteros, etc.

Respondido 04 Jul 12, 08:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.