Gracias por el A2A.
Hoy, la programación en lenguajes ensambladores es terrible para cualquiera. Los viejos tiempos se habían ido para siempre cuando los ingenieros usaban el ensamblaje para escribir un programa completo completo, por ejemplo, se decía que el compilador de supercomputadora de la unidad central de los CDC estaba escrito completamente en su ensamblaje. Hoy en día, aún se necesita el ensamblaje, pero se usa de manera muy limitada incluso para los ingenieros de compilación que aún deben comprender cada código de máquina.
El ingeniero de hoy casi nunca necesita escribir un gran programa en ensamblaje, casi nunca necesita usar ensamblaje en estructuras de datos complejas, tipos de datos como números flotantes y números de matriz / vector, casi nunca necesita usar el ensamblaje para hacer asignaciones de registros y programación de instrucciones, Casi nunca es necesario utilizar el ensamblaje para realizar optimizaciones a nivel de instrucción. Los compiladores de lenguaje de programación de alto nivel pueden hacer un trabajo mucho mejor.
Sin embargo, todavía usamos ocasionalmente ensamblaje, pero solo limitado a escribir piezas de código muy pequeñas, como configurar el hardware de la CPU en el arranque del sistema, configurar / modificar / monitorear ciertas piezas de hardware en el sistema (como MMU, cachés, coprocesadores ops, etc.) pero en su mayoría solo se encuentran en unas pocas líneas de código de ensamblaje en las funciones API de bajo nivel más bajas. En casos muy raros, en algunos procesadores y dispositivos personalizados, se utilizan pequeñas funciones en el ensamblaje para optimizar algunos casos especiales, por ejemplo, en el kernel de Linux, hay algunas pequeñas funciones en el ensamblaje para transferir un bloque de datos desde la tarjeta SCSI Acorn a la memoria (dudo que sea realmente necesario en el ensamblaje allí – [1]). Una vez que un ingeniero comprende los fundamentos de la arquitectura de la CPU y las interfaces de hardware, con una cantidad razonable de posibilidades de practicar, la programación en ensamblaje ocasionalmente en pequeños códigos no resulta tan intimidante. Comprender los conceptos básicos del código de ensamblaje también puede ayudar a solucionar problemas de errores ocultos profundos, especialmente cuando solo está disponible el código de desmontaje.
[1] Más del código de ensamblaje x86 del kernel de Linux se reescribe en C
Mi 2c.
EDITAR 1: actualizado al agregar un ejemplo de uso de ensamblaje
EDIT 2: agregué una referencia [1] para mi afirmación de que realmente no se necesita mucho código de ensamblaje.
EDIT 3: solo quiero vincular mi respuesta a otra pregunta interesante de Quora relacionada ¿Cuánto podríamos optimizar un programa escribiéndolo en ensamblador? Parece que todavía es discutible cuánto debemos pagar nuestro esfuerzo para usar el ensamblaje para optimizar algún código. Mi opinión es que la posibilidad es cada vez menor cuando las arquitecturas modernas de CPU se vuelven más eficientes y más complicadas. Por ejemplo, casi no hay posibilidad de que el código de ensamblaje codificado manual se ejecute más rápido que un código optimizado generado por el compilador en un procesador con VLIW, canalización profunda, problema de múltiples instrucciones y múltiples arquitecturas de acceso a memoria pendientes debido a la vinculación de instrucciones manuales o manual La programación de instrucciones para ocultar las burbujas de retardo de instrucciones es muy difícil a mano.