2012-01-14 9 views

Odpowiedz

10

Kompilator robi miejsce na stosie, aby przechowywać MXCSR. Mogło to równie dobrze zrobić:

sub esp,4 
stmxcsr [ESP] 
mov EAX, [ESP] 
add esp,4 
retn 

Ale "push ecx" jest prawdopodobnie krótszy lub szybszy.

+0

D'oh ... całkowicie to przegapiłem. :) Wielkie dzięki. – Mehrdad

+0

A jak to wyjaśnia pop? – CodesInChaos

+0

@CodeInChaos: Przywracanie wskaźnika stosu? – Mehrdad

3

Ten przycisk służy do przydzielenia 4 bajtów przestrzeni tymczasowej. [ESP] normalnie wskazywałby na pchany adres zwrotny, którego nie można zastąpić.

ECX zostanie tutaj zastąpione, jednak ECX jest prawdopodobnie zmiennym rejestrem w ABI, którego szukasz, więc funkcje nie muszą zachowywać ECX.

Powodem użycia przycisku pop/pop jest optymalizacja spacja (i ewentualnie prędkość).

0

Tworzy on pozycję najwyższego stosu, którą ESP określa teraz jako cel dla instrukcji stmxcsr. Następnie wynik jest zapisywany w EAX dla zwrotu.

Powiązane problemy