¿Cuáles son las ventajas y desventajas de usar un lenguaje ensamblador en comparación con C en un sistema integrado?

La pregunta es, como máximo, subjetiva tbh. Así que intentaré enumerar los pros y los contras de ambos para ayudarte a decidir mejor.

Pros y contras del uso del ensamblaje:

Si conoce el lenguaje ensamblador lo suficientemente bien, lo más probable es que termine escribiendo código más eficiente en términos de densidad de código y tal vez, hasta cierto punto, incluso la administración de memoria (aunque la administración de memoria es igualmente fácil en C)

Además, el código de ensamblaje es portátil siempre que lo ejecute en el mismo procesador, pero más allá de eso, está condenado.

También es bastante fácil localizar errores, ya que puede ver el estado completo de la memoria, registrar estados, estado ALU, etc. directamente. Sin embargo, en sistemas más grandes esto es extremadamente abrumador y solo querrá cambiar a idiomas de nivel superior.

No hace falta decir que con el ensamblaje necesita conocer el hardware en el dorso de su mano.

Pros y contras de C –

Bueno, la primera desventaja es que C depende del compilador. Por lo tanto, tendrá pasos de compilación y código de salida ligeramente diferentes en cada máquina. Sin embargo, tenga en cuenta que esto no es problemático, solo que si ve el código de desmontaje / máquina no espere que sea el mismo. Pero sí, algunas características en C son específicas del compilador.

Además, C está compilado, por lo que su código de salida puede no ser tan eficiente como podría haber sido si hubiera escrito su equivalente en ensamblador.

Havung dijo lo anterior, los profesionales superan a los contras por una tonelada

  1. Su sistema operativo y procesador independiente como compilador se encarga de esto.
  2. El código C es fácilmente mantenible
  3. Es muy fácil de escribir.
  4. El código C puede transferirse a otra máquina, compilarse y luego ejecutarse casi sin cambios (si usa bibliotecas de terceros específicas para una plataforma, el código C podría no ser portátil si no tiene binarios equivalentes para el sistema operativo de destino)

Espero que hagas una elección prudente basada en esta conciencia. Buena suerte.

Casi no hay profesionales, excepto cuando el ensamblaje es la ÚNICA opción. Ese ensamblaje es inferior (por ejemplo, no portátil) no solo se aplica a los sistemas integrados. En los sistemas modernos para cualquier cosa, los lenguajes como Julia (o C, simplemente inferior, los sistemas operativos son un caso especial) es mejor que el ensamblado, y lo más rápido o lo suficientemente cerca como para no importar. Siempre más fácil para el programador.

Por ejemplo, en las CPU (por ejemplo, ARM) con E / S mapeadas en memoria (MMIO), no necesita ensamblaje para E / S. Sin embargo, en algunas CPUs MMIO puede no aplicarse, Entrada / salida: “La E / S mapeada a puerto también requiere el uso de instrucciones especiales de E / S”. Es decir, instrucciones de montaje especiales.

No lo he investigado, tal vez hay intrínsecos para eso. También hay CPU oscuras (o microcontroladores no tan oscuros) con más de un espacio de memoria para la arquitectura extrema de Harvard (no el tipo modificado, que significa cachés), donde C (sin extensiones) o cualquier lenguaje de programación ordinario no funciona.

La programación en lenguaje ensamblador es un dolor de cabeza cuando está creando aplicaciones grandes.

¿Por qué desea programar en ensamblado cuando hay tantos compiladores disponibles que brindan conveniencia para convertir su código c?