А почему add esp,4 предпочтительнее чем pop ecx?

Тема в разделе "WASM.BEGINNERS", создана пользователем zuze, 16 авг 2008.

  1. zuze

    zuze New Member

    Публикаций:
    0
    Регистрация:
    16 авг 2008
    Сообщения:
    18
    Мне сказали что add esp,4 предпочтительнее из-за того что в pop ecx не используется регистр и нет обращения к памяти, но подробностей не пояснили.

    Не могли бы Вы помочь с пояснением этой ситуации.
     
  2. Arthur

    Arthur New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2007
    Сообщения:
    494
    что такое add и что такое pop? При первом случае процессор просто прибавляет к esp, 4 (т. е. поднимает указатель на стек на 4, так что считай значение затерто-стек выравнен), а во втором случае процессор выполняет

    Код (Text):
    1. mov ecx, [esp]
    2. add esp, 4
    что лучше? если значение уже не используется лучше add, т. к. регистры и память не используются, а если нужно сохранить последние значение находящиеся в стеке, то pop. Как говорится дело все во времени и месте.
     
  3. TOLSTOPUZ

    TOLSTOPUZ New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2008
    Сообщения:
    509
    офтопик, подобный вопрос по оптимизации

    что быстрее

    add eax,1000

    или

    mov ecx,1000
    metka:
    inc eax
    loop metka
     
  4. dermatolog

    dermatolog Member

    Публикаций:
    0
    Регистрация:
    3 фев 2005
    Сообщения:
    406
    Адрес:
    Екатеринбург
    TOLSTOPUZ
    Вы такую траву больше не курите :))
     
  5. axe_roma

    axe_roma New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2004
    Сообщения:
    93
    Адрес:
    Russia
    не коретно заданный вопрос! кака было сказанно выше pop ecx используется для выталкивания слова из стека в указанный регистр а add esp,4 просто очищает стек на слово т.е ето две разные ситуации
     
  6. Aspire

    Aspire New Member

    Публикаций:
    0
    Регистрация:
    19 май 2007
    Сообщения:
    1.028
    TOLSTOPUZ Жжошь )))
     
  7. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    axe_roma
    Вопрос корректный.
    Если надо удалить из стека слово, мона либо add esp,4 либо pop reg32, причём значение регистра не используется.
    Если к примеру возврат из апи конвенции С то стек очищается как add esp,4*n, если один параметр то можно сделать pop edx или pop ecx, ведь апи не сохраняют значения этих регистров.
    Add Esp,4 занимает 3 байта, а pop ecx занимает 1 байт. Где важен размер кода необходимо использовать pop reg32.
     
  8. Arthur

    Arthur New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2007
    Сообщения:
    494
    TOLSTOPUZ
    а вы посудите - что процессор быстрее выполнит? одну команду или тысячу?
     
  9. SloT

    SloT New Member

    Публикаций:
    0
    Регистрация:
    11 авг 2008
    Сообщения:
    72
    Arthur
    =)
    даже если просто посмотреть на инструкции 3 против 1.
    уже всё понятно.
    TOLSTOPUZ
    всегда нужно стараться избегать циклов.
     
  10. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    рор и push обращаются к памяти, а add/sub esp,4 нет. В случае если их очень много и быстродействие крайне критично, add/sub esp,4 может быть оптимальнее.