¿Es específico el lenguaje de ensamblaje "ensamblador"? ¿Qué ensamblador es mejor?

StackOverflow https://stackoverflow.com/questions/1995472

  •  22-09-2019
  •  | 
  •  

Pregunta

Estoy aprendiendo el lenguaje de la asamblea. Empecé con Paul A. Carter's PC Assembly Language que usa NASM (el ensamblador de toda la red). Luego, en el medio, cambié y comencé a leer Introduction to 80×86 Assembly Language and Computer Architecture que usa MASM.

En nasm solía escribir, para inicializar un byte

DB 110101B

En Masm estoy usando

Byte 110101b

Estoy en medio de la lectura. Dado que estas son directivas de ensamblador, serán diferentes para cada ensamblador. ¿Correcto? ¿No siguen estos desarrolladores de ensamblador un estándar para estas directivas? Porque saben que los mnemónicos son específicos de la CPU. Entonces, su dolor en el culo aprender y codificar en el lenguaje de ensamblaje.

Ahora, si siguen diferentes directivas, es más dolor si cambia de ensamblador o si cambia el sistema operativo (el desarrollador de MASM está en problemas profundos si va a Linux).

Mi confusión es que me familiarices con Nasm o Masm? Soy fanático de Windows, pero es posible que tenga que trabajar (en el futuro) en Linux también.

Cada libro debe titularse "_________ lenguaje de ensamblaje usando __________ ensamblador"

¿Fue útil?

Solución

Lamentablemente, nunca ha habido un estándar para el lenguaje de ensamblaje. Solo tendrá que aprender las directivas que admite su ensamblador. Afortunadamente, la mayoría de las directivas, aunque tienen diferentes nombres, son semánticamente similares como DB y Byte.

¡Pero espera! Se empeora, especialmente para el X86. Tiene (al menos) dos formas de código que los ensambladores pueden aceptar: Formato Intel y AT&T. El formato AT&T invierte el orden de la mayoría de los operandos a las instrucciones (o es Visa Versa ;-).

NASM es probablemente una mejor opción para la portabilidad, pero también podría mirar el ensamblador de GNU.

Otros consejos

Sintaxis Intel / AT&T sintaxis

Con x86 en particular, los primeros ensambladores fueron de Intel y luego ensambladores en gran medida compatibles de Microsoft formaron una rama.

Estos ensambladores organizan operandos de origen y destino de derecha a izquierda y tienen una capa de abstracción inusual (y a mis ojos, un poco extravagante) que utiliza un solo mnemónico para 8, 16 y 32 bits y luego deriva el código de operación de la máquina real para usar para usar basado en propiedades del operando. Existen modificadores (en operandos) para forzar un tamaño particular.

Pero Unix también era importante y tenía una línea de ensamblador completamente diferente con diferentes tradiciones y convenciones.

El proveedor original de Unix era AT&T, propietaria de la propiedad intelectual desarrollada en Bell Labs. Una serie de proyectos BSD y luego Linux continuó con esta tradición. Estos ensambladores históricamente procesan operandos de izquierda a derecha, tienen un diseño de repuesto optimizado para la velocidad, y cuando los humanos generalmente usan CPP para macros y condicionales, incluso si el ensamblador también tiene características paralelas.

En estos días probablemente esté usando VS en MS o GNU en Linux o Mac, pero es por eso que todavía decimos AT&T VS Intel. El ensamblador de GNU tiene la opción de ensamblar en ambos sentidos, aunque todavía está realmente en el campamento de AT&T.

Generalmente sí. Sin embargo, en su mayoría son compatibles con características, por lo que convertir de una sintaxis de ensamblador a otra generalmente no es terriblemente difícil si conoce ambos.

Los procesadores están documentados en un manual de referencia suministrado por el fabricante. Esto generalmente se convirtió en la sintaxis normativa (junto con el ensamblador proporcionado por el proveedor) para programas de ensamblaje en una plataforma en particular. En consecuencia, muchos procesadores de un solo proveedor tienen una sintaxis similar.

La situación se volvió más compleja con el segundo abastecimiento de procesadores y el eventual desarrollo de ensambladores de múltiples dirigir que, por razones históricas, utilizan una sintaxis en su mayoría consistente en todas las plataformas. Esto también proporciona algunas ventajas discutibles cuando se portan código en todas las plataformas.

Sus mejores opciones son: elegir una notación con la que se sienta cómodo y aceptar libros con una sintaxis diferente, consulte si puede localizar bibliotecas macro de sistemas cruzados o herramientas de traducción o morder la bala y aprender múltiples dialectos. El tercero suele ser tolerable, aunque hace que la construcción de bibliotecas privadas sea intensiva en mano de obra.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top