94 votes

AT & T vs Intel Syntaxe et limitations?

Pour moi, Intel syntaxe est beaucoup plus facile à lire. Si j'aller se promener un peu dans de l'assemblée de la forêt se concentrer uniquement sur les processeurs Intel de la syntaxe, ai-je raté quelque chose? Est-il une raison que je ne veux passer à AT&T (en dehors d'être en mesure de lire les autres' AT&T de l'assemblée)? Ma première idée est que gdb utilise AT&T par défaut.

Si cette matière, je me concentre seulement sur la relation de l'assemblée et de la syntaxe peut-être Linux/BSD et le langage C.

modifier

Merci à Zifre, Jacob B et Mehrdad. Je souhaite que je pourrais choisir tous les trois réponses, parce qu'ils ont tous contenaient des informations grande, alors j'ai au moins jusqu'-voté tous. Merci pour l'information sur le noyau Linux, le reste des outils GNU, et l'assurance qu'il n'affecte pas mon apprentissage à long terme. Vous êtes tous super!

87voto

Zifre Points 14109

Il n'y a vraiment aucun avantage pour l'un sur l'autre. Je conviens cependant que la syntaxe Intel est beaucoup plus facile à lire. N'oubliez pas que, autant que je sache, tous les outils GNU ont la possibilité d'utiliser également la syntaxe Intel.

Il semble que vous pouvez faire en sorte que GDB utilise la syntaxe Intel avec ceci:

définir désassemblage-saveur intel

GCC peut utiliser la syntaxe Intel avec -masm=intel .

47voto

Mehrdad Afshari Points 204872

Le principal syntaxe de l'assembleur GNU (GAZ), AT&T. Intel syntaxe est un ajout relativement récent à elle. x86 assemblée dans le noyau Linux est à AT&T de la syntaxe. Dans le monde de Linux, c'est la syntaxe commune. Dans le MME monde, Intel syntaxe est la plus courante.

Personnellement, je déteste AT&T de la syntaxe. Il y a beaucoup de libre assembleurs (MSNA, YASM) avec GAZ qui prennent en charge Intel syntaxe trop, donc il n'y aura pas de problèmes à faire Intel syntaxe dans Linux.

Au-delà de ça, c'est juste une différence syntaxique. Le résultat des deux sera la même machine x86 code.

36voto

hirschhornsalz Points 16306

Il n'y a vraiment aucun avantage à l'un ou l'autre. Je suis en désaccord, mais que Intel syntaxe est beaucoup plus facile à lire, parce que personnellement je déteste Intel syntaxe. Gardez à l'esprit que, autant que je sache, tous les outils GNU avez la possibilité d'utiliser Intel syntaxe aussi.

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]

...et cela devient encore plus compliqué avec plus d'instructions complexes

'nuff said.

PS: Cette réponse existe principalement pour la raison de souligner (à mon humble avis) des faiblesses dans certains autres réponses, qui sont en fait pas des réponses, mais des opinions. Et bien sûr, la réponse à cette question la réalité est que mon humble avis.

PPS: je ne déteste pas Intel syntaxe, je n'aime pas.

26voto

Jacob B Points 1268

C'est la "même langue", en ce qu'il compile vers le même code machine, a la même opcodes, etc. D'autre part, si vous utilisez GCC, vous ne voulez probablement savoir AT&T syntaxe, juste parce que c'est la valeur par défaut-pas de changer les options du compilateur, etc. pour l'obtenir.

J'ai trop coupé mes dents sur Intel-syntaxe ASM x86 (sur le DOS, trop) et il a trouvé plus intuitive, d'abord lors d'un changement de C/UNIX. Mais une fois que vous apprenez AT&T, il va chercher tout aussi facile.

Je ne voudrais pas lui donner beaucoup de pensée---il est facile à apprendre AT&T une fois que vous savez Intel, et vice-versa. La langue est beaucoup plus difficile à obtenir dans votre tête que de la syntaxe. Donc par tous les moyens de me focaliser sur un seul et ensuite apprendre de l'autre quand il arrive.

20voto

Patrick Points 607

C'est un signe de professionnalisme que vous êtes prêt à vous adapter à tout ce qui est utilisé. Il n'y a pas de réel avantage pour l'un ou l'autre. La syntaxe intel est courante dans le monde Microsoft, AT & T est la norme sous Linux / Unix. Puisqu'il n'y a aucun avantage pour l'un ou l'autre, les gens ont tendance à imprimer ce qu'ils ont vu en premier. Cela dit, un programmeur professionnel soulève des problèmes comme celui-ci. Utilisez ce qu'ils utilisent au travail ou dans le domaine dans lequel vous travaillez.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X