2012-07-04 11 views
5

En la universidad he tomado el curso obligatorio de Arquitectura de Computadores y Programación de Lenguaje de Montaje. 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 sabrá en el futuro. Pero tengo una naturaleza que no puedo esperar tanto tiempo 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 de eso, estos idiomas ofrecen una amplia variedad de herramientas que facilitan la programación. ¿Entonces por qué?¿Por qué todavía se necesita lenguaje ensamblador si tenemos idiomas de alto nivel que ofrecen herramientas sofisticadas?

+4

lenguajes de alto nivel sabe casi nada sobre el hardware y, a menudo no tienen formas de acceder a ella. Ahí es donde el ensamblaje viene a rescatar. El otro uso es la optimización del tamaño/velocidad del código. –

+6

Esta pregunta parece encajar mejor en http://programmers.stackexchange.com. 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 realmente hace la computadora. 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, lo cual no le proporciona un lenguaje de alto nivel. – deceze

+0

Gracias Alex y deceze –

Respuesta

5

El código de máquina sigue siendo necesario para tareas clave, p. código específico

  • de hardware, tales como controladores de dispositivo
  • dispositivos embebidos, 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 en lenguajes de nivel superior, como C, donde el ensamblaje se puede agregar en línea al código C.

Dicho esto, sigue siendo una buena idea conocer 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.

11

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

Pero el abstraction is always leaky, p. Ej. la mayoría (si no todos) los lenguajes de alto nivel no se optimizan automáticamente para las memorias caché de la CPU (por ejemplo, coherencia de caché y uso compartido falso) y el multihilo eficiente siempre es complicado. Esto significa que si el rendimiento es crítico, el programador puede tener que escribir su código de manera diferente.

La mejor forma 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. Como ejemplo, asegúrese de que los hilos procesan los datos en múltiplos de 64 bytes (para reducir el uso compartido falso en las líneas de caché) o realizando una transformación de estructura de matrices ⇔ de array-of-structs.


Asamblea (y C, en cierta medida) es una muy buena manera de aprender estos detalles de rendimiento, ya que hace que sea muy fácil de entender exactamente lo que el equipo está haciendo ya que el control exactamente lo que sucede en cada paso.

(El punto de extracción con fugas también se aplica a acceder a los componentes específicos de hardware/personalizados.)

+0

Muchas gracias por su respuesta. Ahora es mi clarificado para mí la necesidad del lenguaje ensamblador. –

Cuestiones relacionadas