Вопрос по assembly, x86 – Вставьте регистр XMM в стек

12

Есть ли способ поместить упакованное целое число двойного слова из регистра XMM в стек? а потом попсовать его обратно когда понадобится?

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

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

Ваш Ответ

2   ответа
0

нный стек, поэтому вы можете использовать movdqa вместо movdqu. Между этими двумя инструкциями существует небольшая разница во времени выполнения!

Error: User Rate Limit Exceededand esp, -16Error: User Rate Limit Exceeded-32Error: User Rate Limit Exceeded__m256Error: User Rate Limit Exceededalignas(16). godbolt.org/g/6856no. -mpreferred-stack-boundary=2Error: User Rate Limit Exceededrep stosError: User Rate Limit Exceeded
Error: User Rate Limit ExceededmovdquError: User Rate Limit ExceededmovdqaError: User Rate Limit Exceededand esp, -16Error: User Rate Limit ExceededespError: User Rate Limit Exceeded
Error: User Rate Limit Exceededrequires 16-byte stack alignmentError: User Rate Limit Exceededand esp, -16Error: User Rate Limit ExceededseparateError: User Rate Limit Exceeded
20

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

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

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

EDIT:

Пример верхнего кода - прямая эмуляция push / pop.

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

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

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

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded Daniel Gruszczyk
Error: User Rate Limit Exceeded

Похожие вопросы