estourar ou adicionar esp, 4? Qual é a diferença?
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?
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.
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.
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.