PDA

View Full Version : چطوری اطلاعات در رجیستری قاطی نمیشن



yegane8
پنج شنبه 04 آبان 1391, 16:07 عصر
سلام
من تازه شرزع به کار اسمبلی کردم
میخوام بدونم تو این زبان که متغییر تعریف نمیشه و ما مستقیما با رجیستر ها تو cpu کار می کنیم
حالا چطوری مثلا وقتی ادرس یه data رو می ریزیم تو رجیستر dx بعد مثلا دو خط بعد ادرس یه Data دیگه رو باز می ریزیم تو رجیستر dx - این dx ها با هم قاطی نمیشن ؟
باتشکر فراوان

silverfox
پنج شنبه 04 آبان 1391, 20:02 عصر
قاطی می شن، اگه لازم دارین قبلی رو نگه دارین push کنین تو stack

yegane8
جمعه 05 آبان 1391, 16:17 عصر
ممنون
حالا تو خود stack چطوری قاطی نمیشن
و اگر قراره اخرش همه چی رو بریزیم تو stack پس چرا میریزیم تو یه رجیستر بعد اوون رجیستر رو push می کنیم تو stack
اگه میشه یه ذره بیشتر توضیح بدین

silverfox
جمعه 05 آبان 1391, 18:17 عصر
برای محاسبات معمولا داده ها روی register ها هست ولی برای ذخیره موقت یا ارسال پارامتر به توابع و اینجور موارد معمولا از stack استفاده می شه.
stack ساختارش اینطوری هست که شما یه سری چیز میریزین توش روی هم و آدرس بالاترین خونش رو نگه می دارید(یکی از رجیستر ها) بعد هربار که چیزی بریزین توش اون آدرس می ره بالاتر هر چیزی بردارین اون آدرس میره روی عنصر پایینی.(شما فقط به آخرین عنصر دسترسی دارید البته می تونید با یه پوینتر به جز پوینتر به آخرین عنصر از وسطاش هم بخونید)
معمولا یا اطلاعات رو از مموری می خونیم و می ریزیم توی رجیستر کاری انجام میدیم باز می نویسیم روی مموری یا اینکه مثلا توی توابع شما پارامتر های ورودی و آدرس بازگشت تابع رو push می کنید توی stack بعد تابع اونارو بر می داره میریزه توی رجیستر ها کاراشو که کرد مثلا آدرس بازگشت رو از stack بر میداره و بر میگرده به بقیه برنامه.
نمی دونم از روی کتابی می خونید یا سر کلاسی میرید ولی هرجا که هست اینا حتما جزو مباحثی هست که آموزش داده می شه می تونید مثلا یه برنامه ساده بنویسید با c بعد disassemble کنید نگاه کنید کد های assemblyش رو ببینید مثلا کی از رجیستر و کی از stack استفاده می کنه.

kernel
جمعه 05 آبان 1391, 18:22 عصر
دوست عزیز قبل طرح این سوالات کمی مطالعه داشته باشین ! درسته این فروم جای پرسش و پاسخ به سوالات برنامه نویسی هست ! ولی خود سوال هم باید از یک سطح حداقلی برخوردار باشه تا بشه مطرح کرد !
stack تنها یک محل حافظه نیست ! بلکه نوعی ساختمان داده هست که به صورت LIFOعمل می کنه . یعنی آخرین داده ای که در اون قرار میدید اولین داده ای هست که میشه خوند ! یک کوله پشتی کوه نوردی رو در نظر بگیرید که قراره لباسها تون رو توش قرار بدین ٬ بعد از اینکه کوله از لباسها پر شد ٬ برای برداشتن لباسها ٬ آخرین لباسی که توی کوله گذاشتین اولین لباسی هست که بهش دسترسی دارین . و همینطور آخرین لباسی که بهش دسترسی دارین اولین لباسی هست که توی کوله قرار دادین ! stack به این شکل عمل می کنه !

IamOverlord
شنبه 06 آبان 1391, 04:09 صبح
سلام.


...
میخوام بدونم تو این زبان که متغییر تعریف نمیشه و ...
باتشکر فراوان

پس حافظه ی RAM به چه دردی می خوره؟ در این زبان هم متغیر تعریف می شه،‌ محلی یا غیر محلی، ایستا یا پویا،... این که در چه جایی تعریف بشه و اندازش چه قدر باشه و مسائل دیگه دست شماست...