префикс $ для непосредственных (констант), а префикс % - для регистров (требуется 1).
Дополнительные сведения о синтаксисе AT & T см. Также в wiki- [att].
1 Если параметр noprefix не указан, см. Здесь и здесь. Но обычно noprefix используется только с .intel_syntax noprefix, чтобы получить MASM-подобный синтаксис.
Ответ 2
Да, "32 (% esp)" означает смещение 32 из% esp.
Ответ 3
Как сказал @Necrolis, написанный в синтаксисе AT & T. Это означает:
subtract 48 from the register esp (the stack pointer).
store the contents of eax to the four bytes starting at (esp + 32).
Ответ 4
По сравнению с синтаксисом Intel синтаксис AT & T имеет много отличий
$ означает константу (целочисленный литерал). Без него число является абсолютным адресом
% обозначает регистр
Исходный/целевой порядок отменяется
() используется для ссылки на память, например [] в синтаксисе Intel
Таким образом, приведенный выше фрагмент эквивалентен
sub esp, 48 ; esp -= 48
mov [esp+32], eax ; store eax to the value at the address 'esp + 32'
Ответ 5
Это синтаксис AT & T для x86. В AT & T % обычно обозначает регистр, тогда как $ зарезервирован для непосредственных пользователей. Если вы опускаете th $, ассемблер интерпретирует 48 как адрес.