2011-10-15 34 views
5

Hầu hết các trình biên dịch thực hiện các thao tác trên các toán hạng 64 bit (ví dụ: int dài) trong môi trường 32 bit như thế nào? nói cách khác, có cách nào để thực hiện các hoạt động này trong một bước duy nhất hay chúng ta cần truy cập nhiều vị trí bộ nhớ để thực hiện các hoạt động này?Hoạt động trên 64 bit hoạt động trong kiến ​​trúc 32 bit?

+0

hoặc nhiều thanh ghi thay vì –

Trả lời

5

Chúng sử dụng hai thanh ghi để giữ giá trị 64 bit. Một cho 32 bit thấp hơn và một cho 32 bit trên.

Đối với x86, 64-bit Addition/trừ được thực hiện sử dụng add-với-carry và trừ-với-mượn hướng dẫn:

add %eax, (lower 32-bits of operand) 
adc %edx, (upper 32-bits of operand) 

64-bit nhân là phức tạp hơn nhiều, nhưng cũng thực hiện bằng cách sử dụng kết hợp các hệ số nhân 32 bit và các hướng dẫn bổ sung 32-bit. (theo cách tương tự như phép nhân dài với 2 chữ số)

Đối với tải và cửa hàng, có, hai giá trị 32 bit cần được tải/lưu trữ vào/từ hai thanh ghi.

Tương tự, các số nguyên 128 bit có thể được triển khai trên phần cứng 64 bit. GCC hỗ trợ điều này như là một phần mở rộng.

+0

Điều gì về số nguyên 128 bit trên phần cứng 32-bit (x86)? –

+1

Nó trở nên xấu xí. Tại thời điểm này nó không phải là quá khác nhau từ số học đa chính xác. Ngoài ra, bạn sẽ được chuỗi 3 lệnh 'adc'. (Đừng quên bạn có một sự phụ thuộc vào cờ mang cờ có thể giết đường dẫn của bạn ...) Đối với phép nhân, bạn phải thực hiện 16 x 32-bit multiplies và một bó 'add' và' adc'. .. Tôi không biết bất kỳ trình biên dịch hỗ trợ này. – Mysticial

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