2008-11-04 24 views
8

Tại sao Windows 64 lại chọn xmm6 và xmm7 để lưu/khôi phục?Tại sao Windows 64 lại chọn xmm6 và xmm7 để lưu/khôi phục?

Trong Windows 32, bạn có thể viết các thủ tục lắp ráp được ghi đè lên xmm0 ... xmm7. Nhưng nếu bạn lấy mã assembly tương tự và chạy nó trong Windows 64, nó thường sẽ gây ra lỗi ứng dụng vì VS2007 lưu trữ các giá trị có độ chính xác gấp đôi trong xmm6 và xmm7. Dường như với tôi rằng X64 có 16 thanh ghi xmm0 xmm15 (trong khi X32 chỉ có 8 thanh ghi xmm), thì Microsoft có thể đã chọn cho phép người dùng dùng đinh ghim xmm0..xmm7 (để họ có thể tái sử dụng thói quen lắp ráp từ Win32 mà không cần suy nghĩ về nó) nhưng yêu cầu người dùng lưu/khôi phục xmm8 ... xmm15.

Vì vậy, để thỏa mãn sự tò mò của riêng tôi, tại sao Windows 64 lại chọn yêu cầu xmm6 và xmm7 để lưu/khôi phục?

Trả lời

1

Câu hỏi thú vị. Tôi thấy điều này: Win64 Structured Exception Handling, tuyên bố rằng XMM6 đến XMM15 phải được lưu/khôi phục, nhưng không nói lý do tại sao.

Wikipedia nói rằng Microsoft x64 calling convention sử dụng XMM0 - XMM3, ngụ ý rằng những người khác được giả định là được giữ nguyên. Một lần nữa, nó không nói tại sao.

Các vấn đề liên quan