поп или добавить esp, 4?В чем разница? - PullRequest
10 голосов
/ 06 мая 2011

Я видел этот вопрос, но я не нашел в нем своего ответа ..

Итак, почему я предпочитаю использовать add esp, 4 или add esp, 8 вместо использования pop один или два раза? Есть ли какая-либо разница (производительность, безопасность и т. Д.) Или это вопрос личного выбора?

Ответы [ 3 ]

19 голосов
/ 06 мая 2011

pop также делает add esp, 4, он просто сохраняет все, что находится наверху стека в своем операнде, прежде. Если вам нужно, что находится в стеке, вероятно, pop быстрее, чем mov wherever, [esp]; add esp, 4, но если вам просто нужно очистить стек, add esp, 4 будет хорошо.

1 голос
/ 12 июля 2017

pop загружает данные из памяти (в стеке - указывает ss: [esp]) в регистр, т.е. использует процессор load unit, в то время как add esp не использует load load.Процессоры, начиная с Pentium Pro, выполняют Внеочередное выполнение , т.е. выполняют за цикл столько инструкций, сколько имеется внутренних шлюзов (единиц), если эти инструкции могут выполняться одновременно, и, при необходимости, повторноупорядочивает порядок инструкций для полного использования блоков.

Поскольку большинство процессоров имеют только две загрузочные единицы, если вам не нужны данные из стека (т.е. вы хотите просто пропустить данные), лучшеadd esp, потому что это операция только для регистра и не использует загрузочную единицу, поэтому ваш процессор сможет использовать загрузочную единицу для чего-то другого в это время.

1 голос
/ 06 мая 2011

Как правило, инструкция pop не эквивалентна add esp, N.

pop используется для удаления данных из стека и сохранения их в каком-либо регистре; это также не зависит от того, в каком направлении растет стек, хотя обычно это не проблема.

Ручное добавление или вычитание из указателя стека, esp, не сохраняет удаленные данные в регистре. Скорее всего, это будет более эффективно, если вам не нужно ничего делать с данными, удаляемыми из стека.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...