О, черт возьми, я отвечаю своим любимым способом!
Это зависит!
Это зависит от используемого вами механизма вызова.Взгляните на x86 соглашения о вызовах и удивитесь.
Однако обратите внимание, что в наиболее распространенных по умолчанию параметрах функции cdecl помещаются в стек в порядке справа налево,Фактически, они также помещаются справа налево в stdcall, который использует Windows.
Теперь, чтобы выяснить, каким образом esp+x
идет в порядке следования функций.Стек увеличивается от верхнего конца адресного пространства вниз, и упорядочение справа налево подразумевает, что самый правый объект сначала попадает в стек, поэтому самые правые аргументы имеют более высокие адреса памяти.Таким образом, когда вы добавляете в esp
или любой другой регистр отслеживание самого низкого (с точки зрения адреса памяти) аргумента в стеке, вы перемещаетесь по аргументам справа налево.
Я хочу добавить, что ebp
имеет тенденцию быть базовым указателем, а esp
перемещается, чтобы обеспечить локальное хранение переменных в соответствии с этим описанием пролога функции .