2012-04-15 14 views
12

¿Hay alguna manera de insertar un entero de palabra doble empaquetada desde el registro de XMM en la pila? y luego volver a abrirlo cuando sea necesario?
Insertar registro de XMM en la pila

Idealmente Busco algo así como PUSH o POP para los registros de propósito general, he comprobado los manuales de Intel pero tampoco se perdió el comando o no es uno ...

o voy a tener que Desempaquetar valores a registros generales y luego empujarlos?

Respuesta

20

No, no hay tal instrucción asm bajo x86, pero se puede hacer algo como:

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

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

EDIT:

ejemplo de código superior es la emulación de empuje/pop directa.

En caso de que esté utilizando en la pila también otras variables locales, que el registro ebp debe ser en un principio establecido correctamente, como:

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

En ese caso, también se puede utilizar la solución Daniels!

+0

Gracias por la respuesta. Basado en eso (su solución no funcionó exactamente), se me ocurrió una de trabajo (vea mi pregunta). Todavía marcado como respuesta ... –

+0

@Daniel Gruszczyk: Sí, también puede usar ebp, pero asegúrese de que el registro de ebp esté configurado correctamente. Recuerde que otras directivas push o call pueden sobrescribir sus datos en la pila si ebp no está configurado correctamente. –

+2

Puede valer la pena editar la respuesta con lo que eventualmente llegó a trabajar, solo para ayudar a los futuros usuarios que ven esta pregunta. –

Cuestiones relacionadas