утверджается что после вычитания 8 из начального значения esp он станет кратным 16ти. Почему так??
Это в 64-х битах перед вызовом функции стак выравнивается по 16 байтам. Поэтому 8 байт на адрес возврата, остается ещё 8 (либо push rbp, либо sub rsp,8) — вот тебе и снова выравнивание по 16 байта.
В 32-х битах такого нет. Это либо под локальные переменные, либо х/з что за прикол.