6 ms·
AT&T vs. Intel syntax has caused many arguments in some of my circles. AT&T is an atrocity and if you disagree... you're wrong. :)
by Graziano_M 4y ago
AT&T vs. Intel syntax has caused many arguments in some of my circles. AT&T is an atrocity and if you disagree... you're wrong. :)
- mixmastamyk 4y agoop src dest is the logical order, the rest of the syntax I don’t care about much.
- sph 4y agoBe that as it may, the AT&T indirect memory reference `section:disp(base, index,scale)` is an abomination unto God. At least the Intel one makes actual mathematical sense: `section:[base + index*scale + disp]`
- SoftTalker 4y agoTFA says "The `source, dest' convention is maintained for compatibility with previous Unix assemblers."
- pjmlp 4y agoIn mathematics variable = value, variable receives value, ergo op dest src. That is logic.
- pavlov 4y agoIndeed. Besides, “let there be light” is clearly destination-first, so this matter was already resolved by Genesis 1:3.
- Eleison23 4y agoWhich direction was the Hebrew text written in?
- LudwigNagasena 4y agoThat doesn’t follow. variable = value, ergo dest op src.
- mrkeen 4y agoIn mathematics variable = value ≡ value = variable
- googlryas 4y agoThat is just an arbitrary notation, nothing to do with logic. In English at least, "add 4 to x" is more natural than "add to x 4". Ergo op src dest
- bialpio 4y agoBut English "add 4 to x" tells you nothing about where to store the result. : - ) "Add 4 to x and store result in x" vs "Let x be x + 4"?
- monocasa 4y agoWithout any other context, you generally assume that the target is an accumulator. So "add 4 coins to that bucket", generally means at the end of that operation the bucket contains at least four coins plus any coins that were already in the bucket.
- bialpio 4y agoHuh, I think my brain is not wired to think about `x` as a storage, it is closer to "add 3 to x for x = 2", which then gets reduced to "add 3 to 2" and then the destination is missing...
- monocasa 4y ago...math has no such order. Half the point of algebra is that the two sides of the equation are semantically equivalent and can be swapped at will.
- pjmlp 4y agoGood luck convincing anyone that value = variable makes sense.
- monocasa 4y agoMy math teachers had no problem with '42 = x' vs 'x = 42' as long as the steps made sense to get there. In fact they'd probably comment that there was no need to go with 'x = 42' if I obviously took a circuitous route simply to end up with x on the left side of the equation, as that would have demonstrated a lack of internalizing some of the base ideas of algebra and it's approach of equation symmetry.
- LudwigNagasena 4y agoYou should distinguish the meaning of = in mathematical and meta-mathematical statements. “42y = yx, therefore 42 = x” is fine; but “let 42 = x” is not.
- fweimer 4y agoSome older C coding styles recommend that order because before compilers added warnings, “if (17 = variable)” resulted in a diagnostic, while “if (variable = 17)” would not. Nowadays, I think most programmers prefer putting the fastest-changing expression first.
- deleted 4y ago[deleted]
- pjmlp 4y agoYeah that is due to clever C semantics that that should never had allowed for anything other than boolean expressions in conditionals like proper grown languages.
- molticrystal 4y agoPostfix , infix, prefix, crucifix.
- AnimalMuppet 4y agoThat's just a convention. The way we would order the sentence in English is also just a convention. You know what the logical convention to use would have been? The order that every assembler on the planet already used.
- colejohnson66 4y agoThat “logical” order is only because you’re trying to read it like a sentence (“mov/add ebx into eax”) when you should be reading it like a formula or what it actually is - code. And that’s fine, but considering Intel created the chip, it makes sense that they should decide how the assembly syntax should be, not AT&T. The only reason “AT&T syntax” exists for x86 is because people working at AT&T refused to use Intel as the authoritative reference on the syntax, and, instead, decided to follow the convention of the PDP, Motorola, etc. family and friends. Hence why `as` (and subsequently `gas`) have that as the default.
- userbinator 4y agoThat is extremely confusing for comparisons, which are effectively a subtraction.
- mixmastamyk 4y agoI’m talking about moves and copies.
- int_19h 4y agoIt's even more confusing if moves have a different operation order from arithmetic ops and comparisons, no?
- mixmastamyk 4y agoNo, each should have what makes sense, whether analogous to math or a shell command.
- int_19h 4y agoThis implies that dst<-src "doesn't make sense"; but then why does practically every programming language use this ordering?
- mixmastamyk 4y agoA minor historical mistake/misdesign around the equals sign. Looks like algebra but fundamentally different.
- JonChesterfield 4y agoSketchy part is when operations read and write with the same argument. Op first is nice for that as it becomes op arg0 arg1. I quite like the SSA style which tends to be dst0 dst1 opcode src0 src1 but that doesn't model assembly brilliantly. Perhaps that order with read-write arguments required to appear on both sides of opcode with the same symbol has some merit.
- NobodyNada 4y agoI used to think this was more intuitive, but after using both for a while I came to the conclusion that putting the destination first is much more practical, because my eyes can scan the left column to quickly find where a register was last written to. If the destination is last, it doesn’t appear in a consistent location horizontally.
- Joker_vD 4y agoWhich is my all memcpy-like functions in C/C++ standard library take arguments in dst, src order.
- deleted 4y ago[deleted]
- b112 4y agoThey are using a classic dollar sign for assignment, so clearly at&t is better.
- amluto 4y agoContemplate the AT&T vs Intel syntax for x86 addressing modes and say that again.
- ratsmack 4y agoX86 addressing modes are an atrocity: https://stackoverflow.com/questions/63571979/clarifying-three-different-addressing-modes-in-x86 https://stackoverflow.com/questions/63571979/clarifying-thre...
- masklinn 4y ago> They are using a classic dollar sign for assignment They're using a dollar sign for immediates. As if you can't notice that it's a number. addl $4, %eax that's 3 different completely unnecessary symbols for things which are not ambiguous in the first place: - the operation width is provided by the registry - a number is an immediate - a register is named Hence the much less noisy Intel syntax: add eax, 4
- matja 4y agoaddl is not necessary if it is not ambiguous add $4, %eax - is fine Compare with add 4, %eax The "less noisy" Intel syntax becomes: add eax, DWORD PTR [4]
- deleted 4y ago[deleted]