ما هو مؤشر Stack / Stack: أنواع وتطبيقاته

جرب أداة القضاء على المشاكل





المكدس ليس سوى بنية البيانات الخطية حيث يتم الإدراج والحذف في نهاية واحدة فقط. عملية الإدراج لها اسم خاص يعرف باسم PUSH وعملية الحذف لها أيضًا اسم خاص يعرف باسم POP. تعد PUSH و POP عمليتين أساسيتين يمكن تنفيذهما فقط في مكدس معين. إنها مجموعة من مواقع الذاكرة وترتبط مواقع الذاكرة إما بذاكرة القراءة أو ذاكرة الكتابة. يستخدم هذا لتخزين المعلومات الثنائية أثناء تنفيذ البرنامج ، عندما نقوم بتنفيذ أي برنامج ، سيتم تخزين محتويات هذا البرنامج في المكدس. يتبع آخر في الخروج أولا (LIFO) ويستخدم فقط لتخزين واسترجاع البيانات ولكن لا يتم استخدامه لتخزين البيانات. تمت مناقشة شرح موجز لمؤشر المكدس / المكدس أدناه.

ما هو Stack / Stack Pointer؟

تعريف: المكدس هو جهاز تخزين يستخدم لتخزين المعلومات أو البيانات بطريقة LIFO (Last In First Out). عندما نقوم بإدخال البيانات في شكل طريقة LIFO ، فإن العنصر الذي يجب حذفه أولاً هو آخر عنصر تم إدخاله ، لذلك يتم إخراج آخر عنصر مدرج أولاً. إنها وحدة الذاكرة داخل سجل العناوين تسمى مؤشر المكدس (SP). يشير مؤشر المكدس دائمًا إلى العنصر العلوي في المكدس مما يعني الموقع الذي يجب إدراج البيانات فيه.




أنواع المكدس

هناك نوعان من الحزم هما كومة التسجيل ومكدس الذاكرة.

سجل Stack

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



دفع العملية في Register Stack

الخطوة 1: يزيد مؤشر المكدس بمقدار 1.

SP ← SP + 1


الخطوة 2: أدخل البيانات في المكدس.

1000 [SP] ← CT

حيث DR هو سجل البيانات

الخطوه 3: تحقق مما إذا كانت المكدس ممتلئة أم لا

إذا (sp = 0) ثم (كامل ← 1)

الخطوة 4: ضع علامة ليست فارغة

فارغ ← 0

عملية البوب ​​في Register Stack

الخطوة 1: قراءة البيانات من المكدس.

DR ← M [SP]

الخطوة 2: نقطة التناقص المكدس.

SP ← SP-1

الخطوه 3: تحقق مما إذا كانت المكدس فارغة أم لا

إذا كانت sp = 0 ثم فارغة ← 1

يتم عرض تنظيم مكدس مكدس السجل 64 بت في الشكل أدناه.

سجل منظمة Stack

سجل منظمة Stack

كومة الذاكرة

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

دفع العملية في Memory Stack

الخطوة 1: SP ← SP-1

الخطوة 2: 1000 [SP] ← CT

عملية البوب ​​في Memory Stack

الخطوة 1: DR ← M [SP]

الخطوة 2: SP ← SP-1

بالمقارنة مع وحدة التسجيل ، تخزن وحدة الذاكرة كمية كبيرة من البيانات. يظهر الشكل المكدس الذاكرة في الشكل أدناه.

كومة الذاكرة

كومة الذاكرة

تنقسم وحدة الذاكرة الإجمالية إلى ثلاثة أجزاء ، تحتوي وحدة الذاكرة الأولى على البرنامج (لا شيء سوى التعليمات) ، والجزء الثاني عبارة عن بيانات (معاملات) والجزء الثالث مكدس. يتم تخزين تعليمات البرنامج دائمًا في عداد البرنامج (PC) ، ويتم تحديد سجلات البيانات بواسطة سجل العنوان (AR). العنوان 3000 إلى 4001 المستخدم للمكدس ويتم تخزين العنصر أو العنصر الأول في 4001.

Stack / Stack Pointer in 8085 معالج دقيق

عرض المبرمج 8085 معالج دقيق يحتوي على سجلات للأغراض العامة و سجلات الأغراض الخاصة . مسجلات الأغراض العامة هي A و B و C و D و E و H و L والمسجلات ذات الأغراض الخاصة هي SP (Stack Pointer) و PC (Program Counter). يظهر عرض المبرمج للمعالج الدقيق 8085 في الشكل أدناه.

عرض مبرمج 8085

عرض مبرمج 8085

مؤشر المكدس عبارة عن سجل 16 بت يحتوي على عنوان الذاكرة ، افترض أن محتويات مؤشر المكدس (SP) هي FC78H ، ثم يفسرها المعالج الدقيق 8085. تحتوي مواقع الذاكرة على معلومات مفيدة من FC78H إلى FFFH ومن FC77H إلى 0000H لا يحتوي موقع الذاكرة على معلومات مفيدة. يظهر تفسير مؤشر المكدس في الشكل أدناه.

تفسير Stack Pointer

تفسير Stack Pointer

العمليات الأساسية لمؤشر Stack / Stack

هناك عمليتان للمكدس وهما: عملية PUSH و POP.

عملية دفع

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

التشغيل الأساسي لـ PUSH و POP

التشغيل الأساسي لـ PUSH و POP

الشكل (أ) هو المكدس. إذا كنت تريد دفع العنصر الذي يقوم بإدخال العنصر في المكدس ، فيجب عليك دفع (s ، a) ، حيث لا يمثل 's' سوى مكدس. في المكدس ، نضع العنصر 'a' وتظهر هذه العملية في الشكل (ب). انظر الشكل (3) ، افترض أن المكدس يحتوي على ثلاثة عناصر أ ، ب ، ج ، والمكدس مليء بعنصر.

إذا كنت ترغب في إدخال عنصر رابع- 'd' باستخدام الضغط (s ، d) ، ولكن لا توجد مساحة متاحة لإدراج العنصر ، فهذا يشير إلى أن المكدس تجاوز السعة. يتم استخدام مصطلحات الفائض عندما تكون المكدس ممتلئة وتظهر خوارزمية عملية الدفع أدناه.

دفع (مكدس [] ، أعلى ، مكدس أقصى ، عنصر)

إذا (أعلى == maxstack-1)

{

طباعة 'تجاوز'

}

آخر

{

أعلى = أعلى + 1

مكدس [أعلى] = عنصر

}

نهاية

عملية POP

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

يجب فحص التدفق السفلي في حالة حدوث عملية فرقعة على التوالي. في عملية pop ، أيًا كان العنصر العلوي الموجود في المكدس الذي يجب أن يُفرقع أو يُحذف ، لذلك لا داعي لذكر العنصر الذي سيتم ظهوره ، فسيتم إظهار العنصر الأعلى افتراضيًا. يتم عرض خوارزمية عملية البوب ​​أدناه.

البوب ​​(مكدس [] ، أعلى ، عنصر)

إذا (أعلى == - 1)

{

طباعة 'underflow'

}

آخر

{

عنصر = مكدس [أعلى]

أعلى = أعلى 1

}

مثال

يتم إدراج العناصر بالترتيب A ، B ، C ، D ، E ، وهي تمثل مجموعة العناصر الخمسة. في الشكل (أ) ، نريد دفع عنصر 'A' على المكدس ثم يصبح القمة صفرًا (أعلى = 0) ، وبالمثل القمة = 1 عندما يتم دفع عنصر 'B' ، أعلى = 2 عندما يكون العنصر 'C' ، الأعلى = 3 عندما يتم دفع العنصر 'D' ، والأعلى = 4 عند دفع العنصر 'E'.

لذا ، مهما كانت العناصر التي أخذتها يتم وضعها في المكدس ، فإن المكدس الآن ممتلئ. إذا كنت تريد دفع عنصر آخر ، فلا يوجد مكان في المكدس ، لذلك يشير ذلك إلى الفائض. الآن المكدس ممتلئ إذا كنت ترغب في إظهار العنصر 'E' يجب حذفه أولاً. تظهر عملية الدفع في الشكل أدناه.

دفع العملية

دفع العملية

يتعين علينا استخدام عملية pop لحذف العناصر الموجودة في المكدس. لذلك فقط اذكر pop () لا تكتب وسيطات في pop لأنه يحذف العنصر العلوي افتراضيًا. يتم حذف العنصر 'E' الأول بعد العنصر 'D'… .. 'A'. عندما يتم حذف العناصر العليا ، تنخفض القيمة الأعلى. عندما يكون top = -1 فإن المكدس يشير إلى تدفق تحت. تظهر عملية البوب ​​في الشكل أدناه.

عملية POP

عملية POP

إذن هذا هو شرح كيفية إدراج العناصر وحذفها في المكدس باستخدام عملية الدفع والبوب.

التطبيقات

تطبيقات مؤشر المكدس / المكدس هي

  • انعكاس السلسلة
  • أقواس متوازنة
  • تراجع / الاصبع
  • مكدس النظام لسجلات التنشيط
  • Infix ، بادئة ، postfix ، تعبير

أسئلة وأجوبة

1). ما هو مؤشر المكدس في الذراع؟

سجل مؤشر المكدس (R13) يستخدم كمؤشر للمكدس النشط في ARM.

2). لماذا يكون مؤشر المكدس 16 بت؟

مؤشر المكدس (SP) وعداد البرنامج (PC) المستخدمان لتخزين الموقع السابق وعنوان موقع الذاكرة هو 16 بت ، لذا فإن مؤشر المكدس (SP) هو أيضًا 16 بت.

3). ما هو دور مؤشر المكدس؟

يتمثل دور مؤشر المكدس (SP) في الإشارة إلى الجزء العلوي من العنصر في المكدس.

4). أي كومة تستخدم في 8085؟

المكدس المستخدم في 8085 هو Last In First Out (LIFO).

5). هل مؤشر المكدس سجل؟

نعم ، مؤشر المكدس (SP) هو سجل عنوان يشير دائمًا إلى أعلى العنصر في المكدس.

في هذا المقال ما هو