2012-04-15 3 views
12

Есть ли способ перетащить упакованное двойное слово из регистра XMM в стек? а затем позже поп его обратно, когда это необходимо?
Нажмите XMM зарегистрироваться в стек

В идеале я ищу что-то вроде PUSH или POP для регистров общего назначения, я проверил Intel руководства, но я либо пропустил команду или нет один ...

Или мне придется распаковать значения в общие регистры, а затем нажать их?

ответ

20

Нет, нет такой инструкции ASM под x86, но вы можете сделать что-то вроде:

//Push xmm0 
sub  esp, 16 
movdqu dqword [esp], xmm0 

//Pop xmm0 
movdqu xmm0, dqword [esp] 
add  esp, 16 

EDIT:

Верхний пример кода является прямой эмуляции тяни/поп.

В случае, если вы используете в стеке также других локальных переменных, чем ebp регистр должен быть первым правильно установлен, как:

push ebp 
mov ebp, esp 
sub esp, LocaStackVariablesSize 
//... your code 
mov esp, ebp 
pop ebp 
ret 

В этом случае вы также можете использовать решение Daniels!

+0

Спасибо за ваш ответ. Исходя из этого (ваше решение не совсем сработало), я придумал рабочий (см. Мой вопрос). Все еще отмечен как ответ ... –

+0

@ Daniel Gruszczyk: Да, вы также можете использовать ebp, но убедитесь, что регистр ebp правильно установлен. Помните, что другие директивы push или call могут перезаписывать ваши данные в стеке, если ebp установлен неправильно. –

+2

Возможно, стоит отредактировать ответ с тем, что вы в конечном итоге получили на работу, просто чтобы помочь будущим пользователям, которые видят этот вопрос. –

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