Мне сказали что add esp,4 предпочтительнее из-за того что в pop ecx не используется регистр и нет обращения к памяти, но подробностей не пояснили. Не могли бы Вы помочь с пояснением этой ситуации.
что такое add и что такое pop? При первом случае процессор просто прибавляет к esp, 4 (т. е. поднимает указатель на стек на 4, так что считай значение затерто-стек выравнен), а во втором случае процессор выполняет Код (Text): mov ecx, [esp] add esp, 4 что лучше? если значение уже не используется лучше add, т. к. регистры и память не используются, а если нужно сохранить последние значение находящиеся в стеке, то pop. Как говорится дело все во времени и месте.
офтопик, подобный вопрос по оптимизации что быстрее add eax,1000 или mov ecx,1000 metka: inc eax loop metka
не коретно заданный вопрос! кака было сказанно выше pop ecx используется для выталкивания слова из стека в указанный регистр а add esp,4 просто очищает стек на слово т.е ето две разные ситуации
axe_roma Вопрос корректный. Если надо удалить из стека слово, мона либо add esp,4 либо pop reg32, причём значение регистра не используется. Если к примеру возврат из апи конвенции С то стек очищается как add esp,4*n, если один параметр то можно сделать pop edx или pop ecx, ведь апи не сохраняют значения этих регистров. Add Esp,4 занимает 3 байта, а pop ecx занимает 1 байт. Где важен размер кода необходимо использовать pop reg32.
Arthur =) даже если просто посмотреть на инструкции 3 против 1. уже всё понятно. TOLSTOPUZ всегда нужно стараться избегать циклов.
рор и push обращаются к памяти, а add/sub esp,4 нет. В случае если их очень много и быстродействие крайне критично, add/sub esp,4 может быть оптимальнее.