estourar ou adicionar esp, 4? Qual é a diferença?

Vi esta pergunta, mas não encontrei a minha resposta nela..

Então, porque é que eu preferiria usar {[[0]} ou add esp, 8 em vez de usar {[[2]} uma ou duas vezes? Existe alguma diferença (desempenho, segurança, etc.) de todo ou é uma questão de escolha pessoal?

 10
Author: Community, 2011-05-06

3 answers

pop o add esp, 4 também, ele simplesmente salva o que há no topo da pilha em seu operando antes. Se você precisar do que está na pilha provavelmente pop é mais rápido do que {[[3]} mas se você simplesmente precisa limpar a pilha add esp, 4 vai ficar bem.

 18
Author: BlackBear, 2011-05-05 21:19:36

Geralmente, a instrução pop não é equivalente a add esp, N.

pop é usado para remover dados da pilha e armazená-lo em algum registro; também é agnóstico para a direção em que a pilha cresce, embora isso geralmente não é um problema.

Adicionar ou subtrair manualmente do ponteiro da pilha, esp, não preserva os dados removidos num registo. Provavelmente seria mais eficiente, assumindo que você não precisa fazer nada com os dados sendo removidos do pilho.

 0
Author: Collin Dauphinee, 2011-05-05 21:08:06

pop carrega dados da memória (empilhados apontados por ss: [esp]) para um registo, ou seja, usa a unidade de carga do processador, enquantoadd esp não usa a unidade de carga. Processadores desde Pentium Pro do execução fora de ordem isto é, executar todas as instruções em um ciclo como ele tem portas internas (unidades) disponíveis, se essas instruções podem ser executadas simultaneamente, e, se necessário, reorganiza a ordem de instruções para utilizar as unidades completamente.

Desde que a maioria dos processadores apenas duas unidades de carga, se você não precisa de dados da pilha (por exemplo, você quiser apenas ignore os dados), é melhor add esp, porque é um registro somente de operação e não emprega uma unidade de carga, assim, o seu processador será capaz de usar a carga da unidade para outra coisa naquele momento.

 0
Author: Maxim Masiutin, 2017-07-12 07:35:16