2012-04-15 10 views
12

Có cách nào để đẩy số nguyên từ kép được đóng gói từ đăng ký XMM vào ngăn xếp không? và sau đó bật nó lại khi cần thiết?
Đẩy XMM đăng ký vào ngăn xếp

Lý tưởng nhất Tôi đang tìm kiếm một cái gì đó giống như PUSH hoặc POP cho thanh ghi mục đích chung, tôi đã kiểm tra hướng dẫn sử dụng Intel nhưng tôi hoặc là bỏ lỡ lệnh hoặc không có một ...

Hoặc tôi sẽ phải giải nén các giá trị cho các thanh ghi chung và sau đó đẩy chúng?

Trả lời

20

Không, không có một hướng dẫn asm như dưới x86, nhưng bạn có thể làm điều gì đó như:

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

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

EDIT:

Upper mẫu mã là trực tiếp thi đua đẩy/pop.

Trong trường hợp mà bạn đang sử dụng trên stack cũng biến địa phương khác, so với ebp đăng ký phải có ít đầu tiên thiết lập đúng, như:

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

Trong trường hợp đó bạn cũng có thể sử dụng giải pháp Daniels!

+0

Cảm ơn câu trả lời của bạn. Dựa trên đó (giải pháp của bạn không chính xác làm việc) Tôi đã đưa ra một giải pháp làm việc (xem câu hỏi của tôi). Vẫn được đánh dấu là câu trả lời ... –

+0

@Daniel Gruszczyk: Có, bạn cũng có thể sử dụng ebp, nhưng hãy chắc chắn rằng thanh ghi ebp được đặt đúng. Hãy nhớ rằng các chỉ thị push hoặc call khác có thể ghi đè lên dữ liệu của bạn trên stack nếu ebp không được thiết lập đúng. –

+2

Có thể đáng để chỉnh sửa câu trả lời với những gì bạn cuối cùng đã làm việc, chỉ để giúp những người dùng trong tương lai nhìn thấy câu hỏi này. –