2012-01-14 4 views

ответ

10

Компилятор создает пространство в стеке для хранения MXCSR. Это могло бы быть столь же хорошо сделано:

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

Но «push ecx», вероятно, короче или быстрее.

+0

D'oh ... полностью пропустил это. :) Большое спасибо. – Mehrdad

+0

И как это объясняет поп? – CodesInChaos

+0

@CodeInChaos: Восстановление указателя стека? – Mehrdad

3

Нажатие здесь используется для выделения 4 байтов временного пространства. [ESP] обычно указывает на адрес push-адреса, который мы не можем перезаписать.

ECX будет перезаписан здесь, однако ECX, вероятно, является изменчивым регистром в ABI, на который вы нацеливаетесь, поэтому функциям не нужно сохранять ECX.

Причина использования push/pop заключается в оптимизации пространства (и, возможно, скорости).

0

Он создает запись верхнего уровня, которую ESP теперь обозначает в качестве цели для инструкции stmxcsr. Затем результат сохраняется в EAX для возврата.

Смежные вопросы