2011-12-27 29 views
5
mov eax, 0x01 
    mov ecx, 0x02 
    div ecx     ; Divide AX/CX, saves remainder in DX 
    cmp dx, 0 
    je OddNumber 
    int 80h 

जब मैं ओडनंबर लेबल करने के बजाय 1/2 को विभाजित करने का प्रयास करता हूं, तो यह "फ़्लोटिंग पॉइंट अपवाद" देता है। मुझे पता है 1/2 एक फ्लोट है, लेकिन मैं इसे कैसे संभाल सकता हूं? धन्यवाद।असेंबली डिवीजन और फ़्लोटिंग पॉइंट

जीडीबी का कहना है "कार्यक्रम सिग्नल एसआईजीएफपीई, अंकगणित अपवाद प्राप्त हुआ।" वैसे।

उत्तर

9
  1. आप div ecx कॉल करने से पहले शून्य edx की जरूरत है। 32-बिट डिवीज़र (उदाहरण के लिए, ecx) का उपयोग करते समय, divedx:eax में 64-बिट मान को इसके तर्क से विभाजित करता है, इसलिए यदि edx में जंक है, तो इसे लाभांश के हिस्से के रूप में माना जा रहा है।

  2. div के बाद, आप शायद edx ही नहीं, dx तुलना करना चाहते हैं।

1

आपका उत्तर इस floating point exception may mean division by 0 पोस्ट में शामिल किया गया प्रतीत होता है। क्या आप div से पहले edx में क्या देख सकते हैं?

संबंधित मुद्दे