در ادامه این مطلب با یکی از ثبات های پشته مورد استفاده در زبان اسمبلی آشنا خواهید شد.ثبات های SS و SP به پشته به صورت SS:SP به پشته اشاره می کنند. در هنگام اجرای یک برنامه EXE ثبات SS توسط سیستم عامل برابر آدرس سگمنتی که پشته را در بردارد و ثبات SP برابر آفست بالای پشته می شود. یعنی آدرس جائی از پشته که داده باید برداشته شود.

پشته به صورت معکوس در حافظه رشد می کند(یعنی به سمت آدرس های کمتر). وقتی یک کلمه در پشته اضافه می شود در آدرس SS:SP ذخیره می شود و از SP دو واحد کم می شود. دستور push مقدار SP را کاهش و دستور pop مقدار SP را افزایش می دهد.

1

 

هنگامی که یک کلمه در پشته push شود عملیات زیر توسط CPU انجام می شود:

۱٫ دو واحد از ثبات SP کم می شود.
۲٫ کلمه مورد نظر در آدرس SS:SP کپی می شود.

هنگامی که یک کلمه از پشته pop شود عملیات زیر توسط CPU انجام می شود:

۱٫ از آدرسSS:SP یک کلمه خوانده می شود.
۲٫ دو واحد به ثبات SP اضافه می شود.

مثال. فرض کنید مقدار اولیه SP برابر با ۱۰۰۰h است.

push word 1 ;1 stored at 0FFEh, SP = 0FFEh
push word 2 ;2 stored at 0FFCh, SP = 0FFCh
push word 3 ;3 stored at 0FFAh, SP = 0FFAh
pop AX ;AX = 3, SP = 0FFCh
pop BX ;BX = 2, SP = 0FFEh
pop CX ;CX = 1, SP = 1000h

هنگام فراخوانی زیر برنامه توسط دستور call مقدار ثبات های CS و IP که به دستورالعمل بعدی اشاره می کنند در پشته ذخیره می شود. هنگامی که CPU در زیر برنامه به دستور ret می رسد مقادیر را از پشته حذف و به ثبات های CS و IP برمی گرداند

untitled

 

مثال. شکل زیر وضعیت پشته را قبل و بعد از انجام دستور Call 3C10:0720 نشان می دهد.