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?
Respuesta
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.
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.)
Muchas gracias por su respuesta. Ahora es mi clarificado para mí la necesidad del lenguaje ensamblador. –
- 1. ¿Qué tan alto debe/van los idiomas de alto nivel?
- 2. ¿Qué idiomas de alto nivel admiten multithreading?
- 3. Lenguaje de sistema de alto nivel que compila a c?
- 4. ¿C# es un lenguaje de alto nivel?
- 5. C++ como lenguaje de alto nivel?
- 6. ¿Qué lenguaje ensamblador aprender?
- 7. Idiomas interpretados: ¿el nivel más alto es el más rápido?
- 8. ¿Todavía se necesita rmic?
- 9. ¿Alguna vez necesita escribir código real en lenguaje ensamblador?
- 10. ¿Vale la pena aprender el lenguaje ensamblador?
- 11. Si empareja el programa, ¿todavía necesita una revisión por pares?
- 12. ¿Por qué tenemos que ir a JQuery?
- 13. Lenguaje ensamblador a C
- 14. ¿Por qué se necesita NotificationCompat?
- 15. Lenguaje de programación de alto nivel para la composición musical
- 16. ¿Cómo se implementa la sincronización de subprocesos en el nivel de lenguaje ensamblador?
- 17. ¿Por qué un elemento de nivel de bloque es más alto que la imagen que contiene?
- 18. cómo se implementó lisp en lenguaje ensamblador?
- 19. lenguaje ensamblador y optimización
- 20. ¿Por qué tenemos punteros distintos de vacío?
- 21. ¿Por qué C++ necesita modificaciones de lenguaje para ser "administrado"?
- 22. Lenguaje de nivel bajo, medio y alto, ¿cuál es la diferencia?
- 23. ¿Por qué se ofrecen DHCP Offer y Ack?
- 24. ¿Por qué se necesita typeof?
- 25. ¿Por qué todavía necesitamos un archivo de resguardo .lib cuando tenemos la implementación .dll real?
- 26. ¿Qué DBMS ofrecen tablas organizadas por índice?
- 27. ¿Por qué tenemos que establecer __block variable en nil?
- 28. ¿Por qué C++ es compatible con C? ¿Por qué no hay algún lenguaje C++ "puro"?
- 29. ¿Por qué md5 todavía se usa ampliamente?
- 30. ¿Por qué necesita PrintWriter?
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. –
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
Gracias Alex y deceze –