2012-04-15 16 views
12

XMM 레지스터에서 압축 된 더블 워드 정수를 스택으로 푸시하는 방법이 있습니까? 그런 다음 필요할 때 나중에 다시 팝하십시오. 이상적으로는 범용 레지스터 PUSH 또는 POP와 같은 뭔가를 찾고 있어요XMM 레지스터를 스택에 푸시


, 나는 인텔 설명서를 확인했지만 나는 중 하나는 명령을 놓친 나 ...

일이없는 아니면 내가해야 할 것이다 값을 일반 레지스터에 풀고 밀어 넣으시겠습니까?

답변

20

아니, 86 아래에는 이러한 ASM의 지시가없는,하지만 당신은 같은 작업을 수행 할 수 있습니다

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

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

편집 :

위 코드 샘플을 직접 올리기/팝 에뮬레이션입니다. 당신이 있어야 ebp 레지스터보다, 또한 스택 다른 지역 변수에 사용하는 경우

처음에 제대로처럼 설정 : 당신은 또한 다니엘스 솔루션을 사용할 수있는 경우

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

!

+0

답변 해 주셔서 감사합니다. 그것을 기반으로 (당신의 솔루션은 정확하게 작동하지 않았다) 나는 작동하는 것을 생각해 냈다. (나의 질문을 보라). 아직 답변으로 표시되어 있습니다 ... –

+0

@Daniel Gruszczyk : 그렇습니다. ebp도 사용할 수 있지만 ebp 등록기가 제대로 설정되었는지 확인하십시오. ebp가 제대로 설정되지 않으면 다른 push 또는 call 지시문이 스택에 데이터를 덮어 쓸 수 있음을 기억하십시오. –

+2

결국이 질문을하는 미래의 사용자를 돕기 위해 결과적으로 답을 편집 할 가치가 있습니다. –