از قبل می دانیم عمل تفریق در هر مبنایی به فرض r به صورت زیر انجام می شود:
A - B = A + r'th complete B
یعنی عمل تفریق A و B برابر با جمع عدد A با مکمل r عدد B است.
مثلا در مبنای 2 برای تفریق عدد اول را با مکمل دو عدد دوم جمع می کردیم که مکمل 2 همان مکمل 1 بعلاوه 1 است. و در مبنای ده باید عدد اول را با مکمل 9 عدد دوم بعلاوه 1 جمع کنیم.
چون BCD عددی در مبنای ده است که هر رقم آن به صورت دودویی نمایش داده می شود پس در تفریق A-B باید عدد A را با مکمل 9 عدد B بعلاوه یک جمع کنیم.
برای بدست آوردن مکمل 9 در دهدهی هر رقم را منهای 9 می کردیم اما در BCD اینگونه نیست و دو روش داریم:
1) اول عدد را با 0110 جمع کرده سپس تمام ارقام را not کنیم.
2)تمام ارقام عدد را not کرده و سپس با 1010 جمع کنیم و از carry آن صرف نظر کنیم.
مکمل 9 عدد 1100 را بدست آورید:
result: not(1100 + 0110) =1101
تفریق دو عدد 0110 -1001 را به صورت bcd انجام دهید:
ابتدا مکمل 9 عدد 0110 را بدست می آوریم:
result: not(0110 + 0110 ) = 0011
پاسخ تفریق برابر است با جمع bcd اعداد زیر:
result: 1001 + 0011 + 0001= 0001 0001
که جواب نهایی ما رقم یکان یعنی 0001 است و دهگان به عنوان carry در نظر می گیریم و از آن صرف نظر می کنیم. زیرا از قبل در مکمل 2 به یاد داریم هنگامی که عدد A بزرگتر از عدد B باشد carry برابر یک می شد و بالعکس carry برابر صفر می شد.
پس برای اینکه مدار تفریق bcd رو کامل کنیم ، نیاز به یک مکمل 9 کننده داریم که ابتدا عدد B رو مکمل نه آن را حساب کند سپس وارد bcd adder بشود و همچنین cin رو به bcd adder باید 1 بدیم به عنوان اون یکی که باید با عدد مکمل 9 B جمع شود ، پس داریم:
طبق شکل بالا ، الان چالش پیش روی ما در این است که این مکمل 9 کننده رو بسازیم!
همانطور که از قبل گفته شد ، برای بدست آوردن مکمل9 bcd دو روش داشتیم ، ساخت هر دو روش به صورت زیر خواهد بود:
سپس در آخر یکی از دو مدار بالا را در شکل اول به جای مکمل 9 کننده جایگذاری می کنیم و تمااام! حالا ما یک مکمل9 کننده داریم!
***یعنی تصور کنید اگر M مقدارش یک بود عمل تفریق انجام شود و اگر مقدار M برابر صفر بود عمل جمع انجام شود.
از درس مدار منطقی با xor آشنا هستید . در xor هرگاه عددی با یک xor شود برابر not آن عدد و اگر با صفر xor شود برابر خودش خواهد بود.
از همین مزیت xor استفاده کرده و ورودی کنترلی M را وارد bcd adder خودمون می کنیم و به شکل زیر می رسیم:
همچنین می توان به عنوان روش دوم از یک مالتی پلکسر استفاده کرد که اگر ورودی کنترل کننده یک باشد مکمل 9 عدد B را به bcd adder بفرستد و اگر ورودی کنترل کننده صفر باشد خود عدد B را به bcd adder بفرستد.
بله می شود از خاصیت xor در این جا هم استفاده کرد و به شکل زیر رسید:
و حالا با همدیگه bcd adder رو کامل یاد گرفتیم ;))))