Tôi đã được giao nhiệm vụ viết một ứng dụng đơn giản trong hỗn hợp C/ASM mà phải sử dụng bộ xử lý toán học.x87 FPOP và FCOM hướng dẫn - cách thức hoạt động?
Có hình trụ chức năng (float x, float y, float z) trả về 1 nếu điểm đã cho nằm trong hình trụ (hình trụ có base tại x = 0, y = 0, radius = 5 và height = 10) và 0 nếu không.
Vì vậy, có vẻ đơn giản. Kiểm tra xem z có nằm trong phạm vi < 0,10> và sau đó kiểm tra xem x^2 + y^2 < 25.
Nhưng kiến thức của tôi về x87 là không.
Có mọi thứ tôi đã viết.
_cylinder PROC
push ebp
mov ebp, esp
sub esp,8 ; I can't use .data in the application, so I reserve some space on the stack for numbers 10 and 25
mov [esp],10
mov [esp+4],25
finit
fldz
fld [ebp+8]
;here i get stuck
add esp, 8
pop ebp
_cylinder ENDP
Vì vậy, tôi gặp khó khăn. Vì vậy, tôi cố gắng tìm hướng dẫn nào tôi có thể sử dụng trong ứng dụng. Và ở đó tôi gặp khó khăn, bởi vì mỗi danh sách hướng dẫn/hướng dẫn tôi tìm thấy trên mạng được viết rất tệ nên tôi hầu như không thể hiểu được bất cứ điều gì.
Câu hỏi đặt ra là, điều gì sẽ xảy ra khi tôi bật thứ gì đó từ bộ xử lý toán học? Tôi có thể tìm thấy giá trị xuất hiện ở đâu? Nó làm thế nào để chuyển đổi từ giá trị 80 bit thành 32 bit (nếu có), dĩ nhiên là Câu hỏi khác là, FCOM (FCOMP cho biến thể pop) hoạt động như thế nào? Nó so sánh những gì để những gì (st0 đến st1 hoặc st1 để st0?), Và nơi tôi có thể xem liệu giá trị nhỏ hơn/bằng/lớn hơn?
Cảm ơn bạn đã trợ giúp!
Trước khi bạn nhận được quá sâu, hãy xem xét việc sử dụng SSE2 toán thay vì x87. Nó dễ dàng hơn nhiều để làm việc với (bạn có thể sử dụng thanh ghi thay vì một chồng), có nhiều chức năng hơn, và nói chung là nhanh hơn. – duskwuff
Duskwuff nói gì. 'x87' có hiệu quả không được chấp nhận và có rất ít lý do để phần mềm mới nhắm mục tiêu nó. –
@Stephen - "không được chấp nhận" bởi một số hệ điều hành, không phải CPU, nhà cung cấp (nhưng ngay cả ở đó, vẫn được hỗ trợ). Lý do sử dụng: ví dụ: độ chính xác mở rộng 80 bit và các hàm toán siêu việt. – PhiS