سوال در مورد push , pop

scooter2005

Member
یه سوال در مورد push , pop داشتم . می خواستم تو این ود تا مثال نحوه کار رو توضحیح بدید .
ممنون اگر سریع جواب بدید . مثلا در مثال دوم یه سری مقادیر داده شده و بعد از push , pop شدن دوباره برای جواب بررسی شده .


untitlhgh.gif


===========================================
untitlbhb.gif



push ax
push bx
push x
add bx,25
push y
push bx
pop ax
pop bx
pop cx

 

the_king

مدیرکل انجمن
حافظه stack یک اصولا ساختاری ساده داره :
1) بصورت معکوس پر میشه، یعنی از آدرس های بزرگتر به سمت آدرس های کوچکتر، به همین جهت است
که به هنگام نمایش محتویات اش از پایین به بالا پر اش می کنند.
2) Push کردن بصورت ضمنی عملی نیست، مثلا برای push کردن یک عدد 123 بایستی اول در حافظه متغیر یا رجیستری قرار بگیرد و سپس آن متغیر یا رجیستر را Push کرد.
3) Pop کردن درست معکوس ترتیب Push است، یعنی از آدرس های کوچکتر به سمت آدرس های بزرگتر.
4) منطق پشته همانند بشقاب هایی است که بعد از شستن روی هم قرار می گیرند، اولین بشقابی که از
بین بشقاب های شسته شده برداشته می شود، آخرین (جدیدترین) بشقابی است که شسته شده و بالای
صف آنها قرار دارد.

به همین جهت پشته می تواند برای تعویض مقادیر بکار رود، مثلا در مثال زیر جای مقادیر AX با BX تعویض می شود :
کد:
PUSH	AX
PUSH	BX
POP	AX
POP	BX

نحوه push شدن مشخص است، هر آنچه که push شد از پایین به سمت بالا در حافظه قرار می گیرد :
untitlhgh.gif

یعنی ابتدا ax و سپس bx و سپس cx و سپس ax + 10 در پشته قرار می گیرد.

در مثال دوم هم ابتدا ax و سپس bx و سپس x و سپس y و سپس bx + 25 در پشته قرار می گیرد :
untitlbhb.gif

در هنگام pop شدن مقادیر با ترتیب معکوس از پشته برداشته می شوند، چون اول ax از پشته pop شده است،
مقدار bx + 25 در آن قرار می گیرد و چون در ادامه bx از پشته pop شده است، مقدار y در آن قرار می گیرد
و چون در ادامه cx از پشته pop شده است، مقدار x در آن قرار می گیرد :
کد:
AX = 50
BX = 800
CX = 350
 

جدیدترین ارسال ها

بالا