وحدة الحساب والمنطق

وحدة الحساب والمنطق (بالإنجليزية: Arithmetic and Logic Unit) هي إدارة رقمية موجودة داخل وحدة المعالجة المركزية مسؤولة عن إجراء كافة العمليات الحسابية (كالجمع والطرح والقسمة الضرب) علما ان الوحدة فقط تستخدم عملية واحدة وهي الجمع أما العمليات الأخرى مثل الطرح هي عملية جمع المكافئ والضرب هي  اجمع لعدة مرات والقسمة هي والعمليات المنطقية (مثل OR,AND,XOR) في الحواسب، كما تقوم بعمليات المقارنة لمعرفة نتيجة المقارنات المنطقية وهي : (أكبر من وأصغر من ويساوي ولا يساوي) ومشتقات هذه المقارنات، وكذلك فهي توفر إمكانية تخزين المعلومات بشكل مؤقت بالإضافة إلى إمكانية معالجة المعلومات. فهي تعطي خرجها بالاعتماد على قرار متخذ بداخلها. 
وبما أن كافة عمليات المعالجة تنحصر في نوعين من العمليات فإما أن تكون حسابياتية أو ان تكون منطقية فإن هذه الوحدة قادرة على معالجة أي مسألة يطلب منها معالجتها، ويمكن القول ان هذه الوحدة هي التي تقوم فعليا بتنفيذ التعليمات.
وفي الشكل المقابل فان A و B هما المعاملان، R هو الخرج، F هو الدخل من وحدة التحكم، D هي حالة الخرج.
مما يتألف المعالج؟
يتألف المعالج عادة من وحدتين هما:
-وحدة التنفيذ Execution Unit
ومهمتها تنفيذ التعليمات.
-وحدة ملائمة الممر Bus Interface Unit
لنقل البيانات. 
وتعدّ وحدة الحساب والمنطق كوحدة تنفيذ Execution Unit. فهي تتلقى الأوامر من وحدة التحكم Control Unit لتنفيذ التعليمة المخزنة في مسجل التعليمة Instruction Register فتقوم بتنفيذها ثم تعطي النتيجة التي تخزن عادة في الذاكرة الرئيسية RAM وتستعين هي الأخرى بالمسجلات لإتمام عملها.

أقسامها

تنقسم وحدة الحساب والمنطق إلى ثلاث وحدات:

-وحدة الفاصلة العائمة

من الصعوبة على المعالج أن يقوم بحساب أعداد الفاصلة العائمة (وهي الأعداد التي بها فاصلة عشرية ومن أمثلتها (2.5565 و 8856.36532 و 0.220003) لأنه في هذه الحالة سوف يستهلك الكثير من قوة المعالجة في حساب عملية واحدة.
ووحدة الفاصلة العائمة متخصصة في العمليات الحسابياتية الخاصة بالفاصلة العائمة. وتلعب هذه الوحدة دورا رئيسيا في سرعة تشغي البرامج التي تعتمد بشكل كبير على الأعداد العشرية وهي في الغالب الألعاب الثلاثية الأبعاد وبرامج الرسم الهندسي.
تساعد قوة وحدة الفاصلة العائمة الكبيرة في تسريع الألعاب الثلاثية الأبعاد، مع أن دور المعالج قد قل من هذه الناحية بفضل دخول البطاقات الرسومية المسرعة AGP بقوتها العالية مما قلل من الاعتماد على المعالج المركزي في هذا المجال.
توجد وحدة الفاصلة العائمة في المعالجات 486 فما أحدث داخل المعالج، وقد كانت توضع في المعالجات386 وما قبله خارج المعالج مما يجعل عملها أبطأ.

-وحدة الأعداد الصحيحة

و تختص هذه الوحدة بالقيام بحسابات الأعداد الصحيحة، وتستعمل الأرقام الصحيحة في التطبيقات ثنائية الأبعاد كالوورد Word وإكسل Excel وبرامج الرسم الثنائية الأبعاد. وتعدّ وحدة الأعداد الصحيحة مهمة لأن معظم البرامج التي نستخدمها تعتمد على هذه الوحدة.
IUOPYD QWSZ ZSAW HGFLI

-المسجلات

المسجلات هي عبارة ذاكرة سريعة تستخدم لكي يخزن فيها المعالج الأرقام التي يريد أن يجري عليها حساباته، فوحدة الحساب والمنطق لا يمكنها تنفيذ أي عملية حسابياتية إلا بعد أن تجلب الأرقام المراد إجراء العمليات عليها إلى المسجلات. حيث أن حجم المسجلات مهم لأنه يحدد حجم البيانات التي يستطيع الحاسب إجراء الحسابات عليها.
*ماذا نعني بقولنا عند تسمية المعالج بمعالج ذو 32bits أو 64bits؟
الأساس في ذلك هو وحدة الحسابيات والمنطق ALU ومسجلاتها وبالتحديد طول "بتات" الأعداد الصحيحة التي من الممكن التعامل معها داخل المعالج.
ففي معالج 32bits مثلا ستكون وحدة الحساب والمنطق قادرة على إجراء العمليات الحسابياتية والمنطقية على أعداد بطول 32bits، وبما أن وحدة الحساب والمنطق تعمل بشكل عام مع المسجلات فمن الطبيعي أن تكون المسجلات بنفس الحجم.

بناء وحدة حسابيات ومنطق

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

1.البنية من نوع CISC

بالإنجليزية (Complex Instruction Set computer)
في هذا النوع تحتوي وحدة الحساب والمنطق على أجزاء بنيوية تقوم بإنجاز التعليمات الحسابياتية المعقدة وتنعكس هذه التعليمات الحسابياتية المعقدة برمجيا على شكل تعليمة في لغة الآلة الخاصة بهذا المعالج، وهذه التعليمات تثقل العبئ على المعالج.
وهذا النوع من المعالجات ينفذ تعليمة واحدة مع كل نبضة من المؤقت 
معالجات انتل غالبا تستخدم هذا النوع من المعالجات لانخفاض تكاليفها بالمقارنة مع () لذلك أصبح شائعا استخدامها تجاريا بالرغم من تعقيد كتابة برامجها

2.البنية من نوع RISC

بالإنجليزية (Reduced Instruction Set Computer) 
وفي هذا النوع تحتوي وحدة الحساب والمنطق على التعليمات الحسابياتية والمنطقية الأساسية (Add, Sub, Not, Or, And).
ولا تحتوي هذه الوحدة على بنية hardware لانجاز التعليمات الحسابياتية المعقدة (كالضرب أو التقسيم أو الرفع إلى قوة) وإنما يتم انجاز هذه العمليات المعقدة باستخدام مجموعة من التعليمات الأساسية، مثلا... تحول عملية الضرب إلى جمع متكرر. 
البنية من نوع RISC تعدّ أسهل في التصميم وتعطي مجموعة أبسط من التعليمات ويمكن تعقيد هذا النوع من الوحدات في تمثيل التعليمات المعقدة إما بشكل بنيوي وذلك بتطوير وحدة التحكم وإضافة مسجلات على بنية المعالج، أو ان يتم ذلك بشكل برمجي باستخدام خوارزميات متطورة.
ميزة هذه المعالجات تنفيذ اكثرمن تعليمة مع كل نبضة لكن كلفتها عالية مما أدى إلى استخدامها فقط في المجالات عالية المستوى والتقنيات العلمية العالية وممن المميزات أيضا سهولة التحميل للذاكرة والوصول للبيات في الذاكرة ولكن هذا على حساب الكلفة العالية

بناء وحدة ALU من نوع RISC

يتم انجاز كافة العمليات داخل ALU ثم يتم اختيار عملية معينة...
 
مثلا تحتوي هذه الخلية في الشكل السابق على عمليتين منطقيتين وعملية جمع/طرح ومدخل less. يطبق الدخل الرئيسي لهذه الوحدة على مداخل كافة العمليات الداخلية وتختارالعملية المطلوبة عبر الناخب.
يتحكم بالناخب الأول المدخل Binvert الذي يكون عمله كالتالي :
Binvert=0 ← فالعملية جمع
Binvert=1 ← فالعملية طرح
أما بالنسبة للناخب الآخر:
Operation=00 ← فالعملية AND
Operation=01 ← فالعملية OR
Operation=10 ← فالعملية إما جمع أو طرح
Operation=11 ← فالعملية " Less"
فإذا أردنا تنفيذ عملية ما فيتم إعطاء رقم العملية عن طريق المداخل Operation و Binvert من وحدة التحكم"كما ذُكر سابقا" فتفهم وحدة الحساب والمنطق العملية المطلوبة منها.
والمخرج Set هو عبارة عن خط يعطي نتيجة الجامع الكامل مهما كانت حالة العملية Operation، أما المخرج "العلم" OverFlow فيتحسس في حال حدوث طفحان.
كما يمكن وضع عدد أكبر من العمليات وبذلك يزيد عدد مداخل النواخب وعدد خانات Operation.

وصل مجموعة من ALU

في الشكل السابق لدينا دارة وحدة حسابيات ومنطق على 32bits، حيث يتم أخد الحمل Carry Out في كل مرة وإدخاله إلى المدخل Carry In للدارة التالية لها مباشرة.. وبالتالي نكون قد حصلنا على دارة تقوم بتنفيذ مجموعة من العمليات على عددين مؤلفين من 32bits باستخدام ALU.
إن العملية "Set On Less" هي عملية مقارنة، وعملها كالتالي :
A<B فالناتج ← 1…0000
A≥B فالناتج ← 0…0000 
وبمعني آخر فهي تنفذ A-B. فإذا كانت نتيجة الطرح سالبة يوضع واحد "1" في الخانة Result0 من الناتج وباقي الخانات أصفار. أما إذا كانت نتيجة الطرح موجبة فيوضع صفر "0" في كل خانات الناتج. 
ولتحقيق ذلك، ففي دارة ALU31 "الأخيرة" أخذنا خط Set إلى المدخل Less في دارة ALU0 "الأولى" ويمكن ان تكون صفر أو واحد وذلك حسب حالة الجامع الكامل.
كذلك يمكن وصل جميع المخارج Results إلى البوابة NOR بحيث يتحسس علم الصفر Zero Flag عندما تكون قيم جميع المخارج هي صفر منطقي. 
وكذلك الحال يمكن معرفة حالة باقي الأعلام بتصميم الدارة الخاصة بكل علم.