1716106929_3p

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 5

‫بنيان الحواسب‬

‫املحاضرة ‪ 3‬عملي‬

‫إعداد‪ :‬م‪.‬همام ياسين‬


‫إشراف‪ :‬د‪.‬فادي متوج‬

‫‪https://manara.edu.sy/‬‬ ‫‪1‬‬
‫‪ .1‬الهدف من املحاضرة‪:‬‬
‫ً‬
‫في نهاية املحاضرة يجب أن تكون قادرا على‪:‬‬
‫التعرف على املكدس والتعامل معه‪ ،‬دفع قيم إليه ‪ push‬وسحب قيم منه ‪.pop‬‬ ‫‪-‬‬

‫‪ .2‬املكدس ضمن املحاكي‪:‬‬


‫قسم ّ‬
‫مكدس البرنامج‪Program stack View :‬‬
‫مكدس البرنامج املبين في الشكل (‪ )1‬هو منطقة تحافظ على القيم املؤقتة أثناء تنفيذ التعليمات‪.‬‬ ‫‪-‬‬
‫ً‬ ‫ً‬ ‫ً‬
‫وهو بنية معطيات تتمتع بخاصية من يدخل أخيرا يخرج أوال (‪ )Last-In-First-Out‬أو اختصارا ‪ .LIFO‬في بنية‬ ‫‪-‬‬
‫املعطيات ذات الخاصية ‪ LIFO‬يكون آخر عنصر تم إضافته للمجموعة هو أول عنصر تتم إزالته منها‪.‬‬
‫كما أنها تستخدم إلجراء املقاطعة واستدعاء التوابع الفرعية بكفاءة‪ .‬كل برنامج له مكدس فردي خاص به‪.‬‬ ‫‪-‬‬
‫ُ‬
‫تستخدم تعليمات وحدة املعالجة املركزية ‪( PSH‬الدفع) و ‪ POP‬لتخزين القيم أعلى قيم املكدس وسحب القيم‬ ‫‪-‬‬
‫من أعلى املكدس على التوالي‪.‬‬

‫الشكل ‪ – 1‬قسم مكدس البرنامج ضمن برنامج املحاكي‬


‫يعرف املكدس بأنه بنية معطيات متسلسلة تتم فيها عمليات اإلضافة والحذف عند نهاية واحدة فقط من‬ ‫‪-‬‬
‫ً‬
‫السلسلة‪ .‬عادة ما يشار إلى آخر عنصر تمت إضافته إلى املكدس باسم قمة(‪ )Top‬املكدس كما يزود املكدس‬
‫بعملية استراق (‪ )Peek‬تمكن من معرفة قيمة قمة املكدس دون القيام بإزالته منه‪.‬‬

‫ً‬
‫للمكدس سعة محدودة‪ .‬فإذا كان املكدس ممتلئا ال يمكن عندئذ القيام بعملية دفع عنصر إليه‪ ،‬وتسبب محاولة‬ ‫‪-‬‬
‫القيام بهذه العملية حصول طفحان (أو ما يعرف بتجاوز الحد األعلى للسعة ‪ .)Overflow‬تقوم عملية السحب‬

‫‪https://manara.edu.sy/‬‬ ‫‪2‬‬
‫بإزالة قمة املكدس وتسبب إما الكشف عن العناصر املوجودة داخل املكدس بالتتابع أو الحصول على مكدس‬
‫ً‬
‫فارغ‪ ،‬إذا كان املكدس فارغا فإن محاولة القيام بالطرح يسبب حصول تجاوز الحد األدنى للسعة (‪.)Underflow‬‬

‫ً‬ ‫ً‬
‫يبين الشكل (‪ )2‬رسما توضيحيا للمكدس مع تمثيل عمليتي الدفع والسحب وطريقة ‪.LIFO‬‬ ‫‪-‬‬

‫الشكل ‪ – 2‬رسم توضيحي للمكدس‬

‫‪https://manara.edu.sy/‬‬ ‫‪3‬‬
‫‪ .3‬تمارين‬
‫تمرين ‪:1‬‬
‫تذكر التمرين ‪ 1‬في املحاضرة السابقة‪ .‬ما كان الهدف من كل تعليمة وكم حجم كل منها؟‬

‫عدل البرنامج كما يلي‪:‬‬


‫أضف تعليمة تدفع قيمة املسجل ‪ R01‬إلى أعلى املكدس‪ ،‬ثم ضعها بعد تعليمة الجمع‪ ،‬ثم نفذها وراقب القيمة‬ ‫‪-1‬‬
‫ضمن قسم مكدس البرنامج‪.‬‬
‫أضف تعليمة تدفع القيمة ‪ 2‬إلى أعلى املكدس‪ ،‬ثم ضعها بعد التعليمة السابقة‪ ،‬ثم نفذها وراقب القيمة ضمن‬ ‫‪-2‬‬
‫قسم مكدس البرنامج‪.‬‬
‫أضف تعليمة تسحب القيمة من أعلى املكدس إلى املسجل ‪ .R03‬ضعها بعد تعليمة القفز غير املشروط‪ ،‬ثم نفذها‬ ‫‪-3‬‬
‫وراقب قيمة املسجل وقسم مكدس البرنامج‪.‬‬
‫أضف تعليمة تسحب القيمة من أعلى املكدس إلى املسجل ‪ .R04‬ضعها بعد التعليمة السابقة‪ ،‬ثم نفذها وراقب‬ ‫‪-4‬‬
‫قيمة املسجل وقسم مكدس البرنامج‪.‬‬
‫أعد تنفيذ التعليمة السابقة‪ ,‬ما النتيجة؟‬ ‫‪-5‬‬

‫‪https://manara.edu.sy/‬‬ ‫‪4‬‬
‫تمرين ‪:2‬‬
‫ً‬
‫قم بدفع القيم ‪ 4‬ثم ‪ 3-‬ثم ‪ 5‬ثم ‪ 6-‬يدويا ألعلى املكدس بالترتيب املذكور‪,‬‬
‫أنش ئ كود برمجي يقوم بسحب قيمتين من أعلى املكدس ويضربهما ثم يدفع الناتج إلى أعلى املكدس مرة أخرى‪ ،‬ويستمر‬
‫الكود بالعمل حتى ال يتبقى في املكدس إال قيمة واحدة فقط‪ ،‬ثم نفذ الكود‪,‬‬

‫انتهت املحاضرة‪..‬‬

‫‪https://manara.edu.sy/‬‬ ‫‪5‬‬

You might also like