Limitaciones de la Sintaxis del Ensamblaje Intel En comparación con AT & T [cerrado]


Para mí, la sintaxis de Intel es mucho más fácil de leer. Si paso por el bosque de ensamblajes concentrándome solo en la sintaxis de Intel, ¿me perderé algo? ¿Hay alguna razón por la que quisiera cambiar a AT & T (aparte de poder leer el ensamblaje de AT&T de otros)? Mi primera pista es que gdb usa AT & T de forma predeterminada.

Si esto importa, mi enfoque está solo en cualquier relación que el ensamblado y la sintaxis puedan tener con Linux/BSD y el lenguaje C.

Author: Josh Caswell, 2009-06-10

7 answers

No hay realmente ninguna 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 sintaxis Intel también.

Parece que puede hacer que GDB use la sintaxis de Intel con esto:

set disassembly-flavor intel

GCC puede hacer sintaxis Intel con -masm=intel.

 65
Author: Zifre,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-06-09 21:32:12

La sintaxis principal para el ensamblador GNU (GAS) es AT&T. La sintaxis de Intel es una adición relativamente nueva. el ensamblado x86 en el núcleo Linux está en sintaxis 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, yo odio la sintaxis de AT&T. Hay un montón de ensambladores gratuitos (NASM, YASM) junto con GAS que también admiten la sintaxis de Intel, por lo que no habrá ningún problema haciendo la sintaxis de Intel en Linux.

Más allá de eso, es solo un diferencia sintáctica. El resultado de ambos será el mismo código de máquina x86.

 37
Author: Mehrdad Afshari,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-06-09 21:36:13

No hay realmente ninguna ventaja para uno sobre el otro. No estoy de acuerdo, sin embargo, que la sintaxis de Intel es 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 sintaxis Intel también.

at&t noprefix                   intel
mov eax, -4(ebp,edx,4)          mov DWORD PTR[-4 +ebp +edx *4], eax
mov eax, -4(ebp)                mov DWORD PTR[-4 +ebp], eax
mov edx, (ecx)                  mov DWORD PTR[ecx], edx
lea (   ,eax,4), eax            lea eax, DWORD PTR[8 + eax*4]
lea (eax,eax,2), eax            lea eax, DWORD PTR[eax*2+eax]

...y se vuelve más complicado con instrucciones más complejas

' nuff dijo.

PD: Esta respuesta existe principalmente por la razón de resaltar las debilidades (en mi humilde opinión) en algunas otras respuestas, que en realidad no son respuestas, pero 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.

 32
Author: Gunther Piez,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-03-31 18:22:50

Es el "mismo lenguaje", ya que compila el mismo código máquina, tiene los mismos opcodes, etc. Por otro lado, si está usando GCC, probablemente querrá aprender la sintaxis de AT & T, solo porque es la predeterminada no sin cambiar las opciones del compilador, etc. para conseguirlo.

Yo también me corté los dientes en Intel-syntax x86 ASM (en DOS, también) y lo encontré más intuitivo inicialmente cuando cambié a C/UNIX. Pero una vez que aprendas AT&T, se verá igual de fácil.

Yo no daría eso mucho pensamiento - - - es fácil aprender AT & T una vez que conoces Intel, y viceversa. El lenguaje real es mucho más difícil de conseguir en su cabeza que la sintaxis. Así que, por supuesto, solo concéntrate en uno y luego aprende el otro cuando surja.

 21
Author: Jacob B,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-06-09 21:37:22

Es una señal de profesionalismo que usted 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. Dado que no hay ninguna ventaja para ninguno de los dos, la gente tiende a imprimir en lo que vio primero. Dicho esto, un programador profesional se eleva por encima de cosas como esa. Usa lo que sea que usen en el trabajo o en el dominio en el que estás trabajando.

 19
Author: Patrick,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-06-21 06:25:02

La sintaxis de Intel cubre todo (suponiendo que el ensamblador/desensamblador esté actualizado con la última información basura agregada a su conjunto de instrucciones). Estoy seguro de que at & t es lo mismo.

at&t                             intel
movl -4(%ebp, %edx, 4), %eax     mov eax, [ebp-4+edx*4]
movl -4(%ebp), %eax              mov eax, [ebp-4]
movl (%ecx), %edx                mov edx, [ecx]
leal 8(,%eax,4), %eax            lea eax, [eax*4+8]
leal (%eax,%eax,2), %eax         lea eax, [eax*2+eax]

...y se vuelve más complicado con instrucciones más complejas

' nuff dijo.

 7
Author: L̲̳o̲̳̳n̲̳̳g̲̳̳p̲̳o̲̳̳k̲̳̳e̲̳̳,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-04-01 13:53:48

Mi primer lenguaje ensamblador fue MIPS, que he notado es muy similar a la sintaxis ATT. Así que prefiero la sintaxis ATT, pero en realidad no importa, siempre y cuando se puede leer.

 3
Author: gsk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-11-07 19:14:20