Intel BCD opcode
انٹیل بی سی ڈی اوپی کوڈز چھ x86 ہدایات کا ایک مجموعہ ہیں جو بائنری کوڈڈ اعشاریہ نمبروں کے ساتھ کام کرتے ہیں۔ x86 پروسیسرز میں نمبروں کی نمائندگی کے لیے استعمال ہونے والا ریڈکس 2 ہے۔ اسے بائنری عددی نظام کہا جاتا ہے۔ تاہم، x86 پروسیسرز کو اعشاریہ عددی نظام کے لیے محدود حمایت حاصل ہے۔ اس کے علاوہ، x87 حصہ ایک منفرد 18 ہندسوں (دس بائٹ) بی سی ڈی فارمیٹ کی حمایت کرتا ہے جسے فلوٹنگ پوائنٹ رجسٹروں میں لوڈ اور اسٹور کیا جا سکتا ہے، جہاں سے عام ایف پی کمپیوٹیشنز انجام دی جا سکتی ہیں۔ انٹیجر بی سی ڈی ہدایات اب لانگ موڈ میں سپورٹ نہیں ہیں۔ استعمال نمبر کی نمائندگی بی سی ڈی نمبروں کو انٹیجر رجسٹروں میں دو طریقوں سے پیش کیا جا سکتا ہے: پیک شدہ اعشاریہ اور غیر پیک شدہ اعشاریہ۔ پیک شدہ (4 بٹس) پیک شدہ اعشاریہ کی نمائندگی میں ایک اعشاریہ ہندسہ ایک نبل میں محفوظ کیا جاتا ہے۔ 10 سے 15 تک کی اقدار استعمال نہیں کی جاتی ہیں۔ غیر پیک شدہ (8 بٹس) غیر پیک شدہ اعشاری نمائندگی میں اعشاری ہندسہ ایک بائٹ میں محفوظ کیا جاتا ہے۔ 10 سے 255 تک کی اقدار استعمال نہیں کی جاتی ہیں۔ اوپری نبل کو نظر انداز کر دیا جاتا ہے، اور یہ یا تو صفر ہو سکتا ہے، یا ASCII کردار (ویلیو 3) کے لیے لیڈنگ-نبل ہو سکتا ہے۔ بی سی ڈی نمبروں کو عام طور پر رجسٹر کے سب سے نچلے بائٹ میں محفوظ کیا جاتا ہے، مثال کے طور پر۔ AL ؛ غیر پیک شدہ BCD نمبروں پر کارروائیاں رجسٹر کے سب سے کم بائٹ میں سب سے کم اہم ہندسے کی توقع کرتی ہیں، مثال کے طور پر۔ AL، اور دوسرے سب سے کم بائٹ میں سب سے اہم ہندسہ، مثال کے طور پر اے ایچ۔ صرف اعشاری اعداد کو 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 کوپروسیسر میں جوڑی لوڈ (FBLD) اور اسٹور اینڈ پاپ (FBSTP) ہدایات کی شکل میں BCD سپورٹ ہے۔ سابقہ ایف پی یو میں 80 بٹ بی سی ڈی انٹیجر کو لوڈ کرتا ہے، جبکہ مؤخر الذکر میموری میں 80 بٹ انٹیجر ویلیو کے طور پر ایف پی یو ویلیو لکھتا ہے۔ ایف پی یو کے اندر، اقدار کو عام x87 توسیعی صحت سے متعلق فلوٹس کے طور پر محفوظ کیا جاتا ہے۔ انٹیجر فیسنگ ورژن کے برعکس، دونوں ہدایات لانگ موڈ میں دستیاب رہتی ہیں۔ 80 بٹ فارمیٹ کو درج ذیل میں تقسیم کیا گیا ہے: ایک خاص "غیر معینہ مدت" ویلیو ہے جسے ایف ایف ایف ایف سی 1000000000000000 ایچ کے طور پر انکوڈ کیا گیا ہے۔ ایپلیکیشن بائنری کوڈڈ اعشاریہ (بی سی ڈی) نمبر اعشاریہ نمبروں کو محفوظ کرنے کے لیے استعمال ہوتے ہیں، خاص طور پر مالیاتی سافٹ ویئر میں۔ اوپر بیان کردہ اوپی کوڈ x86 ابتدائی بی سی ڈی سپورٹ دیتے ہیں۔ متبادل ان اوپی کوڈز کا استعمال کرتے ہوئے بی سی ڈی نمبروں کو شامل کرنا ایک پیچیدہ کام ہے، اور معمولی نمبروں کو بھی شامل کرنے کے لیے بہت سی ہدایات کی ضرورت ہوتی ہے۔ اس کے لیے بڑی مقدار میں میموری کی بھی ضرورت پڑ سکتی ہے۔ اگر صرف انٹیجر حسابات کیے جاتے ہیں، تو تمام انٹیجر حسابات درست ہوتے ہیں، اس لیے تعداد کی نمائندگی کا ریڈکس درستگی کے لیے اہم نہیں ہے۔ ایکس 86 پروسیسر پر، بائنری نمبروں کے ساتھ حساب عام طور پر بی سی ڈی نمبروں کے ساتھ اسی حساب سے بہت تیز ہوتے ہیں۔ x86 بٹ ہیرا پھیری ہدایات سیٹ حوالہ جات X86 ہدایات بھی دیکھیں۔