كيف تتعامل المعالجات مع الأعداد السالبة؟ شرح ثنائي المتمم ولماذا تعتمد عليه وحدة المعالجة

دقائق القراءة: 7

مقدمة: لماذا تحتاج المعالجات إلى طريقة ذكية لتمثيل الأعداد السالبة؟

من أول الحقائق التي نتعلمها عن الحاسوب أنه لا يفهم في مستواه الأدنى سوى 0 و1، أي bits. أما نحن البشر فنتعامل مع الأرقام بالنظام العشري، ونستخدم الإشارتين + و- للتعبير عن القيم الموجبة والسالبة. هنا ظهر تحدٍ هندسي مهم: كيف يمكن للمعالج أن يمثل الأعداد السالبة وأن يجري عليها عمليات حسابية بكفاءة، وهو لا يملك سوى حالتين فقط؟

الإجابة جاءت عبر تصميم رياضي وهندسي شديد الأناقة، وهو ما يعرف باسم Two's Complement. هذا الأسلوب لم يسهّل فقط تمثيل الأعداد السالبة، بل جعل دوائر المعالج أبسط وأسرع وأقل استهلاكاً للطاقة.

رسم توضيحي لمفهوم تمثيل الأعداد السالبة في المعالج باستخدام النظام الثنائي

خلفية أساسية: كيف ينفّذ الحاسوب التعليمات؟

كل ما يوجد داخل الحاسوب في النهاية يتحول إلى سلسلة من 0 و1: النصوص، الصور، الفيديوهات، البرامج، وحتى الأرقام. توجد آليات ترميز مختلفة لتحويل كل نوع من البيانات إلى صيغة ثنائية، مثل ASCII وUnicode للنصوص.

أما البرامج التي نكتبها، فتتحول إلى تعليمات آلة بواسطة أدوات مثل compiler وassembler. بعد ذلك تُخزَّن هذه التعليمات في الذاكرة الرئيسية RAM، ثم يبدأ المعالج بتنفيذها عبر دورة معروفة باسم fetch-decode-execute.

مخطط دورة الجلب وفك التشفير والتنفيذ داخل المعالج

تعمل هذه الدورة على النحو التالي:

  • يجلب المعالج التعليمة من الذاكرة.
  • تفك وحدة التحكم التعليمة إلى جزأين: opcode وoperands.
  • يحدد opcode نوع العملية المطلوبة، مثل ADD أو JMP أو INC.
  • تمثل operands القيم أو المواقع التي ستُنفذ عليها العملية.
  • تنتقل التعليمة إلى وحدة الحساب والمنطق ALU لتطبيق العملية ثم حفظ النتيجة.

على سبيل المثال، التعليمة ADD eax, 42 تعني إضافة القيمة 42 إلى السجل eax. فإذا كانت قيمة eax الحالية هي 20، فستصبح بعد التنفيذ 62.

الصيغة المنطقية لهذه العملية هي: eax = eax + 42.

حاسوب EDVAC من أوائل الحواسيب الإلكترونية الثنائية في التاريخ

في الحواسيب المبكرة مثل EDVAC، كان الهدف الأساسي هو تسريع الحسابات الرياضية الشاقة. ولهذا بُنيت كثير من مكونات الحوسبة حول دوائر الجمع، لأن الطرح والضرب والقسمة يمكن في النهاية تفكيكها إلى عمليات تعتمد على الجمع. من هنا نفهم لماذا كان تمثيل الأعداد السالبة بكفاءة مسألة مركزية في تصميم المعالجات.

كيف يعمل النظام الثنائي؟

في النظام العشري، تعتمد قيمة الرقم على موضعه. فكل خانة تحمل وزناً يساوي قوة من قوى 10، مثل 10^0 و10^1 و10^2، وهكذا.

شرح أوزان الخانات في النظام العشري اعتماداً على قوى العدد 10

أما في النظام الثنائي، فالأمر نفسه تقريباً، لكن أوزان الخانات تنمو وفق قوى العدد 2 بدلاً من 10. أي أن الخانات تمثل 2^0 و2^1 و2^2 وما بعدها.

شرح أوزان الخانات في النظام الثنائي اعتماداً على قوى العدد 2

مثلاً، العدد الثنائي 00110101 يساوي عشرياً 53. يحسب الحاسوب هذه القيمة تماماً كما نحسب نحن العدد العشري: بضرب كل خانة في وزنها ثم جمع النتائج.

كيفية جمع الأعداد الثنائية

عملية الجمع في النظام الثنائي تشبه كثيراً الجمع العشري، مع اختلاف أن الخانات لا تحتوي إلا على 0 و1.

لنأخذ المثال التالي: جمع 1101 أي 13 مع 1100 أي 12.

الخطوة الأولى في جمع عددين ثنائيين بدءاً من أقل بت أهمية

نبدأ من أقصى اليمين، أي من خانة 2^0. جمع 1 مع 0 يعطينا 1.

الخطوة الثانية في جمع الأرقام الثنائية عندما تكون القيمة 0 زائد 0

في الخانة التالية، 0 + 0 = 0.

الخطوة الثالثة في جمع الأرقام الثنائية مع توليد حمل عند 1 زائد 1

ثم نصل إلى 1 + 1، والناتج هنا هو 10 بالنظام الثنائي، أي نضع 0 ونرحّل 1 إلى الخانة التالية.

النتيجة النهائية لعملية الجمع الثنائي مع الحمل بين الخانات

في النهاية نحصل على 11001، وهو يساوي 25 بالنظام العشري، وهذا صحيح لأن 13 + 12 = 25.

لكن هناك نقطة مهمة: إذا كان الجهاز يعمل بعرض 4-bit فقط، فلن يتمكن من تخزين البت الخامس. هذه الحالة تسمى overflow، وغالباً تُهمل البتات الزائدة في حسابات الأعداد الصحيحة. عندها تصبح النتيجة المخزنة 1001 فقط.

مفاهيم أساسية قبل الدخول إلى الأعداد السالبة

قبل الحديث عن السالب، نحتاج إلى فهم مصطلحين مهمين:

  • LSB أو Least Significant Bit: وهو البت الموجود في أقصى اليمين، ويحمل أقل وزن.
  • MSB أو Most Significant Bit: وهو البت الموجود في أقصى اليسار، ويحمل أعلى وزن.

توضيح الفرق بين أقل بت أهمية وأعلى بت أهمية في العدد الثنائي

لو كانت الأعداد الموجبة فقط هي الموجودة، لتوقف الشرح هنا. لكن وجود الأعداد السالبة هو ما جعل تصميم الحساب داخل المعالجات أكثر عمقاً وذكاءً.

الطريقة الأولى: تمثيل الإشارة والمقدار Sign Magnitude

في هذا الأسلوب، يُستخدم البت الأيسر MSB بوصفه بت الإشارة:

  • 0 يعني أن العدد موجب.
  • 1 يعني أن العدد سالب.

أما بقية البتات فتمثل مقدار العدد.

شرح أسلوب تمثيل الأعداد السالبة بطريقة الإشارة والمقدار

مثلاً، العدد 1101 في هذا النظام يعني:

  • البت الأول 1 ← العدد سالب.
  • القيمة المتبقية 101 ← تساوي 5.
  • إذن الناتج هو -5.

جميع القيم الممكنة في نظام 4 بت باستخدام أسلوب الإشارة والمقدار

ظاهرياً يبدو الأسلوب منطقياً، لكنه يعاني مشكلة كبيرة عند إجراء العمليات الحسابية.

مشكلة هذا الأسلوب في العمليات الحسابية

لنفترض أننا نريد جمع +4 مع -1. النتيجة المتوقعة هي +3 أي 0011.

مشكلة تمثيل الإشارة والمقدار عند جمع عدد موجب مع عدد سالب

لكن الناتج لا يخرج صحيحاً عند تطبيق الجمع الثنائي المباشر. وهذا يعني أن المعالج سيحتاج إلى منطق إضافي للتعامل مع الإشارات أثناء كل عملية جمع أو طرح. هذه الزيادة في التعقيد غير مرغوبة هندسياً، لأنها ترفع استهلاك الطاقة وتزيد تكلفة الدوائر وتضعف الأداء، خصوصاً في الحواسيب المبكرة.

الحل الأذكى: نظام ثنائي المتمم Two's Complement

هنا تظهر الفكرة العبقرية التي ما زالت تستخدم في معظم المعالجات الحديثة. في هذا النظام:

  • الأعداد الموجبة تُمثَّل كما هي تقريباً، مع وجود 0 في البت الأعلى.
  • الأعداد السالبة لا تُكتب فقط بتبديل بت الإشارة، بل عبر عمليتين رياضيتين منظمتين.

لنرَ كيف نمثل العدد -6 انطلاقاً من +6.

الخطوة الأولى: عكس جميع البتات

العدد +6 في 4-bit هو 0110.

الخطوة الأولى في حساب ثنائي المتمم عبر عكس جميع البتات

نعكس البتات:

  • 0 تصبح 1
  • 1 تصبح 0

فتتحول 0110 إلى 1001. هذه النتيجة تسمى One's Complement.

الخطوة الثانية: إضافة 1

الخطوة الثانية في حساب ثنائي المتمم بإضافة واحد بعد عكس البتات

نضيف 0001 إلى 1001، فنحصل على 1010. وهذا هو تمثيل -6 في نظام Two's Complement.

ملخص سريع لآلية حساب ثنائي المتمم لعكس إشارة العدد

باختصار:

  1. اعكس البتات.
  2. أضف 1.

وهكذا تحصل على النظير السالب للعدد.

جدول يوضح جميع القيم الممكنة في نظام 4 بت باستخدام ثنائي المتمم

لماذا يعد ثنائي المتمم أفضل من تمثيل الإشارة والمقدار؟

القيمة الحقيقية لهذا النظام تظهر عند تنفيذ العمليات الحسابية. لنجرب جمع 0100 أي +4 مع 1111 أي -1.

مثال يوضح نجاح ثنائي المتمم في جمع عدد موجب مع عدد سالب بدقة

سنحصل مباشرة على الناتج الصحيح: 0011 أي +3. وهذا يعني أن المعالج يمكنه جمع الأعداد دون الحاجة إلى منطق خاص لكل إشارة. يكفي استخدام دائرة الجمع نفسها.

هذا هو جوهر الجمال الهندسي في Two's Complement: توحيد طريقة التعامل مع الموجب والسالب داخل العتاد.

كيف يفك النظام أو المبرمج قيمة عدد سالب مخزّن بالثنائي؟

لنفترض أن السجل eax يحتوي على القيمة 1100. كيف نعرف أن هذه القيمة تعني -4؟

القاعدة العملية بسيطة:

  1. إذا كان البت الأعلى MSB يساوي 0 فالعدد موجب، ونقرأه مباشرة.
  2. إذا كان يساوي 1 فالعدد سالب.
  3. لحساب قيمته، نأخذ Two's Complement له مرة أخرى لنحصل على القيمة الموجبة المقابلة.

مثال على فك تمثيل عدد سالب من صيغة ثنائي المتمم إلى القيمة العشرية

فمثلاً:

  • القيمة المخزنة: 1100
  • بما أن البت الأعلى 1 ← العدد سالب
  • نحسب Two's Complement للعدد 1100
  • الناتج 0100 أي 4
  • إذن القيمة الأصلية هي -4

ومن الخصائص الجميلة في هذا النظام أن تطبيق Two's Complement على عدد سالب يعيدك إلى المقابل الموجب، والعكس صحيح.

لماذا تعمل هذه الفكرة رياضياً؟

لفهم السبب، تخيل أنك تريد إيجاد سالب عدد ما، مثل +42. أبسط تفسير رياضي لذلك هو طرحه من الصفر:

0 - 42 = -42

وإذا طرحت -42 من الصفر فستعود إلى +42.

هذه الفكرة البسيطة هي الأساس العميق وراء Two's Complement.

شرح رياضي يوضح أن ثنائي المتمم يعادل طرح العدد من الصفر

لنأخذ مثالاً على العدد 0101 أي +5. في نظام 4-bit يمكن تمثيل الصفر مع حمل إضافي بالشكل 10000 إذا تجاهلنا بت الفيض overflow. عند إجراء العملية 10000 - 0101 نحصل على التمثيل الثنائي لـ -5.

والفكرة الأذكى أن:

10000 = 1111 + 0001

لذلك يمكن إعادة كتابة العملية هكذا:

10000 - 0101 = (1111 + 0001) - 0101

ثم نعيد ترتيبها إلى:

(1111 + 0001) - 0101 = (1111 - 0101) + 0001

وعند طرح 0101 من 1111 نحصل عملياً على عكس البتات، ثم نضيف 1. وهذا بالضبط هو تعريف Two's Complement.

Step 1: invert 0101  => 1010
Step 2: add 1       => 1011

إذن، عكس البتات ثم إضافة واحد ليس حيلة عشوائية، بل طريقة سريعة جداً لتنفيذ العملية 0 - number دون الحاجة إلى دائرة طرح مستقلة ومعقدة.

كيف استفادت المعالجات من هذا الأسلوب؟

بفضل نظام Two's Complement، أصبحت المعالجات قادرة على تنفيذ الطرح عبر الجمع فقط. فبدلاً من تصميم دوائر طرح كاملة، يكفي:

  1. تحويل العدد المراد طرحه إلى نظيره السالب باستخدام Two's Complement.
  2. إضافته إلى العدد الأصلي.

مثلاً، لحساب 100 - 12، يمكن للمعالج أن يحول 12 إلى -12 ثم ينفذ عملية جمع واحدة.

هذا القرار التصميمي وفر مزايا كبيرة:

  • تبسيط دوائر ALU.
  • تقليل استهلاك الطاقة.
  • خفض تكلفة التصنيع.
  • تحسين الأداء.
  • توحيد منطق العمليات الحسابية داخل المعالج.

وفي الحواسيب القديمة، كانت هذه المزايا حاسمة جداً لأن كل دائرة إضافية كانت تعني مزيداً من الصمامات المفرغة أو الترانزستورات أو الكلفة والصيانة.

ملخص سريع لأهم الأفكار

  • الحاسوب لا يفهم إلا 0 و1.
  • تمثيل الأعداد الموجبة في الثنائي سهل ومباشر.
  • تمثيل الأعداد السالبة بطريقة Sign Magnitude يسبب مشاكل في العمليات الحسابية.
  • نظام Two's Complement يحل هذه المشكلة بأناقة.
  • حساب Two's Complement يتم عبر عكس البتات ثم إضافة 1.
  • هذا النظام يجعل الطرح ممكناً باستخدام دوائر الجمع فقط.
  • معظم المعالجات الحديثة تعتمد هذا الأسلوب حتى اليوم.

الخلاصة التقنية

يعكس نظام Two's Complement مبدأً مهماً في هندسة المعالجات: أفضل الحلول ليست دائماً الأكثر وضوحاً، بل الأكثر كفاءة واتساقاً مع العتاد. فبدلاً من بناء منطق منفصل للتعامل مع الأعداد السالبة، مكّن هذا الترميز المعالج من استخدام البنية نفسها تقريباً للجمع والطرح معاً. لهذا لا يُعد Two's Complement مجرد طريقة ترميز، بل قراراً معمارياً ذكياً ساهم في تبسيط تصميم CPU ورفع أدائه عبر أجيال طويلة من الحوسبة.

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *