5 ms·
Indeed. mov esp, 0 "Move 0 into esp". Seriously, X86? Who came up with that?
by hota_mazi 9y ago
Indeed.
mov esp, 0
"Move 0 into esp".
Seriously, X86? Who came up with that?
- CoC_CRUSHER 9y agoWhat's wrong with "mov esp,0" ? It makes sense.
- tmccrmck 9y agoI'm not sure AT&T syntax is much better. movl $1, %esp
- GuB-42 9y agoRead it as "esp = 0". "add eax, 3" is like "eax += 3" in C. This is the Intel syntax and it is the most popular for doing x86 assembly. The other syntax, the AT&T syntax, works the other way ("mov $0, %esp" puts 0 into esp).
- wolfgke 9y agoWhat is wrong with that? Besides the fact that the canonical way to zero a register on x86 if flags are of no concern is xor reg,reg (recommended way) or sub reg,reg
- Jach 9y agoIt's wrong if you try to read it as "move 0 into esp" because the source and destination are reversed in code from how it's expressed in English. The way to fix that is to use the other syntax, or change how you think of the English. If read like Lisp, then it's "set esp to 0" and 'mov' is just a poor mnemonic.
- deleted 9y ago[deleted]
- hota_mazi 9y agoI read "mov a,b" as "Move a into b".
- wolfgke 9y agoIt is canonical in Intel syntax that the parameter order is always "destination, source" (in AT&T syntax it is "source,destination").
- kazinator 9y agoThe same engineer who came up with dest := source; and memcpy(dest, src, size); as well as obj.set(0); Numerous assembly languages have destinations on the left. Some have load/store instructions where the memory is always on one side: load [r1], r3 ; --> direction store [r1], r3 ; <-- direction it's a matter of assembler syntax; the "AT&T" syntax used by the GNU assembler and gcc for x86 has destination on the right.