2011-12-15 33 views
7

A menudo escucho gente a mi alrededor a la que le gusta la discusión sobre la escritura en lenguaje ensamblador y que es una de esas razones por las que también quiero aprender a escribirla. Actualmente estoy aprendiendo ensamblaje y C juntos.¿Alguna vez necesita escribir código real en lenguaje ensamblador?

Por lo tanto, mi pregunta es ¿cuándo es necesario escribir el ensamblaje en código real?
¿Es simplemente bueno aprender?
¿Hay algún uso real al escribir código en C?

¡Cualquier comentario o respuesta útil será apreciado!

+1

El montaje ya no es muy útil IMO, pero cuando lo es, leerlo suele ser más útil que escribirlo. – zneak

+1

Lo necesitará en cualquier momento que el compilador realmente no lo corte. Como el código que trata sobre datos de video, simulación científica, algunas cosas en el juego, especialmente si estás en un presupuesto de ciclo ajustado, cosas mencionadas por Bashwork, etc. Es menos raro de lo que algunas personas creen. Es raro en aplicaciones corporativas aburridas que te quitan la vida cuando las escribes. – harold

Respuesta

4

Es raro. Nunca tuve que hacerlo en 23 años + de carrera. Pero trabajo en el espacio de aplicación de la base de datos de Client Server principalmente, hay trabajos donde lo usará mucho, o al menos necesita saber cómo funcionan realmente los procesadores.

Sin embargo, fue lo primero que aprendí, sin contar la electrónica digital básica, y yo diría que el aprendizaje ha sido de gran ayuda para mi carrera y programación de hobbies.

5

que iba a escribir un post largo, pero decidí resumir en su lugar:

  1. código embebido, gestores de arranque, backends compilador
  2. sí, que le ayudará a entender y depurar el código compilado
  3. la única vez que lo he usado en c es para leer el registro de reloj en tiempo real
8

A pesar del hecho de que escribir código en ensamblado se volvió cada vez más raro, todavía es muy bueno aprender n ensamblaje simplemente para entender cómo funcionan las cosas bajo el capó. Los compiladores optimizadores modernos de C/C++ le permiten escribir código en C que se traduce en instrucciones de ensamblaje de muy alta calidad, a menudo superando lo que podría escribir manualmente a expensas de hacer el resultado menos legible (por ejemplo, insertando instrucciones vacías para optimizar el uso de Tubería de la CPU).

Si escribe un compilador para una nueva arquitectura, una biblioteca de muy bajo nivel o un sistema integrado con estrictas restricciones de recursos, es posible que necesite usar el ensamblado. Para todo lo demás, C y C++ lo harán tan bien o mejor.

2

Tuve muchas ocasiones cuando necesitaba escribir el código asm en el trabajo, donde en C no se podían hacer ciertas cosas (por ejemplo, acceder a registros de CPU especiales o usar las instrucciones del sistema de la CPU), o código C compilado también lento o demasiado grande (el compilador no era lo suficientemente bueno).

Aún así, la fracción del código de ASM o el tiempo que pasó escribiéndolo fue bastante insignificante.

Asm de aprendizaje es bueno. Te hace "ver" a través de tu código C, predecir qué instrucciones y a cuántas se convierte, aproximadamente estimar la velocidad de las partes del código. En el proceso, aprendes una cantidad de optimizaciones y otros trucos y algunos algoritmos/métodos geniales que luego puedes transferir a tu código C. Basta con mirar esas numerosas preguntas sobre los indicadores C o la conversión de números entre la aritmética de precisión binaria y decimal o de precisión arbitraria. Conocer asm ayuda con estas y otras cosas.

3

El uso profesional del lenguaje ensamblador es bastante común en el mundo integrado. Hay muchas aplicaciones a nuestro alrededor donde los microcontroladores hacen cosas simples pero útiles. Por ejemplo, eche un vistazo al tinyAVR family of microcontrollers from Atmel, especialmente el ATtiny13 con su ridículamente pequeña memoria de programa de 1kB y sin memoria RAM, excepto para los 32 registros de 8 bits de la CPU. Sin embargo, es increíble lo que estas fichas son capable of.Ese chip cuesta alrededor de un dólar cuando se compra en grandes cantidades. Así que cuando produces una gran cantidad de un dispositivo que necesita una lógica simple (o incluso no muy simple), los ahorros en costos de producción de hardware son muy superiores a la sobrecarga de la elaboración manual del código en ensamblador para hacerlo funcionar en una plataforma extremadamente limitada.

2

Lo he hecho dos veces en 2011 hasta ahora, y trabajo principalmente en aplicaciones de la línea de negocios de Java. Es útil para preparar un setup.exe rápido para envolver un JRE y la instalación de la aplicación. Podría haber hecho eso en C, pero es más rápido tomar y configurar un ensamblador que un compilador y para una aplicación tan simple el tiempo de escritura es comparable en cualquier caso ... También lo usé para trabajar en un problema de interfaz con un dispositivo USB. Estaba fallando por razones desconocidas a través de JNA, así que lo escribí en el ensamblaje para asegurarme de saber a dónde iba cada bit y cuándo.

Cuestiones relacionadas