What do the dollar ($) and percentage (%) signs represent in x86 assembly?
Solution 1
Thats not Intel syntax, its AT&T syntax, also called GAS syntax.
the $
prefix is for immediates (constants), and the %
prefix is for registers (they are required1).
For more about AT&T syntax, see also the [att]
tag wiki.
1 Unless the noprefix
option is specified, see here & here. But usually noprefix
is only used with .intel_syntax noprefix
, to get MASM-like syntax.
Solution 2
Compared to Intel syntax, AT&T syntax has many differences
-
$
signifies a constant (integer literal). Without it the number is an absolute address -
%
denotes a register - The source/destination order is reversed
-
()
is used for memory reference, like[]
in Intel syntax
So the above snippet is equivalent to
sub esp, 48 ; esp -= 48
mov [esp+32], eax ; store eax to the value at the address `esp + 32`
Solution 3
Yes, "32(%esp)" indicates an offset of 32 from %esp.
Solution 4
As @Necrolis said, that's written in AT&T syntax. It means:
subtract 48 from the register esp (the stack pointer).
store the contents of eax to the four bytes starting at (esp + 32).
Related videos on Youtube
juliensaad
Updated on September 28, 2020Comments
-
juliensaad over 3 years
I am trying to understand how the assembly language works for a micro-computer architecture class, and I keep facing different syntaxes in examples:
sub $48, %esp mov %eax, 32(%esp)
What do these codes mean? What is the 32 operand an addition to the esp register?
-
juliensaad about 12 yearsThanks a lot, I did not know where to look for this
-
Taryn East almost 10 yearsHi - I'm not sure this actually answers the question... what are the $ and % ?
-
phuclv almost 10 years@TarynEast they are prefixes for immidiates and registers like Necrolis has said
-
phuclv almost 10 years
-
Taryn East almost 10 yearsYour post showed up in the "low quality" review queue... for not having enough explanation in it. My recommendation was based on that... Feel free to edit it to say what you have said above ;)
-
Necrolis almost 10 years@LưuVĩnhPhúc: Interesting, I've see that directive before, probably cause its extremely poorly documented :( sourceware.org/binutils/docs/as/i386_002dVariations.html
-
Incerteza over 9 yearsthat's funny but I've never seen percent mark % being used.
-
Ciro Santilli OurBigBook.com almost 9 yearsGAS calls it "Memory References", documented at: sourceware.org/binutils/docs-2.18/as/i386_002dMemory.html x86 concept summarized brilliantly at: en.wikipedia.org/wiki/X86#Addressing_modes