मुझे मिश्रित सी/एएसएम में एक साधारण आवेदन लिखने के लिए काम किया गया है जिसे गणित कॉप्रोसेसर का उपयोग करना है।x87 एफपीओपी और एफकॉम निर्देश - ये कैसे काम करते हैं?
फ़ंक्शन सिलेंडर (फ्लोट एक्स, फ्लोट वाई, फ्लोट जेड) है जो 1 देता है यदि दिया गया बिंदु सिलेंडर के भीतर है (सिलेंडर का x = 0, y = 0, त्रिज्या = 5 और ऊंचाई = 10), और 0 अगर यह नहीं है।
तो, सरल दिखता है। जांचें कि z < 0,10> के भीतर है, और फिर जांचें कि x^2 + y^2 < 25.
लेकिन x87 के बारे में मेरा ज्ञान शून्य है।
मैंने जो कुछ लिखा है वह सब कुछ है।
_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
तो मैं अटक गया। इसलिए, मैं यह जानने का प्रयास करता हूं कि मैं एप्लिकेशन में कौन से निर्देशों का उपयोग कर सकता हूं। और वहां मैं फंस गया, क्योंकि नेट पर जो भी ट्यूटोरियल/निर्देश सूची मुझे मिलती है वह इतनी बुरी तरह लिखी जाती है कि मैं मुश्किल से कुछ भी समझ सकता हूं।
सवाल यह है कि, जब मैं गणित कॉप्रोसेसर से कुछ पॉप करता हूं तो क्या होता है? मुझे पॉपड वैल्यू कहां मिल सकता है? यह 80-बिट मान से 32 बिट एक में परिवर्तित कैसे होता है (यदि यह करता है, तो एक और सवाल यह है कि एफसीओएम (पॉप संस्करण के लिए एफसीओएमपी) कैसे काम करता है? यह तुलना करता है कि क्या (st0 से st1 या st1 से st0?), और मैं कहां देख सकता हूं कि मान छोटा/बराबर/बड़ा है या नहीं?
किसी भी मदद के लिए धन्यवाद!
इससे पहले कि आप बहुत गहरा मिलता है, बजाय SSE2 गणित का उपयोग कर x87 का विचार करें। इसके साथ काम करना बहुत आसान है (आप स्टैक के बजाय रजिस्टरों का उपयोग करना चाहते हैं), इसमें अधिक फ़ंक्शन उपलब्ध हैं, और आमतौर पर तेज़ होते हैं। – duskwuff
क्या duskwuff ने कहा। 'x87' प्रभावी रूप से बहिष्कृत किया जा रहा है, और नए सॉफ्टवेयर को लक्षित करने के लिए बहुत कम कारण है। –
@ स्टीफन - कुछ ओएस द्वारा "बहिष्कृत", सीपीयू नहीं, विक्रेता (लेकिन यहां तक कि अभी भी समर्थित है)। उपयोग के कारण: उदाहरण के लिए 80-बिट विस्तारित परिशुद्धता और अनुवांशिक गणित कार्य। – PhiS