Para mí, la sintaxis de Intel es mucho más fácil de leer. Si recorro el bosque de ensamblajes concentrándome solo en la sintaxis Intel, ¿me perderé algo? ¿Hay alguna razón por la que me gustaría cambiarme a AT&T (además de poder leer el ensamblaje de AT&T de otros)? Mi primera pista es que gdb usa AT&T por defecto.
Si esto es importante, mi atención se centra solo en cualquier ensamblado y sintaxis que pueda tener con Linux / BSD y el lenguaje C.
Respuestas:
Realmente no hay ventaja para uno sobre el otro. Sin embargo, estoy de acuerdo en que la sintaxis de Intel es mucho más fácil de leer. Tenga en cuenta que, AFAIK, todas las herramientas GNU tienen la opción de usar también la sintaxis Intel.
Parece que puede hacer que GDB use la sintaxis Intel con esto:
GCC puede utilizar la sintaxis de Intel
-masm=intel
.fuente
lea -0x30(%rcx,%rax,8),%eax
es ATT intrincado paralea eax,[rcx+rax*8-0x30]
. El uso de + y * realmente ayuda en el estilo Intel.La sintaxis principal del ensamblador GNU (GAS) es AT&T. La sintaxis de Intel es una adición relativamente nueva. El ensamblaje x86 en el kernel de Linux está en sintaxis de AT&T. En el mundo de Linux, es la sintaxis común. En el mundo de MS, la sintaxis de Intel es más común.
Personalmente, odio la sintaxis de AT&T . Hay muchos ensambladores gratuitos (NASM, YASM) junto con GAS que también son compatibles con la sintaxis Intel, por lo que no habrá ningún problema con la sintaxis Intel en Linux.
Más allá de eso, es solo una diferencia sintáctica. El resultado de ambos será el mismo código de máquina x86.
fuente
Realmente no hay ventaja para uno sobre el otro. Sin embargo, no estoy de acuerdo con que la sintaxis de Intel sea mucho más fácil de leer, porque personalmente odio la sintaxis de Intel . Tenga en cuenta que, AFAIK, todas las herramientas GNU tienen la opción de usar también la sintaxis Intel.
... y se vuelve más complicado con instrucciones más complejas
'Nuff dijo.
PD: Esta respuesta existe principalmente por la razón de resaltar (en mi humilde opinión) debilidades en algunas otras respuestas, que en realidad no son respuestas, sino opiniones. Y, por supuesto, esta respuesta en realidad es solo mi humilde opinión.
PPS: No odio la sintaxis de Intel, simplemente no me importa.
fuente
SOMEWORD PTR[]
si el tamaño del operando está claro en el contexto. Pero lo necesitas en caso de mover un inmediato a una ubicación de memoria (tanto ell
de AT&T como el DWORD PTR de Intel). Y sí, mi ejemplo es bastante artificial, pero también el tuyo. En caso de que aún no vea por qué: omitió los tamaños de palabras innecesarios en Intel, pero los tiene en AT&T. Usted elige los operandos de manera que se alineen bien en Intel, pero no lo haga en AT&T.-4(ebp,edx,4)
cosa es mejor que[4*edx+ebp-4]
? Encuentro este último más intuitivo.Es el "mismo lenguaje", ya que se compila en el mismo código de máquina, tiene los mismos códigos de operación, etc. Por otro lado, si está usando GCC, probablemente querrá aprender la sintaxis de AT&T, solo porque es el valor predeterminado: sin cambiar las opciones del compilador, etc. para obtenerlo.
Yo también me corté los dientes con la sintaxis Intel x86 ASM (también en DOS) y lo encontré más intuitivo al principio al cambiar a C / UNIX. Pero una vez que aprenda AT&T, parecerá igual de fácil.
No lo pensaría tanto: es fácil aprender AT&T una vez que conoces a Intel, y viceversa. El lenguaje real es mucho más difícil de conseguir que la sintaxis. Así que, por supuesto, solo concéntrate en uno y luego aprende el otro cuando surja.
fuente
Es una señal de profesionalismo que esté dispuesto a adaptarse a lo que esté en uso. No hay ninguna ventaja real para uno u otro. La sintaxis de Intel es común en el mundo de Microsoft, AT&T es el estándar en Linux / Unix. Como no hay ventaja para ninguno de los dos, las personas tienden a imprimir en lo que vieron primero. Dicho esto, un programador profesional se eleva por encima de cosas como esa. Use lo que sea que usen en el trabajo o en el dominio en el que está trabajando.
fuente
La sintaxis de Intel cubre todo (suponiendo que el ensamblador / desensamblador esté actualizado con la última versión basura que Intel agregó a su conjunto de instrucciones). Estoy seguro de que en & t es lo mismo.
... y se vuelve más complicado con instrucciones más complejas
'Nuff dijo.
fuente
Mi primer lenguaje ensamblador fue MIPS, que he notado que es muy similar a la sintaxis ATT. Así que prefiero la sintaxis ATT, pero en realidad no importa siempre que puedas leerla.
fuente
lea -0x30(%rcx,%rax,8),%eax
ylea eax,[rcx+rax*8-0x30]
jørgensen publicado arriba. Y a diferencia de AT&T, MIPS todavía usa el formato de destino primero como todos los demás. Además, el número MIPS no necesita tener el prefijo $, y los nombres de registro en MIPS son cortos, por lo que no es muy incómodo tener% hasta el final como AT&T