ثبات پشته‌ای کیست؟ توضیح بده.
ثبات پشته‌ای یک ثبات پردازنده مرکزی رایانه است که هدف آن پیگیری رد پشته فراخوانی‌ها است. در یک دستگاه با معماری مبتنی بر باتری، این ثبات ممکن است یک ثبات اختصاص داده شده مانند SP بر روی یک Intel x86 باشد. در یک مجموعه ثبات معمولی، این ثبات پشته ای ممکن است یک ثبات که طبق قرارداد رزرو شده‌است باشد، مانند دستگاه‌های PDP-11 یا RISC. بعضی از طرح‌هایی مانند Data General Eclipse هیچ ثبات اختصاص داده شده‌ای ندارند، اما از یک آدرس رزرو شده حافظه سخت‌افزاری برای این کار استفاده می‌کنند.دستگاه‌های قبل از اواخر دهه 1960 — مانند PDP-8 و HP 2100 — کامپایلرهایی که از توابع بازگشتی پشتیبانی کنند، نداشتند. دستورالعمل‌های زیر مجموعه ای آنها معمولاً مکان فعلی را در آدرس پرش ذخیره می‌کردند و سپس شمارنده برنامه را به آدرس "بعدی تنظیم می‌کردند". در حالی که این ساده‌تر از مدیریت یک پشته است، از آنجا که تنها یک مکان بازگشت به ازای هر کد زیرمجموعه ای وجود دارد، پیاده‌سازی تابع بازگشتی بدون تلاش قابل توجه برنامه‌نویس ممکن نبود.ماشین پشته‌ای دارای دو یا چند ثبات پشته‌ای است — یکی از آنها رد پشته فراخوانی‌ها را نگه می‌دارد، دیگری (ان) رد پشته(ها) ی دیگر را دنبال می کنند.ثبات پشته‌ای در x86.در ۸۰۸۶، ثبات پشته‌ای اصلی، اشاره گر پشته نامیده می‌شود (Stack Pointer -SP). ثباتِ قسمتِ پشته (Stack segment register -SS) معمولاً برای ذخیره اطلاعاتی در مورد بخش حافظه ای است که پشته فراخوانی‌ها ی برنامه در حال اجرا، را ذخیره می‌کند. SP به بالای پشته فعلی اشاره دارد. به‌طور پیش فرض، پشته در حافظه به سمت پایین رشد می‌کند، بنابراین مقادیر جدید در آدرس (خانه)های پایین حافظه قرار می‌گیرد. برای وارد کردن مقدار بر روی پشته، دستور codice_1 استفاده می‌شود. برای خارج کردن یک مقدار از روی پشته، دستور codice_2 استفاده می‌شود.مثال: فرض کنید SS = 1000h و SP = 0xF820. این به این معنی است که بالای پشته فعلی، آدرس فیزیکی 0x1F820 است (به دلیل تقسیم‌بندی حافظه در ۸۰۸۶). دو دستورالعمل بعدی این برنامه عبارتند از: PUSH AXPUSH BXاین نشان می‌دهد که PUSH چگونه کار می‌کند. معمولاً برنامه در حال اجرا ثبات‌ها را بر روی پشته PUSH می‌کند تا از آنها برای اهداف دیگر استفاده کند، مانند فراخوانی یک سلسله کد که ممکن است مقادیر فعلی ثبت‌ها را تغییر دهد. برای بازگرداندن مقادیر ذخیره شده در پشته، برنامه باید شامل دستورالعمل‌هایی مانند زیر باشد: POP BXPOP AXنکته: این برنامه در ابتدا BX را از روی پشته خارج می‌کند، زیرا آخرین بار بر روی پشته قرار داده شد.نکته: در ۸۰۸۶، دستورالعمل codice_1 و codice_2 فقط می‌تواند با عناصر ۱۶ بیتی کار کند.محرک پشته.پردازنده‌های ساده‌تر اشاره گر پشته را در یک ثبات سخت‌افزاری مرتب ذخیره می‌کنند و از واحد محاسبه و منطق (ALU) برای مدیریت ارزش آن استفاده می‌کنند. به‌طور معمول گذاشتن در و برداشتن از پشته به چند عملیات زیر شاخه ای خلاصه می‌شود، به‌طور جداگانه اشاره گر پشته را اضافه یا کم کردن، خواندن از یا ذخیره کردن در حافظه.پردازنده‌های جدیدتر دارای یک موتور پشته اختصاصی برای بهینه‌سازی عملیات پشته‌ای هستند. Pentium M اولین پردازنده x86 بود که یک موتور پشته را معرفی کرد. در پیاده‌سازی آن، نشانگر پشته در میان دو ثبات تقسیم می‌شود: ESP O، که یک ثبات ۳۲ بیتی است، و ESP d، مقدار دلتا ۸ بیتی است که به‌طور مستقیم توسط عملیات پشته به روز می‌شود. کد دستورهای PUSH, POP, CALL و RET به‌طور مستقیم با ثبات ESP d تعامل می‌کنند. اگر ESP d در شرف سرریز باشد یا ثبات ESP توسط دستورالعمل‌های دیگر (هنگامی که ESP d ≠ ۰) مورد استفاده قرار گرفته‌است، یک عملیات زیرشاخه همگام سازی وارد شده‌است که ESP O را با استفاده از ALU به روز می‌کند و ESP d را به ۰ برمی‌گرداند. این طرح به‌طور عمده در پردازنده‌های بعدی Intel دست نخورده باقی مانده‌است، اگر چه ESP O به ۶۴ بیت گسترش یافته‌است.یک موتور پشته شبیه به مدل اینتل نیز در معماری میکرو AMD K8 پذیرفته شد. در Bulldozer، نیاز به عملیات زیر شاخه هماهنگ ساز حذف شد، اما طراحی داخلی موتور پشته شناخته نشده‌است.