4

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?

Peter Cordes
  • 328,167
  • 45
  • 605
  • 847
REALFREE
  • 4,378
  • 7
  • 40
  • 73

1 Answers1

10

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/

phuclv
  • 37,963
  • 15
  • 156
  • 475