Let's say .data section has following item:
0x1234 00010203 04050607 08090a0b 0c0d0e0f
0x1238 10000000
And in code,
mov $0x1234, %eax
mov 0x1238, %ebx
I believe with $ symbol, it would be constant number, so %eax will have memory address, but what about %ebx?
What exactly different between two instruction?
The difference is that with $
it's the numeric value while without $
it's the contents of memory at that address
If argument of instruction is without any special marker (such as % for register or $ for numeric constant), then it is memory access. So following:
movl 10, %eax movl foo, %eax
Corresponds to intel syntax:
mov eax, [10] mov eax, [foo]
To use numeric constant, or use address of label, there is $ operator:
movl $10, %eax movl $foo, %eax
In Intel syntax:
mov eax, 10 mov eax, offset foo
http://x86asm.net/articles/what-i-dislike-about-gas/
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With