¿Desaparecerá el ensamblaje escrito a mano? [cerrado]

7

La semana pasada, me preguntaba, si los compiladores mejoran cada vez más en la optimización, ¿habrá un momento en el que no haya necesidad de un ensamblaje escrito a mano? ¿Todavía hay campos especializados en los que los compiladores no son lo suficientemente inteligentes como para producir un código que compita con el ensamblaje escrito a mano?

    
pregunta Oliver Weiler 23.04.2011 - 12:41

7 respuestas

25
  

¿habrá un punto en el que no haya necesidad de un ensamblaje escrito a mano?

Nunca. Siempre hay una necesidad de instrucciones específicas de hardware especializadas.

  

¿Todavía hay campos especializados donde los compiladores no son lo suficientemente inteligentes como para producir un código que compita con el ensamblaje escrito a mano?

La administración de interrupciones del kernel, las características de los controladores de E / S, el bloqueo y la sincronización de subprocesos a menudo deben incluir algún ensamblador porque hacen uso de instrucciones que están fuera del estándar conjunto de instrucciones utilizado por un compilador.

De hecho, a medida que Intel avanza en el intento de resolver los problemas de pedido de memoria que han creado (http://www.mpdiag.com/intel_arch.html), puede haber instrucciones adicionales o diferentes que deben agregarse o ajustarse en el interior. los núcleos comunes del sistema operativo; cosas que los compiladores normalmente no generan para las aplicaciones de usuario final.

    
respondido por el S.Lott 23.04.2011 - 14:17
12

Para algunos microcontroladores muy especiales no vale la pena portar un compilador.

Por ejemplo, una vez escribí aproximadamente mil líneas de ensamblaje para un controlador de 24 bits en un FPGA, para una aplicación de propósito especial.

    
respondido por el starblue 23.04.2011 - 20:27
10

Primero que nada, creo que algunas personas escriben ensamblaje "porque está ahí", de la misma manera que Sir Edmund Hillary habló sobre las personas que escalan el Monte Everest porque está ahí. Su propia existencia es un desafío para ellos, y aceptarán ese desafío ya sea que tengan una necesidad práctica (o incluso un uso) del resultado o no.

Dicho esto, mi propia opinión sobre las cosas es que si bien el lenguaje ensamblador se usa para reducir el porcentaje de todo el código, todavía hay un crecimiento suficiente en la programación general que, en sentido absoluto, la codificación de ensamblajes sigue creciendo.

Por ejemplo, un poco de MS-DOS fue escrito en lenguaje ensamblador. Solo por el bien del argumento, supongamos que era todo en lenguaje ensamblador escrito a mano. Por el bien de un número redondo, supongamos que significa lenguaje de ensamblaje escrito a mano que produjo aproximadamente 100 kilobytes de código de salida, probablemente algo así como 50 mil líneas de código fuente.

Lo último que supe es que Microsoft afirmó que solo una décima parte del uno por ciento de Windows estaba escrito en lenguaje ensamblador. Sin embargo, Windows está actualmente en algún lugar alrededor de 150 millones de líneas de código, por lo que el .1 por ciento es un total de 150,000 líneas.

También notaría que Windows representa un área que probablemente sea la más adecuada para usar un compilador: está pensada principalmente para máquinas rápidas con mucha memoria y muchos recursos en general. Las características son mucho más importantes que minimizar el uso de recursos.

Los sistemas integrados pequeños (por un ejemplo obvio) sin duda favorecen el código de ensamblaje escrito a mano en gran medida mucho . El código para un horno de microondas típico apenas necesita grandes porciones de código para cosas como sistemas de archivos, procesamiento de fuentes con antialias o administración de multitud de máquinas a través de una red.

    
respondido por el Jerry Coffin 23.04.2011 - 19:02
7

Hay ciertas cosas que solo puedes hacer con el ensamblaje, pero encontrarás que ya están convenientemente envueltas en funciones. Por lo tanto, no es necesario que los hagas a mano.

Supongo que si programa un chip muy específico, de lo que sabe todo, el uso de ensamblador podría simplemente exprimir el último bit (aunque debería ser posible poner ese conocimiento en un compilador).

Sin embargo, en las CPU normales con todas las diferentes arquitecturas e incluso los conjuntos de instrucciones y las cosas como la predicción de bifurcaciones y la ejecución fuera de orden, es posible que las cosas sean más lentas con el ensamblaje escrito a mano, excepto si lo crea para un chip específico . Este esfuerzo es injustificable, ya que un compilador de C adecuado puede desglosar el lenguaje de todas las arquitecturas que aprovechan la mayor parte de sus posibilidades de optimización, mientras que tratar de hacer esto manualmente hará que su cabeza explote y asuma un presupuesto que nadie en la tierra está dispuesto pagar, porque ni siquiera está claro que el resultado sea considerablemente más rápido.

    
respondido por el back2dos 23.04.2011 - 13:22
7

Creo que esta pregunta se puede dividir en 2 partes:

  

¿Llegará un momento en que la escritura en ensamblaje para aumentar la velocidad de ejecución se extinguirá?

Creo que ya ha llegado.

  

¿Llegará un momento en que la escritura en ensamblaje se extinguirá?

No, siempre necesitarás un acceso más cercano al hardware al escribir cosas como hipervisores, núcleos, controladores de dispositivos, etc.

    
respondido por el dan_waterworth 23.04.2011 - 14:38
7

Siempre será necesario programar manualmente el ensamblaje, ya que no todo el ensamblado generado es el más óptimo o incluso el más rápido. Un gran ejemplo de esto está en: enlace

    
respondido por el Daemin 23.04.2011 - 17:18
-4

El ensamblado o código de shell en general, es lo más importante cuando se escribe un malware que explota algunas vulnerabilidades de seguridad (se llama gusano). Debe escribir la secuencia de instrucciones de ensamblaje para evitar el antivirus. La mayoría de los antivirus utilizan una técnica de base de firmas para detectar códigos maliciosos. Debido a eso, no se puede reutilizar el código de shell antiguo. Es gracioso escribir algunas líneas de códigos de ensamblaje y hacer que funcione por algunas razones :)

    
respondido por el oDisPo 09.06.2012 - 12:03

Lea otras preguntas en las etiquetas