stack در برنامه های اسمبلی

سلام دوستان .لطف کنید برای من توضیح بدید،وقتی در برنامه های اسمبلی یک سگمنت را به عنوان استک در برنامه در نظر میگیریم ،چه کنترل هایی روی ان صورت میگیرد.ایا روی این قسمت از حافظه داده ها با مدلlifo وارد و خارج میشوند و چه برنامه ای ناظر است بر مدل ورود و خروج اطلاعات از استک.
لطف کنید هر کسی راجع به استک هر چیز دیگری هم می دونه برام بذاره.
mr30
 

saalek110

Well-Known Member
با سلام
من اطلاعات زیادی ندارم در این مورد ولی نظرم را می گویم شاید مفید باشد.
وقتی ما دستور :
کد:
mov ah,al
را اجرا می کنیم چگونگی اجرا برمی گردد به ساختار سخت افزاری داخل cpu . یعنی مداراتی داخل cpu ساخته شده که با ارسال کدهای mov ah,al باعث انتقال محتویات یک قسمت به یک قسمت دیگر می شود. یعنی صحبت اتصالات مدارها است. یعنی واقعا با ارتباط بین حافظه ها از داخل سیم ها اطلاعات با فورس دستور mov ah,al منتقل می شود. Cpu هر دستوری آن را وادار می کند تا کانالهایی را باز بکند تا حافظه ای به حافظه دیگر جریان پیدا کند.
در مورد دستور push و pop هم این اجازه جریان اطلاعات بین حافظه های داخل cpu و داخل ram است که به داخل ram به جایی که پشته تعریف شده اطلاعات رفت و برگشت می کند.
این هم به نظر من برمی گردد به سخت افزار.
یعنی وقتی برنامه ای اجرا می شود در مرحله ای مسیر پشته با نگاه به مدل برنامه تعیین می شود. و در زمان اجرای برامه مسیر پشته همین باقی می ماند. و بعد اجرای برنامه حالا dos و windows چه استفاده ای از پشته می کنند دیگر بحث دیگری است و من تقریبا در این مورد فعلا هیچ نمی دانم.
مسلما با اولین سرچ کلی مطلب پیدا میشه در این مورد. من بدون تحقیق جملات بالا را نوشم.
 

saalek110

Well-Known Member
http://www.ece.cmu.edu/~koopman/stack_computers/contents.html

فکر کنم مقداری مطلب مناسب در این سایت بیابید.

======================
در این وبلاگ هم گویا نویسنده می خواسته cpu بسازد و رسیده به قسمت طراحی stack آن.

http://qstuff.blogspot.com/2005/08/lets-make-cpu-dilemma-stack.html

مسائلی که بحث کرده فکر کنم به بحث این تاپیک کمک کند. البته شاید من سئوال را خوب متوجه نشده باشم.
 
آخرین ویرایش:
خیلی متشکر از راهنمایی و توجه شما.
سوال دقیقا این هست که ،توی یک برنامه ی exe وقتی که یک سگمنت را استک تعریف میکنیم،cpu برای انجام عملیاتی که اصلا ارتباطی به ما ندارد،از استک استفاده میکند و با ان push و pop میکند.تا اینجا همه چیز مرتب است.اما وقتی که یک برنامه ی com داریم وh100 خانه ی اول سگمنت داده را خالی گذاشتیم، سی پی یو برای انجام عملیات مربوط به خود چطور از همان 100h خانه حافظه سگمنت داده استفاده میکند؟
خیلی ممنون.
 

saalek110

Well-Known Member
با سلام.
ببینید در برنامه های exe قطعه پشته در قطعه جداگانه ای است. ولی در برنامه com از انتهای همان ((تک قطعه)) استفاده میشه.

در برنامه های com فرض کنید شما در یک سالن دراز دفتر کار دارید. اجناسی که فعلا نیاز ندارید را به کارگر خود می گویید برود از ته سالن بچیند و همین طور بیاید جلو. و دفتر شما در این تالار دراز ته تالار نیست بلکه این سر تالار جلوی در است .
یعنی پشته در آن 100h نیست. آن 100h برای کارهای دیگری است که چیزهایی مثل دیسکریپشن فایل و ...... است که بحثی نداریم روی آن.

برای تمرین دو فایل یکی exe و یکی com بسازید. داخل هر دو فایل 5 تا push بگذارید. بعد فایلها را در دیباگ ویندوز باز کنید و به sp و ss نگاه کنید. با دستور t یکی یکی دستورات push را اجرا کنید و ببینید sp چه تغییری می کند.
در فایلهای com ما می بینیم که cs & ss & ds & es همه برابرند. یعنی قطعه ها یکی است. پس کارها در قسمتهای مختلف همان تک پشته انجام می شود.
 

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

بالا