Intel BCD opcode
इंटेल बी. सी. डी. ऑपकोड छह x86 निर्देशों का एक समूह है जो द्विआधारी-कोडित दशमलव संख्याओं के साथ काम करते हैं। x86 प्रक्रमकों में संख्याओं के प्रतिनिधित्व के लिए उपयोग किया जाने वाला मूलांक 2 है। इसे द्विआधारी संख्या प्रणाली कहा जाता है। हालांकि, x86 प्रोसेसर के पास दशमलव संख्या प्रणाली के लिए सीमित समर्थन है। इसके अलावा, x87 भाग एक अद्वितीय 18-अंकीय (दस-बाइट) BCD प्रारूप का समर्थन करता है जिसे फ्लोटिंग पॉइंट रजिस्टरों में लोड और संग्रहीत किया जा सकता है, जहाँ से सामान्य FP गणनाएँ की जा सकती हैं। पूर्णांक बी. सी. डी. निर्देश अब लॉन्ग मोड में समर्थित नहीं हैं। उपयोग संख्या प्रतिनिधित्व बी. सी. डी. संख्याओं को पूर्णांक रजिस्टरों में दो तरीकों से दर्शाया जा सकता हैः पैक्ड दशमलव और अनपैक्ड दशमलव। पैक्ड (4 बिट) पैक्ड दशमलव प्रतिनिधित्व में एक दशमलव अंक को एक निब्बल में संग्रहीत किया जाता है। मान 10 से 15 का उपयोग नहीं किया जाता है। अनपैक्ड (8 बिट) अनपैक्ड दशमलव प्रतिनिधित्व में एक दशमलव अंक एक बाइट में संग्रहीत किया जाता है। 10 से 255 तक के मानों का उपयोग नहीं किया जाता है। ऊपरी निब्बल को नजरअंदाज कर दिया जाता है, और यह या तो शून्य हो सकता है, या एएससीआईआई वर्ण (मान 3) के लिए अग्रणी-निब्बल हो सकता है। बी. सी. डी. संख्याओं को आम तौर पर एक रजिस्टर के सबसे निचले बाइट में संग्रहीत माना जाता है, जैसे। ए. एल.; अनपैक्ड बी. सी. डी. संख्याओं पर संचालन एक रजिस्टर के सबसे निचले बाइट में सबसे कम महत्वपूर्ण अंक की उम्मीद करते हैं, जैसे। ए. एल., और दूसरे सबसे कम बाइट्स में सबसे महत्वपूर्ण अंक, जैसे। ए. एच. केवल दशमलव संख्या 0 से 99 को सीधे जोड़ा जा सकता है। सबसे पहले संख्याओं को हमेशा की तरह ऐड (या ए. डी. सी. यदि आपको कैरी फ्लैग की आवश्यकता है) का उपयोग करके जोड़ा जाता है। यदि दोनों निचले निब्बलों का योग 16 या उससे अधिक है तो प्रोसेसर समायोजन ध्वज निर्धारित करेगा, और यदि दोनों बाइट्स का योग 256 या उससे अधिक है तो कैरी ध्वज निर्धारित करेगा। फिर परिणाम को संख्या प्रतिनिधित्व के आधार पर समायोजित किया जाता है। पैक किए गए परिणाम को डी. ए. ए. का उपयोग करके समायोजित किया जाता है (जोड़ के बाद दशमलव समायोजन): यदि परिणाम का सबसे कम महत्वपूर्ण निब्बल 10 या उससे अधिक है, या यदि समायोजन फ्लैग सेट किया गया है, तो प्रोसेसर परिणाम में 6 जोड़ता है और निब्बल के किसी भी अतिप्रवाह को त्याग देता है। फिर, यदि परिणाम का सबसे महत्वपूर्ण निब्बल 10 या उससे अधिक है, या यदि कैरी फ्लैग सेट किया गया है, तो प्रोसेसर परिणाम में 96 (6 गुना 16) जोड़ता है और कैरी फ्लैग सेट करता है। पैक्ड नहीं किया गया परिणाम एएए का उपयोग करके समायोजित किया जाता है (जोड़ के बाद एएससीआईआई समायोजित करें): यदि परिणाम का सबसे कम महत्वपूर्ण निब्बल 10 या उससे अधिक है, तो प्रोसेसर इसमें 6 जोड़ता है और निब्बल के किसी भी अतिप्रवाह को छोड़ देता है, और इसे कम से कम महत्वपूर्ण बाइट में संग्रहीत करता है। सबसे महत्वपूर्ण बाइट्स को बढ़ाया जाता है। ध्यान दें कि इस बिंदु पर सबसे महत्वपूर्ण बाइट्स में एक वैध दशमलव संख्या नहीं हो सकती है। घटाव केवल दशमलव संख्या 0 से 99 को सीधे घटाया जा सकता है। सबसे पहले संख्याओं को हमेशा की तरह उप (या एस. बी. बी. यदि आपको कैरी फ्लैग की आवश्यकता है) का उपयोग करके घटाया जाता है। प्रोसेसर एडजस्ट फ्लैग सेट करेगा यदि कोई उधार कम से कम महत्वपूर्ण निब्बल में हुआ है, और कैरी फ्लैग यदि कोई उधार सबसे महत्वपूर्ण निब्बल में हुआ है। पैक्ड परिणाम को दास (घटाव के बाद दशमलव समायोजन) का उपयोग करके समायोजित किया जाता हैः यदि परिणाम का सबसे कम महत्वपूर्ण निब्बल 10 या उससे अधिक है, या यदि समायोजन फ्लैग सेट किया गया है, तो प्रोसेसर परिणाम से 6 घटाता है। फिर, यदि परिणाम का सबसे महत्वपूर्ण निब्बल 10 या उससे अधिक है, या यदि कैरी फ्लैग सेट किया गया है, तो प्रोसेसर परिणाम से 96 (6 गुना 16) घटाता है और कैरी फ्लैग सेट करता है। पैक्ड नहीं किया गया परिणाम को एएएस (घटाव के बाद एएससीआईआई समायोजित) का उपयोग करके समायोजित किया जाता हैः यदि परिणाम का सबसे कम महत्वपूर्ण निब्बल 10 या उससे अधिक है, तो प्रोसेसर उसमें से 6 घटाता है और इसे सबसे कम महत्वपूर्ण बाइट में संग्रहीत करता है। सबसे महत्वपूर्ण बाईट घटाया जाता है। ध्यान दें कि इस बिंदु पर सबसे महत्वपूर्ण बाइट्स में एक वैध दशमलव संख्या नहीं हो सकती है। गुणन केवल अनपैक्ड प्रतिनिधित्व समर्थित है। केवल दो एकल अंकों की संख्याओं को गुणा किया जा सकता है। सबसे पहले मूल का उपयोग करके अंकों को हमेशा की तरह गुणा किया जाता है। फिर परिणाम को आम का उपयोग करके समायोजित किया जाता है (ए. एस. सी. आई. आई. गुणन के लिए समायोजित करता है): प्रोसेसर परिणाम को दस से विभाजित करता है, परिणाम के सबसे महत्वपूर्ण बाईट में भागफल (केवल अभिन्न भाग) को संग्रहीत करता है और शेष परिणाम के सबसे कम महत्वपूर्ण बाईट में संग्रहीत करता है। विभाजन केवल अनपैक्ड प्रतिनिधित्व समर्थित है। संचालन 0 से 99 की सीमा में होना चाहिए। सबसे पहले ऑपरेंड को एएडी का उपयोग करके सामान्य द्विआधारी प्रतिनिधित्व में परिवर्तित किया जाता है (एएससीआईआई विभाजन से पहले समायोजित करता है): प्रोसेसर सबसे महत्वपूर्ण बिट को 10 से गुणा करके और सबसे कम महत्वपूर्ण बिट जोड़कर संख्याओं को परिवर्तित करता है। भागफल और विभाजन का शेष भाग हमेशा की तरह डिव का उपयोग करके प्राप्त किया जाता है, और सामान्य द्विआधारी प्रतिनिधित्व में मौजूद होगा। x87 में x87 कोप्रोसेसर में लोड (एफ. बी. एल. डी.) और स्टोर-एंड-पॉप (एफ. बी. एस. टी. पी.) निर्देशों के रूप में बी. सी. डी. समर्थन होता है। पहला एफ. पी. यू. में 80-बिट बी. सी. डी. पूर्णांक को लोड करता है, जबकि दूसरा मेमोरी में 80-बिट पूर्णांक मान के रूप में एफ. पी. यू. मान लिखता है। एफ. पी. यू. के अंदर, मानों को सामान्य x87 विस्तारित-परिशुद्धता फ्लोट्स के रूप में संग्रहीत किया जाता है। पूर्णांक-सामना करने वाले संस्करणों के विपरीत, दोनों निर्देश लंबे मोड में उपलब्ध रहते हैं। 80-बिट प्रारूप को निम्नलिखित में विभाजित किया गया हैः एक विशेष "अनिश्चित" मूल्य है जिसे एफ. एफ. एफ. एफ. सी. 1000000000000000एच के रूप में कूटबद्ध किया गया है। अनुप्रयोग द्विआधारी-कोडित दशमलव (बी. सी. डी.) संख्याओं का उपयोग दशमलव संख्याओं को संग्रहीत करने के लिए किया जाता है, विशेष रूप से वित्तीय सॉफ्टवेयर में। ऊपर वर्णित ऑपकोड x86 प्राथमिक बी. सी. डी. समर्थन देते हैं। विकल्प इन ऑपकोड का उपयोग करके बी. सी. डी. संख्याओं को जोड़ना एक जटिल कार्य है, और मामूली संख्याओं को जोड़ने के लिए कई निर्देशों की आवश्यकता होती है। इसके लिए बड़ी मात्रा में स्मृति की भी आवश्यकता हो सकती है। यदि केवल पूर्णांक गणना की जाती है, तो सभी पूर्णांक गणनाएँ सटीक होती हैं, इसलिए सटीकता के लिए संख्या प्रतिनिधित्व का मूलांक महत्वपूर्ण नहीं है। एक x86 प्रोसेसर पर, द्विआधारी संख्याओं के साथ गणना आमतौर पर BCD संख्याओं के साथ समान गणनाओं की तुलना में बहुत तेज होती है। x86 बिट हेरफेर निर्देश सेट संदर्भ X86 निर्देश भी देखें।